ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月27日(土) 16:27

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2005年7月06日(水) 22:52 
オフライン

登録日時: 2005年7月06日(水) 17:00
記事: 2
ツールバーの表示と非表示の切り替えに応じて
その下に表示されているコントロールを上下(または拡大縮小)させたいのですが
どのような処理をすればよいでしょうか。

ツールバー自体の表示非表示と、
サブウィンドウエディットボックスの表示位置の変数の変更は出来てるようですが
当のエディットボックスが消えてしまいます。
マウスドラッグでウィンドウの大きさを変えて初めて再描画されます。

基本的な事を理解してないのかもしれませんが悩んでます。

公式のサンプルのエディタの改変です。
(グローバル変数使いすぎだとか、変数名のつけ方が変だとかはとりあえず勘弁してください。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


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年7月07日(木) 10:44 
オフライン

登録日時: 2005年6月01日(水) 23:27
記事: 82
お住まい: 北海道札幌市
実際に試してないので多分ですが、

MainWnd_Resize
は引数なのでcxとcyにウィンドウのサイズが入っており、

MainWnd_IDM_TOOLBAR_MenuClick
はcxとcyを宣言しただけなので(恐らく)"0"が入っています。

なので、
[code]Sub MainWnd_IDM_TOOLBAR_MenuClick()
Dim SizeType As Long
Dim rect As RECT
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)
GetClientRect(hMainWnd,rect)
MoveWindow(hEdit, 0, nToolbarHeight, rect.right, rect.bottom-nToolbarHeight,1)
End Sub[/code]

とするとうまくいくんじゃないかな~と思います。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年7月09日(土) 10:54 
オフライン

登録日時: 2005年7月06日(水) 17:00
記事: 2
教えていただいた通りでした。
恥ずかしながら、プログラムを組んでみるというのが
20年程前のHu-BASIC以来で(当時も大したもの組んでたわけではありませんが)
、なんとなく考え方みたいなのは判ってたつもりでした・・・。
(少なくともローカル変数が無かったのは覚えてます)
もうすこし精進してみます。

ありがとうございました。


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 3 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[9人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean