トップページ
ひらく | たたむ | ページトップ
↓マウスで反転選択した文字を検索
Win32API
   
ページ内検索 ページ外検索
検索したい文字を入力して
ENTERを押すと移動します。
\n
[ トップページ ]
[ ____CommandPrompt ] [ ____JScript ] [ ____MySQL ] [ ____Cygwin ] [ ____Java ] [ ____Emacs ] [ ____Make ] [ ____Perl ] [ ____Python ] [ ____OpenGL ] [ ____C# ] [ ____StyleSheet ] [ ____C++ ] [ ____Winsock ] [ ____Thread ] [ ____VisualStudio ] [ ____C ] [ ____Win32API ] [ ____Lua ] [ ____PhotoShop ]
ヘッダ検索
___

■ ツールバー(ToolBar)


___

■ ToolBar

POINT CommonControl なので, 読み込みと初期化必要 Menu より操作が早い
    #include < commctrl.h>
    #pragma comment(lib,"comctl32.lib")
( 初期化のタイミングでDLLを初期化して、ツールバーを作成

    WM_CREATE:
    {
      INITCOMMONCONTROLSEX cc;
      cc.dwSize = sizeof( INITCOMMONCONTROLSEX );
      cc.dwICC = ICC_BAR_CLASSES;

      // Common Control の初期化
      InitCommonControlsEx( &cc );

      // 作成するボタンオブジェクトの配列
      //  ボタンがクリックされると 2 番目で指定した ID が WM_COMMAND に届く。
      static TBBUTTON a[] = {
            { 0 , ID_TB_0 , TBSTATE_ENABLED , TBSTYLE_BUTTON , 0 , 0 , 0},
            { 1 , ID_TB_1 , TBSTATE_ENABLED , TBSTYLE_BUTTON , 0 , 0 , 0},
            { 2 , ID_TB_2 , TBSTATE_ENABLED , TBSTYLE_BUTTON , 0 , 0 , 0},
            { 3 , ID_TB_3 , TBSTATE_ENABLED , TBSTYLE_BUTTON , 0 , 0 , 0},
          };

      // ツールバーを生成
      //    32*32 のサイズのボタンを4個作成
      HANDLE hToolbar = CreateToolbarEx(
                                     hWnd, 
                                     WS_CHILD | WS_VISIBLE,
                                     ID_TOOLBAR_0, 
                                     4,

                                     (HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE ),
                                     ID_BITMAP_TOOLBAR ,
                                     a, 

                                     4, 
                                     32, 32, 
                                     32, 32,
                                     sizeof(a)
                                     );
      break;                                     
    }

ボタンが押されたら WM_COMMAND で処理をする。
    WM_COMMAND:
    {
      if ( LOWORD(wp) == ID_TB_0 ) {
        MessageBox( NULL, "ツールバー", "ツールバー", MB_OK );
        return 0;
      }
      
      break;
    }
コモンコントロールの位置を指定する。デフォルトは上部。
    CreateToolbarEx(  WS_VISIBLE | CCS_BOTTOM )
___

■ ツールバーに文字を表示する

SAMPLE 文字つきツールバー DESC ツールバーボタンに文字を表示するには TB_ADDSTRING メッセージを送る。 ツールバーは文字のリストを管理している。 次のように \0, \0\0 という形式でツールバーに送る。 TB_ADDSTRING はこのリストへ順番に追加して、新しく追加された最初のインデックスを返す。 各ボタンは iString メンバにこのインデックスを指定する。 ボタン構造体には iString メンバに文字列のポインタを指定する。 ツールバーのスタイルには TBSTYLE_LIST を必ず指定する。
      static TBBUTTON tbButton[] = {
          { 0 , 1 , TBSTATE_ENABLED , BTNS_CHECK, 0, 0, 0, (DWORD_PTR)"BOO" },
          { 1 , 2 , TBSTATE_ENABLED , BTNS_CHECK, 0, 0, 0, (DWORD_PTR)"GOO" },
          { 2 , 3 , TBSTATE_ENABLED , BTNS_CHECK, 0, 0, 0, (DWORD_PTR)"TES" },
          { 3 , 4 , TBSTATE_ENABLED , BTNS_CHECK, 0, 0, 0, (DWORD_PTR)"AAA" },
      };

      HWND hToolbar = CreateToolbarEx(
                                      hWnd, 
                                      WS_CHILD | WS_VISIBLE | TBSTYLE_LIST,
                                      ID_TOOLBAR_0,

                                      4,
                                      hInst, 
                                      ID_TOOLBAR ,
                                      tbButton, 
                                      
                                      0, // ボタンの数は0個にしておく。
                                      32, 32, 32, 32, sizeof (TBBUTTON)
                                      );
ボタンに文字を追加するには TB_ADDBUTTONS 経由でボタンを作成する必要がある。
    SendMessage( hToolbar , TB_ADDBUTTONS, 4, (LPARAM)tbButton );
別の方法として TB_ADDSTRING で文字列のリストだけをツールバーに設定できる。

    // ボタン構造体の iString には文字列リストのインデックスを指定しておく。
      static TBBUTTON tbButton[] = {
          { 0 , 1 , TBSTATE_ENABLED , BTNS_CHECK, 0, 0, 0, 0 },
          { 1 , 2 , TBSTATE_ENABLED , BTNS_CHECK, 0, 0, 0, 1 },
          { 2 , 3 , TBSTATE_ENABLED , BTNS_CHECK, 0, 0, 0, 2 },
          { 3 , 4 , TBSTATE_ENABLED , BTNS_CHECK, 0, 0, 0, 3 },
      };

      HWND hToolbar = CreateToolbarEx(
                                      hWnd, 
                                      WS_CHILD | WS_VISIBLE | TBSTYLE_LIST,
                                      ID_TOOLBAR_0,

                                      4,
                                      hInst, 
                                      ID_TOOLBAR,
                                      tbButton, 
                                      
                                      4,
                                      32, 32,  32, 32,  sizeof (TBBUTTON)
                                      );

    // ツールバー作成後に文字列リストへ登録。
    // \0 が区切りで \0\0 が終端記号
    char str[] = "aaa\0bbb\0ccc\0ddd\0\0";
    SendMessage(hToolbar, TB_ADDSTRING, 0, (LPARAM)str );
___

■ CreateToolbarEx

SYNTAX HWND CreateToolbarEx( HWND hwnd, // ツールバーの親ウィンドウ DWORD ws, // ツールバーのウィンドウスタイル UINT wID, // ツールバー のID int nBitmaps, // ボタンの画像の数 HINSTANCE hBMInst, // インスタンス UINT wBMID, // ビットマップリソースの識別子 LPCTBBUTTON lpButtons, // ボタン情報 int num, // ボタンの数 int w, h, // ボタンの幅と高さ( Pixel ) int dx, dy, // ボタン画像の幅と高さ ( Pixel ) UINT uStructSize // TBBUTTON 構造体のサイズ ); RET N : ツールバーのウィンドウハンドル NULL : 失敗 DESC 1 つのツールバーウィンドウを作成し 指定されたボタンをツールバーへ追加する TIP ボタンの絵を横一列に並べた1つのビットマップ画像を用意する。 すると、関数は1つのボタンのビットマップの横幅 dxBitmap メンバを参考に nBitmap 分だけ分割して、各ボタンに割り当てる Toolbar をつくるときのルール
    Size は 2 べきでなくても良い。
    { 64*4 , 22 }
  
  WARNING
      bmp は index color 形式でないと CreateToolbarEx() で落ちる。

typedef struct _TBBUTTON { int iBitmap; // ボタンイメージの 0 から数えるインデックスを指定します // このインデックスは、生成されるボタンとビットマップを関連付けるもので // ツールバーは、内部でビットマップにインデックスをつけて画像保有している int idCommand; // ボタンが押されたときの識別ID BYTE fsState; // 初期状態のフラグ BYTE fsStyle; // スタイル DWORD dwData; // アプリケーション用のメモリ領域 int iString; } TBBUTTON, NEAR* PTBBUTTON, FAR* LPTBBUTTON;
___

■ TB_ADDSTRING

DESC ToolBar の String Pool に文字列を追加 wp String Resource をもつ Instance のハンドル ( lp で 文字列のポインタを指定するなら NULL にしておく ) lp String Resource の識別子 OR 文字列のポインタ

NINJAIDX 17