OS/2プログラミングメモ

たんなるメモです ^^;しかし、我ながら無愛想なページだ^^;
最終更新日: 2000/02/06 Sun

一覧




Q:タイトルバーがないWindowを、またはタイトルバー以外でWindowをドラッグするには?

A;タイトルバーをマウスボタン1(左ボタン)でドラッグするのと同じことをさせればよい。
つまり、ClientWindowプロシジャ中で、WM_BUTTON1DOWN(またはBUTTON2)メッセージが来たらタイトルバーにWM_BUTTON1DOWNを送ってしまえばよい。

	static  HWND    hwndFrame,  hwndTitleBar ;
	hwndFrame    = WinQueryWindow( hwnd, QW_PARENT );     /* フレームウィンドウのFIDを求める */
	hwndTitleBar = WinWindowFromID( hwndFrame, FID_TITLEBAR );  /* タイトルバーのFIDを求める */
	(略)
	    case WM_BUTTON1DOWN :      /* マウス左ボタン 押下 */
	        /* タイトルバーにマウス左ボタン押下を伝える  */
		WinPostMsg( hwndTitleBar,WM_BUTTON1DOWN, mp1, mp2 );
		return 0 ;
    

一覧に戻る

Q:ダブルクリック等でタイトルバーやシステムメニューを隠したり表示したりするには?

A:一言でいってしまうと、タイトルバーやシステムメニューの親ウィンドウを変更してしまえばよい。
(タイトルバーやシステムメニュー、最大最小化ボタンはフレームウィンドウに張り付いているWindowです)
手順としては
 1.タイトルバー他のFIDを求める(タイトルバーのFIDを求めるを参照)
 2.タイトルバーの親WindowをフレームWindowから他のWindow(HWND_OBJECT)に変更する
 3.そうするとタイトルバーが表示されなくなります。ただしOwner Windowはそのままなので、メッセージは届きます。

	case WM_BUTTON1DBLCLK :     /* BUTTON1 ダブルクリック */
	    if( isTitleBarVisible )   /*現在は表示している  */
	    {
	        /* 親をHWND_OBJECTに変更すると隠れる */
	        WinSetParent(hwndTitleBar, HWND_OBJECT, FALSE );      
		WinSetParent(hwndSysMenu, HWND_OBJECT, FALSE  );
	        isTitleBarVisible = FALSE ;
	    }
	    else
	    {
	        /* 親を元のフレームウィンドウに戻すと表示 */
	        WinSetParent(hwndTitleBar, hwndFrame, FALSE );      
	        WinSetParent(hwndSysMenu, hwndFrame, FALSE  );
		isTitleBarVisible = TRUE  ;
	    }
    

ただしこれだけだと、タイトルバーにいろいろ拡張機能のボタンが追加されているときはうまく動作しません^^;
(ボタンを見えるようにしたとき、追加したボタンが復活しない。セーブしてないんだから当たり前)

一覧に戻る



OS/2の部屋」に戻る
Vette HomePageに戻る

質問・感想・苦情・激励は E-mail: vette@mail.ne.jp まで。
©vette 1997-2004