1

いくつかの問題を修正し、データベース プロジェクト用にずっと前に作成されたフォーム デザイナーを強化する必要があります。デザイン パネルのクラス コードで、これらの行に遭遇しました

private void DesignPanel_MouseDown(object sender, MouseEventArgs e)
{
    if (e.Button == MouseButtons.Left)
    {
        (sender as Control).Capture = false;
        switch (FMousePosition)
        {
        case MousePosition.mpNone: 
            SendMessage((sender as Control).Handle, WM_SYSCOMMAND, 0xF009, 0);
            break;// Move
        case MousePosition.mpRightBottom: 
            SendMessage((sender as Control).Handle, WM_SYSCOMMAND, 0xF008, 0);
            break;//RB
        case MousePosition.mpLeftBottom: 
            SendMessage((sender as Control).Handle, WM_SYSCOMMAND, 0xF007, 0); 
            // ... here are similar cases ...
        case MousePosition.mpLeft:
            SendMessage((sender as Control).Handle, WM_SYSCOMMAND, 0xF001, 0);
            break;//L  
        }
    }
}

FMousePosition は、マウスが選択されたコントロールのいずれかの端にあったかどうかを示します。

私を混乱させているのは、これらのウィンドウメッセージです。パラメーター0xF001-0xF009を持つWM_SYSCOMMANDに関するドキュメントがないようです(おそらく、ある種の「ドラッグ/サイズ変更シーケンス」を開始します)。何か案は?

私の提案が正しければ、どうすればこれらのシーケンスをキャンセルできますか?

4

2 に答える 2

4

これらは文書化されていないパラメーターです。検索した結果、このリストを見つけることができました。

  • 0xF000 ( SC_SIZE, カーソルをフォームの中央に配置)
  • 0xF001 ( SC_SZLEFT, 左からリサイズ)
  • 0xF002 ( SC_SZRIGHT, 右からリサイズ)
  • 0xF003 ( SC_SZTOP, 上からリサイズ)
  • 0xF004 ( SC_SZTOPLEFT, フォームの右下隅をロックし、サイズ変更のために左上隅を移動します)
  • 0xF005 ( SC_SZTOPRIGHT, 左下から同じ)
  • 0xF006 ( SC_SZBOTTOM, 右上と左の境界線をロックし、下のサイズを変更)
  • 0xF007 ( SC_SZBOTTOMLEFT, 上と右の境界線をロックし、他の境界線のサイズを変更します)
  • 0xF008 ( SC_SZBOTTOMRIGHT, 左と上の境界線をロックし、その他のサイズを変更)
  • 0xF009 ( SC_SIZE|0x9, どこからでもドラッグ)
  • 0xF00F ( SC_SEPARATOR)
  • 0xF010 ( SC_MOVE, カーソルを上段中央に配置)
  • 0xF012 ( SC_DRAGMOVE, ドラッグで移動)
  • 0xF020 ( SC_MINIMIZE, 自動最小化フォーム)
  • 0xF030 ( SC_MAXIMIZE, 自動最大化フォーム)
  • 0xF040 ( SC_NEXTWINDOW, やめて! そんなの嫌だ. マウスのクリックがすべてロックされて再起動する)
  • 0xF148 ( SC_SCREENSAVE|0x8, スクリーンセーバーを有効にする)
  • 0xF13E ( SC_TASKLIST|0xE, スタートボタンを有効にする)

参照: http://www.delphi3000.com/articles/article_1054.asp#Comments

于 2009-04-18T10:42:09.113 に答える
1

私のWin32 プログラミング(学長と新人) p902-903に基づいてWM_SYSCOMMAND、ユーザーがシステム メニューから項目を選択すると(通常の を送信するのではなくWM_COMMAND)、 が送信されると説明しています。

MSDNのヘルプには SC_SIZE = 0xF000 と書かれており、Win32 プログラミングでは、Windows は事前定義されたシステム メニュー ID の下位 4 ビットを内部で使用しているが、その使用法を明確にすることはしていません。それらを明確にしてくれてありがとう。

于 2009-04-18T10:42:45.837 に答える