ホームに戻る 初歩のVC++Programming Tipsに戻る
問
通常、ウインドウ(ダイアログ)を移動させるには当然マウスを使ってドラッグしますが、つかめる場所はタイトルバーだけとなっています。もし、タイトルバーのないダイアログを作成したらいったいどこを持ってウインドウを移動させればよいのでしょうか?
答
ダイアログプロシージャ内でWM_NCHITTESTメッセージを処理することで実現します。(処理といっても定数を返すだけですが)
このメッセージはカーソルがウインドウ上にあるときに、ウインドウ(ダイアログ)プロシージャに送られるメッセージです。通常はDefWindowProc()が処理して、カーソルが今ウインドウ上のどこを指しているかを判断して結果を返します。
ウインドウのどこをつかんでも動かせるようにするには、WM_NCHITTESTメッセージに対して常にHTCAPTIONを返せばokです。
//前後は省略
//マウスボタンが常にタイトルバー上で押されたことにする
case WM_NCHITTEST:
return HTCAPTION;
サンプルプログラム
サンプルプログラムの全ソースリストです。「ダイアログベースアプリの作り方」のソースを元に作りました。
このスケルトンは、メインウインドウのダイアログを表示して、OKボタンを押すと終了するだけのものです。

ダウンロード tips17smp.lzh
copyright (c) 1998-2000 by T-Matsuo
ホームに戻る 初歩のVC++Programming Tipsに戻る