by koyo » 2005年7月06日(水) 22:52
ツールバーの表示と非表示の切り替えに応じて
その下に表示されているコントロールを上下(または拡大縮小)させたいのですが
どのような処理をすればよいでしょうか。
ツールバー自体の表示非表示と、
サブウィンドウエディットボックスの表示位置の変数の変更は出来てるようですが
当のエディットボックスが消えてしまいます。
マウスドラッグでウィンドウの大きさを変えて初めて再描画されます。
基本的な事を理解してないのかもしれませんが悩んでます。
公式のサンプルのエディタの改変です。
(グローバル変数使いすぎだとか、変数名のつけ方が変だとかはとりあえず勘弁してください。m(_ _;)m)
コード: 全て選択
'-----------------------------------------------------------------------------
' イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Const ID_TOOLBAR = 70 'ツールバーのID
Dim hToolbar as DWord
Dim nToolbarHeight As Long
Dim TBH
Dim tbchk : tbchk = 1
Dim hEdit as Long
DIM hPanel As DWord
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
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As DWord, dwMsg As DWord, wParam As DWord, lParam As DWord) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Destroy()
Test_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim ic As INITCOMMONCONTROLSEX
Dim tbb[9] 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_CUT,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[5],4,IDM_COPY,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[6],5,IDM_PASTE,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[7],6,IDM_UNDO,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[8],0,0,TBSTATE_ENABLED,TBSTYLE_SEP)
SetTbButtonData(tbb[9],7,IDM_ABOUT,TBSTATE_ENABLED,TBSTYLE_BUTTON)
'ツールバーを生成
hToolbar=CreateToolbarEx(hMainWnd, _
WS_CHILD or WS_VISIBLE, _
ID_TOOLBAR, _
8, _ 'ビットマップの個数
GetModuleHandle(0), _
IDB_BITMAP1, _ 'ビットマップのリソースID
tbb, _
10, _ 'ボタンの個数
0,0, _ 'ボタンサイズ(0指定で自動セットに)
16,15, _ 'ビットマップサイズ
Len(tbb[0]))
hEdit=GetDlgItem(hMainWnd,EditBox1)
'ツールバーのサイズを取得(nToolbarHeight変数にツールバーの高さを格納)
GetWindowRect(hToolbar,rc)
nToolbarHeight=rc.bottom-rc.top
TBH = nToolbarHeight
End Sub
Sub MainWnd_IDM_EXIT_MenuClick()
DestroyWindow(hMainWnd)
End Sub
Sub MainWnd_Resize(SizeType As Long, cx As Integer, cy As Integer)
MoveWindow(hEdit, 0, nToolbarHeight, cx, cy-nToolbarHeight,0)
SetFocus(hEdit)
SendMessage(hToolbar,WM_SIZE,cx,cy)
End Sub
Sub MainWnd_IDM_TOOLBAR_MenuClick()
Dim SizeType As Long, cx As Integer, cy As Integer
Dim lpmii as MENUITEMINFO
with lpmii
.cbSize = len(lpmii)
.fMask = MIIM_STATE
End With
Select Case tbchk
case 0
lpmii.fState = MFS_CHECKED
ShowWindow(hToolbar,SW_SHOW)
tbchk = 1
nToolbarHeight = TBH
case 1
lpmii.fState = MFS_UNCHECKED
ShowWindow(hToolbar,SW_HIDE)
tbchk = 0
nToolbarHeight = 0
End Select
SetMenuItemInfo(hMenu_Main,IDM_TOOLBAR,MF_BYCOMMAND,lpmii)
MoveWindow(hEdit, 0, nToolbarHeight, cx, cy-nToolbarHeight,1)
End Sub
ツールバーの表示と非表示の切り替えに応じて
その下に表示されているコントロールを上下(または拡大縮小)させたいのですが
どのような処理をすればよいでしょうか。
ツールバー自体の表示非表示と、
サブウィンドウエディットボックスの表示位置の変数の変更は出来てるようですが
当のエディットボックスが消えてしまいます。
マウスドラッグでウィンドウの大きさを変えて初めて再描画されます。
基本的な事を理解してないのかもしれませんが悩んでます。
公式のサンプルのエディタの改変です。
(グローバル変数使いすぎだとか、変数名のつけ方が変だとかはとりあえず勘弁してください。m(_ _;)m)
[code]
'-----------------------------------------------------------------------------
' イベント プロシージャ
'-----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd
' TODO: この位置にグローバルな変数、構造体、定数、関数を定義します。
Const ID_TOOLBAR = 70 'ツールバーのID
Dim hToolbar as DWord
Dim nToolbarHeight As Long
Dim TBH
Dim tbchk : tbchk = 1
Dim hEdit as Long
DIM hPanel As DWord
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
'-----------------------------------------------------------------------------
' ウィンドウメッセージを処理するためのコールバック関数
Function MainWndProc(hWnd As DWord, dwMsg As DWord, wParam As DWord, lParam As DWord) As DWord
' TODO: この位置にウィンドウメッセージを処理するためのコードを記述します。
' イベントプロシージャの呼び出しを行います。
MainWndProc=EventCall_MainWnd(hWnd,dwMsg,wParam,lParam)
End Function
'-----------------------------------------------------------------------------
' ここから下は、イベントプロシージャを記述するための領域になります。
Sub MainWnd_Destroy()
Test_DestroyObjects()
PostQuitMessage(0)
End Sub
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim ic As INITCOMMONCONTROLSEX
Dim tbb[9] 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_CUT,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[5],4,IDM_COPY,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[6],5,IDM_PASTE,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[7],6,IDM_UNDO,TBSTATE_ENABLED,TBSTYLE_BUTTON)
SetTbButtonData(tbb[8],0,0,TBSTATE_ENABLED,TBSTYLE_SEP)
SetTbButtonData(tbb[9],7,IDM_ABOUT,TBSTATE_ENABLED,TBSTYLE_BUTTON)
'ツールバーを生成
hToolbar=CreateToolbarEx(hMainWnd, _
WS_CHILD or WS_VISIBLE, _
ID_TOOLBAR, _
8, _ 'ビットマップの個数
GetModuleHandle(0), _
IDB_BITMAP1, _ 'ビットマップのリソースID
tbb, _
10, _ 'ボタンの個数
0,0, _ 'ボタンサイズ(0指定で自動セットに)
16,15, _ 'ビットマップサイズ
Len(tbb[0]))
hEdit=GetDlgItem(hMainWnd,EditBox1)
'ツールバーのサイズを取得(nToolbarHeight変数にツールバーの高さを格納)
GetWindowRect(hToolbar,rc)
nToolbarHeight=rc.bottom-rc.top
TBH = nToolbarHeight
End Sub
Sub MainWnd_IDM_EXIT_MenuClick()
DestroyWindow(hMainWnd)
End Sub
Sub MainWnd_Resize(SizeType As Long, cx As Integer, cy As Integer)
MoveWindow(hEdit, 0, nToolbarHeight, cx, cy-nToolbarHeight,0)
SetFocus(hEdit)
SendMessage(hToolbar,WM_SIZE,cx,cy)
End Sub
Sub MainWnd_IDM_TOOLBAR_MenuClick()
Dim SizeType As Long, cx As Integer, cy As Integer
Dim lpmii as MENUITEMINFO
with lpmii
.cbSize = len(lpmii)
.fMask = MIIM_STATE
End With
Select Case tbchk
case 0
lpmii.fState = MFS_CHECKED
ShowWindow(hToolbar,SW_SHOW)
tbchk = 1
nToolbarHeight = TBH
case 1
lpmii.fState = MFS_UNCHECKED
ShowWindow(hToolbar,SW_HIDE)
tbchk = 0
nToolbarHeight = 0
End Select
SetMenuItemInfo(hMenu_Main,IDM_TOOLBAR,MF_BYCOMMAND,lpmii)
MoveWindow(hEdit, 0, nToolbarHeight, cx, cy-nToolbarHeight,1)
End Sub
[/code]