2008年10月14日火曜日

VC++/VC++.NETでウィンドウのドラッグを禁止する

備忘録。
Visual Stuido.NETで表示されたウィンドウのドラッグ自体を禁止する方法。

// イベントを追加。(WM_SYSCOMMAND)
ON_WM_SYSCOMMAND()

// 対応する関数に、以下の処理を作成
void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
{
if((nID & 0xFFF0) != SC_MOVE)
{
CMainFrame::OnSysCommand(nID, lParam);
}
}

nIDは下位4BitがSystemで使用されるため常にマスクしないといけないようです。
この比較ではSC_MOVE(ウィンドウ移動)を使用しています。

他にも、以下のパラメータが使用できます。
  • SC_CLOSE:ウィンドウをクローズ
  • SC_HOTKEY:ホットキーに対応したオブジェクトをアクティブにする時呼ばれます。lParam の下位ワードでアクティブになるオブジェクトのHWNDを識別します。
  • SC_HSCROLL:水平スクロールする時
  • SC_VSCROLL:垂直スクロールする時
  • SC_MAXIMIZE (または SC_ZOOM):最大化する時
  • SC_MINIMIZE (または SC_ICON):最小化するとき
  • SC_KEYMENU:キーボードからメニューを呼び出した時
  • SC_MOUSEMENU:マウスクリックでメニューを呼び出した時
  • SC_MOVE:ウィンドウの移動時(ドラッグも)
  • SC_NEXTWINDOW:次のウィンドウに移動する時
  • SC_PREVWINDOW:直前のウィンドウに移動する時
  • SC_RESTORE:通常の位置とサイズにウィンドウを戻す時
  • SC_SCREENSAVE:スクリーンセーバーを実行する時
  • SC_SIZE:ウィンドウのサイズ変更
  • SC_TASKLIST:タスクマネージャのアプリケーションを実行する時

どうやらそれぞれの処理をする直前に呼ばれるようです。