wndProc()
を強制的WM_NCHITTEST case
に戻す関数を使用するフチなしウィンドウを作成しましたHTCAPTION;
。これにより、ユーザーはカーソルの位置に関係なくウィンドウをドラッグできます。
問題は、カスタムカーソルを設定したことですが、上記の方法では、カーソルは常にに戻されIDC_ARROW
ます。
これを修正するにはどうすればよいですか?
編集:私もで使用SetCursor()
してみましたWM_NCHITTEST case
が、うまくいきませんでした。
user1219742
質問する
3696 次
3 に答える
3
WM_SETCURSORメッセージを使用して、カーソルをオーバーライドできます。lParamのLOWORDは、WM_NCHITTESTハンドラーで変更したヒットテストコードを示します。これはうまくいきました:
static HCURSOR CustomCursor;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_NCHITTEST: {
LRESULT result = DefWindowProc(hWnd, message, wParam, lParam);
if (result == HTCLIENT) result = HTCAPTION;
return result;
}
case WM_SETCURSOR:
if (LOWORD(lParam) == HTCAPTION) {
SetCursor(CustomCursor);
return TRUE;
}
return DefWindowProc(hWnd, message, wParam, lParam);
// etc...
}
ウィンドウの初期化でCustomCursorを初期化します。言う:
CustomCursor = LoadCursor(hInstance, MAKEINTRESOURCE(IDC_SIZEALL));
于 2013-01-21T00:28:15.973 に答える
0
に加えてSetCursor
、WM_NCHITTEST
もやってみてSetCursor
くださいWM_SETCURSOR
。
于 2012-11-18T09:50:33.463 に答える
0
通常、カーソルを設定する正しい方法は、WM_SETCURSOR
メッセージに応答して設定することです。( http://blogs.msdn.com/b/oldnewthing/archive/2005/05/25/421707.aspxも参照してください)
ただし、マウスがキャプチャされた場所でマウスドラッグを処理している場合、ウィンドウはメッセージを受信しません。その場合、ハンドラーにWM_SETCURSOR
カーソルを設定する以外に方法はないと思います。WM_MOUSEMOVE
于 2012-11-18T10:04:04.850 に答える