• ベストアンサー

Win32APIでツールバーを縦に設置したいです。

Win32APIを用いて、ツールバーを縦に設置したいと思っています。 ツールバーは、普通は横に設置されますが、縦にする方法が分かりません。 ウィンドウスタイルに「CCS_VERT」等を指定しましたが不可能でした。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

 こんにちは。  ツールバーハンドルにTB_SETROWSメッセージを送れば並びを変更出来ます。  基本は横一列なので、ROWは1です。ROWにボタンの数を設定すれば変る筈です。  SendMessage(hTB/*ツールバーハンドル*/, TB_SETROWS/*メッセージ*/, MAKEWPARAM(Row/*縦の数*/, TRUE), (LPARAM)&rcChanged/*変更後の矩形領域を受け取るバッファ*/);  以下参考程度に /*ツールバーハンドルの作成*/ HWND hTB = ::CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_TABSTOP | WS_VISIBLE, 0, 0, 1, 1, hWndParent, (HMENU)IDC_TOOLBAR1, hInst, 0); /*ボタン用の構造体*/ TBBUTTON tb = {sizeof(tb)}; /*並びを変更した後の矩形領域を受け取るバッファ*/ RECT rcChanged; ::SendMessage(hTB, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0); /*取り合えずボタンを5個作成する*/ for(int i = 0; i < 5; ++i) { tb.fsState = TBSTATE_ENABLED; tb.iBitmap = -1; tb.idCommand = i; ::SendMessage(hTB, TB_INSERTBUTTON, 0, (LPARAM)&tb); } /*ボタンの数を取る*/ const int iCount = ::SendMessage(hTB, TB_BUTTONCOUNT, 0, 0); /*ROWを設定する(此処で縦に並んでいる筈)*/ ::SendMessage(hTB, TB_SETROWS, MAKEWPARAM(iCount, TRUE), (LPARAM)&rcChanged); /*変更後の領域を確認出来る*/ rc.Changed.left...

aiueorffe
質問者

お礼

丁寧にありがとうございます。 早速、試してみます。

関連するQ&A