1

私のプログラムはクロムレス ウィンドウであり、ユーザーがダイアログの任意の部分をドラッグしたときにウィンドウを移動したいと考えています。WM_SYSCOMMAND を使用すると、その後のすべてのマウス イベントが失われます。

最初に、マウス イベントをキャプチャするプログラムを作成し、すべて WTL で正常に動作しました。

BEGIN_MSG_MAP(CMainDlg)
    MSG_WM_LBUTTONUP(OnMouseUp)
    MSG_WM_LBUTTONDOWN(OnMouseDown)
....
LRESULT OnMouseDown ( UINT uKeys, CPoint pt ) {
    print ("on mouse down");
    return 0;
}
LRESULT OnMouseUp ( UINT uKeys, CPoint pt ) {
    print ("on mouse up");
    return 0;
}

次に、上記の onMouseDown を次のように変更します。

LRESULT OnMouseDown ( UINT uKeys, CPoint pt ) {
    print ("on mouse down");
    this->SendMessageW(WM_SYSCOMMAND, SC_MOVE|0x0002);
    return 0;
}

ドラッグが機能し、ウィンドウがマウスと一緒に移動します。ただし、OnMouseUp イベントは発生しなくなりました。

WM_NCHITTEST、または ProcessMessage setHandled を true/false に使用してさまざまなアプローチを試みましたが、成功しませんでした。

誰かが何か提案があれば大歓迎です:)

4

2 に答える 2

6

より良いアプローチHTCAPTIONWM_NCHITTESTがあるため、なぜこれを行っているのかを説明していただきありがとうございます

于 2012-08-16T11:31:06.540 に答える
0

WM_SYSCOMMAND の DefWindowProc ハンドラは、マウス ボタン アップ メッセージを食べます。これが表示されない理由です。ただし、 SendMessage 呼び出しは、ドラッグが完了するまで実際には返されないため、マウス ボタンが押されたという通知として受け取ることができます。

于 2012-08-16T03:31:22.877 に答える