| 最終更新日: 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