Tool Bar の機能を設定する

ツールチップの表示と Tool Bar のアイコンクリックによる COMMAND のポストを設定します。

前田稔(Maeda Minoru)の超初心者のプログラム入門

Tool Bar の機能設定

  1. ツールチップの定義です。
        LPCTSTR  TIPS[]=
        {   "左 新規フォルダーの作成",
            "左 親のフォルダーに移動",
            "左 選択ファイルの削除",
            "左 選択ファイルのコピー",
            "左 フォルダーごとコピー",
            "右 フォルダーごとコピー",
            "右 選択ファイルのコピー",
            "右 選択ファイルの削除",
            "右 親のフォルダーに移動",
            "右 新規フォルダーの作成",
        };
        
  2. Tool Bar は List View と同じように MoveWindow() で表示位置を変更することができませんでした。
    そこでメインウインドウに Edit Box を貼り付けて、その上から Tool Bar を貼り付けることにします。
    つまり Tool Bar はメインウインドウの孫になるわけで、その関係がプログラムで問題になります。
    Tool Bar からのメッセージは Tool Bar の親ウインドウ Edit Box に対して送られます。
    そこで Edit Box の CALLBACK 関数を設定して、これらのメッセージを捕まえます。
  3. Edit Box に設定されている規定の処理ルーチンの入り口を Org_hWndC に保存します。
    SetWindowLong() で新しい CALLBACK 関数(MyProcC()) を設定します。
    プログラムの終了時に元に戻して下さい。
            Org_hWndC= (WNDPROC)GetWindowLong(g_hEditC,GWL_WNDPROC);
            SetWindowLong(g_hEditC,GWL_WNDPROC,(LONG)MyProcC);
                  :
            SetWindowLong(g_hEditC,GWL_WNDPROC,(LONG)Org_hWndC);
        
  4. Tool Bar を貼り付けた Edit Box の CALLBACK 関数です。
    ここで Tool Bar から送られてきた WM_COMMAND: と WM_NOTIFY: を捕まえます。
    ツールアイコンがクリックされたときに送られてくる WM_COMMAND はそのままメインの WndProc() に送ります。
    WM_NOTIFY: でツールチップを表示します。
        LRESULT CALLBACK MyProcC(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
        {   static  LPTOOLTIPTEXT   lptip;
    
            switch (msg)
            {   case WM_COMMAND:
                    PostMessage(g_hWnd,msg,wp,lp);
                    return 0L;
                case WM_NOTIFY:
                    if (((LPNMHDR)lp)->code==TTN_NEEDTEXT)
                    {   lptip = (LPTOOLTIPTEXT)lp;
                        lptip->hinst = g_hInst;
                        if (lptip->hdr.idFrom>=IDM_LDRV && lptip->hdr.idFrom<=IDM_RDRV)
                            lptip->lpszText= (char *)TIPS[lptip->hdr.idFrom-IDM_LDRV];
                    }
                    break;
                default:
                    break;
            }
            //自分で処理しないものは元のプロシージャにやってもらう
            return (CallWindowProc(Org_hWndC,hWnd,msg,wp,lp));
        }
        
  5. comclt32.lib をリンクして、ビルドに続いて実行を行います。
    Tool Bar のアイコンにマウスをポイントするとツールチップが表示されることを確認して下さい。

全ソースコード

ファイル名 ファイルの説明
Main.cpp WinMain プログラム
Main.rc リソースファイル
Resource.h リソースヘッダファイル

[Next Chapter ↓] コピーと削除機能を組み込む
[Previous Chapter ↑] File Handler のフレームワークを作成する

超初心者のプログラム入門(Win32API C++)