none
カーソルを置くと文字を表示するツールバー RRS feed

  • 質問

  • アプリケーションで良く見かけるのですが、カーソルがツールバーの上に来ると、"保存"や"ファイルを開く"などの文字を表示するツールバーがあります。

    Visual Studioでも、「全て保存」のツールバーにカーソルを当てれば"全て保存"と文字が表示されます。あのツールバーは、どうやって作成するのでしょうか?

    使用している言語はC言語。マルチバイト文字セット使用。CreateToolbarEx関数などでツールバーを作成しています。

    2007年11月25日 5:15

回答

  • 昔ながらの方法ですが、ツールバーを作成する際に、TBSTYLE_TOOLTIPS スタイルをセットすれば、
    ツールチップが有効な(内部でツールチップコントロールが作成され関連付けられた)状態でツールバーが作成されます。
    後は、ツールバーの親ウィンドウのウィンドウプロシージャで WM_NOTIFY を捕まえ、
    ツールチップコントロールの通知である TTN_GETDISPINFO(TTN_NEEDTEXT)を処理すれば OK です。

    もし、動作環境のコモンコントロールのバージョンを 4.71 以上(IE4 以降または Windows 98 以降)に限定できるなら、
    TTN_GETDISPINFO の代わりに、ツールバーコントロールの通知である TBN_GETINFOTIP を使うこともできます。
    こちらのほうが多少扱いやすいでしょうか。
    2007年11月25日 17:01

すべての返信

  • 昔ながらの方法ですが、ツールバーを作成する際に、TBSTYLE_TOOLTIPS スタイルをセットすれば、
    ツールチップが有効な(内部でツールチップコントロールが作成され関連付けられた)状態でツールバーが作成されます。
    後は、ツールバーの親ウィンドウのウィンドウプロシージャで WM_NOTIFY を捕まえ、
    ツールチップコントロールの通知である TTN_GETDISPINFO(TTN_NEEDTEXT)を処理すれば OK です。

    もし、動作環境のコモンコントロールのバージョンを 4.71 以上(IE4 以降または Windows 98 以降)に限定できるなら、
    TTN_GETDISPINFO の代わりに、ツールバーコントロールの通知である TBN_GETINFOTIP を使うこともできます。
    こちらのほうが多少扱いやすいでしょうか。
    2007年11月25日 17:01
  • kes@さん、ありがとうございました。適切なアドバイスのおかげでツールチップの作成に成功しました。

    以下、今回行ったツールチップ作成方法です。(注:ツールチップを追加するのに必要な部分のみ記述)

     NMHDR* pnmh;
     NMTBGETINFOTIP* pnm;
     int iti;
     char str[32];
     

     switch (msg) {
      case WM_NOTIFY:
       pnmh = (NMHDR *)lp;
       if(pnmh->hwndFrom == hTool){
        if(pnmh->code == TBN_GETINFOTIP){
         pnm = (NMTBGETINFOTIP*)lp;
         switch(pnm->iItem){
          case IDM_MARU:
           iti = IDS_MARU;
           break;
          case IDM_SANKAKU:
           iti = IDS_SANKAKU;
           break;
         }
         LoadString(GhInst,iti,str,32);
         pnm->pszText = str;
         pnm->cchTextMax = (int)strlen(str);
         return 0;
        }
       }
       return 0;

    /*ツールバーのスタイルに、TBSTYLE_TOOLTIPSを加える。IDS_MARUやIDS_SANKAKUはストリングテーブルのID。

      IDM_MARUやIDM_SANKAKUはツールバーのID。*/

    2007年11月26日 8:31