我创建了一个无边框窗口,它使用一个强制返回的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
通常设置游标的正确方法是响应WM_SETCURSOR
消息。(另见http://blogs.msdn.com/b/oldnewthing/archive/2005/05/25/421707.aspx)
但是,如果您正在处理捕获鼠标的鼠标拖动,您的窗口将不会收到WM_SETCURSOR
消息,我认为唯一的选择是在WM_MOUSEMOVE
这种情况下在处理程序中设置光标。
于 2012-11-18T10:04:04.850 回答
0
除了SetCursor
in WM_NCHITTEST
try to SetCursor
inWM_SETCURSOR
太。
于 2012-11-18T09:50:33.463 回答