メニューバー・ツールバーを複数作成することは可能でしょうか。
もし出来るなら、その方法をお願いします。
メニューバー・ツールバーを複数作成
Re: メニューバー・ツールバーを複数作成
> メニューバー・ツールバーを複数作成することは可能でしょうか。
> もし出来るなら、その方法をお願いします。
ツールバーはたぶんCreateToolbarEx()関数を作りたいだけ使えばできると思います。
Win32プログラミング講座 ~ Step24. ツールバーを使う① ~
メニューバーはRADを使った場合ですが、作りたいだけメニューバーを挿入するとできます。
メニューはウィンドウに付ける為に一つ、右クリックした時のメニューの為に一つ、とメニューを複数作るのは自然ですけど、ツールバーを複数作るのってメリットあるんでしょうかね。
> もし出来るなら、その方法をお願いします。
ツールバーはたぶんCreateToolbarEx()関数を作りたいだけ使えばできると思います。
Win32プログラミング講座 ~ Step24. ツールバーを使う① ~
メニューバーはRADを使った場合ですが、作りたいだけメニューバーを挿入するとできます。
メニューはウィンドウに付ける為に一つ、右クリックした時のメニューの為に一つ、とメニューを複数作るのは自然ですけど、ツールバーを複数作るのってメリットあるんでしょうかね。
> メニューバーの方は出来ましたが、ツールバーは上手く出来ませんでした。
> どうすればいいのでしょうか。
調べてみたらドッキングツールバーとかいう物があるんですけど、とりあえず2本のツールバーを作ってみました。
手抜きなので同じ内容のツールバーを作っています。
しかし2本目のツールバーのY位置が0になります。これはSetWindowPos()関数でSWP_NOMOVEを指定した場合でも0になります。(何故?)
なので、ツールバーの大きさをウィンドウに合わせた後、2本目のツールバーを正しい位置に動かしています。
> どうすればいいのでしょうか。
調べてみたらドッキングツールバーとかいう物があるんですけど、とりあえず2本のツールバーを作ってみました。
手抜きなので同じ内容のツールバーを作っています。
[ここをクリックすると内容が表示されます]
MainWnd_Resizeに関してですが、よく分からないんですけど、ツールバーにWM_SIZEを送信すると大きさがウィンドウに合います。コード: 全て選択
Const ID_TOOLBAR1 = 70 'ツールバーのID
Const ID_TOOLBAR2 = 71 'ツールバーのID
Dim hTool[2] As HWND
Sub SetTbButtonData(ByRef ptb As TBBUTTON, iBitmap As Long, idCommand As Long, fsState As Byte, fsStyle As Byte)
'ptb(TBBUTTON構造体)にボタン情報を格納する
With ptb
.iBitmap=iBitmap
.idCommand=idCommand
.fsState=fsState
.fsStyle=fsStyle
.dwData=0
.iString=0
End With
End Sub
' ----------------------------------ここまで----------------------------------
Sub MainWnd_Destroy()
Toolbar_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim ic As INITCOMMONCONTROLSEX
Dim tbb[4] As TBBUTTON
Dim rc As RECT
'コモンコントロールの初期化
ic.dwSize=Len(ic)
ic.dwICC=ICC_BAR_CLASSES
InitCommonControlsEx(ic)
'ボタン情報をセット
SetTbButtonData(tbb[0],0,IDM_NEW,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[1],1,IDM_OPEN,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[2],2,IDM_SAVE,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[3],0,0,TBSTATE_ENABLED,TBSTYLE_SEP)
SetTbButtonData(tbb[4],3,IDM_ABOUT,TBSTATE_ENABLED,TBSTYLE_BUTTON)
'ツールバーを生成
hTool[0]=CreateToolbarEx(hMainWnd, _
WS_CHILD or WS_VISIBLE, _
ID_TOOLBAR1, _
4, _
GetModuleHandle(0), _
IDB_BITMAP1, _
tbb, _
5, _
0,0, _
16,15, _
Len(tbb[0]))
'ツールバーを生成
hTool[1]=CreateToolbarEx(hMainWnd, _
WS_CHILD or WS_VISIBLE, _
ID_TOOLBAR2, _
4, _
GetModuleHandle(0), _
IDB_BITMAP1, _
tbb, _
5, _
0,0, _
16,15, _
Len(tbb[0]))
GetWindowRect(hTool[0],rc)
SetWindowPos(hTool[1],NULL,0,rc.bottom-rc.top,NULL,NULL,SWP_NOSIZE)
End Sub
/*なんだか怪しい...
Sub MainWnd_Resize(SizeType As Long, cx As Integer, cy As Integer)
Dim rc As RECT
SendMessage(hTool[0],WM_SIZE,NULL,NULL)
SendMessage(hTool[1],WM_SIZE,NULL,NULL)
'ここら辺が特に怪しい...
GetWindowRect(hTool[0],rc)
SetWindowPos(hTool[1],NULL,0,rc.bottom-rc.top,NULL,NULL,SWP_NOSIZE)
End Sub
*/
しかし2本目のツールバーのY位置が0になります。これはSetWindowPos()関数でSWP_NOMOVEを指定した場合でも0になります。(何故?)
なので、ツールバーの大きさをウィンドウに合わせた後、2本目のツールバーを正しい位置に動かしています。