[英]Forcing WM_NCHITTEST to return HTCAPTION, with a custom cursor..?
我創建了一個無邊框窗口,它使用wndProc()
函數強制WM_NCHITTEST case
返回HTCAPTION;
,它允許用戶拖動窗口,無論其光標位於何處。
問題是我已經設置了一個自定義光標,但是使用上述方法,光標總是設置回IDC_ARROW
。
我該如何解決?
編輯:我也試過在WM_NCHITTEST case
使用SetCursor()
,但它沒有用。
您可以使用 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));
除了SetCursor
在WM_NCHITTEST
嘗試SetCursor
在WM_SETCURSOR
了。
通常設置游標的正確方法是響應WM_SETCURSOR
消息。 (另見http://blogs.msdn.com/b/oldnewthing/archive/2005/05/25/421707.aspx )
但是,如果您在捕獲鼠標的位置處理鼠標拖動,您的窗口將不會收到WM_SETCURSOR
消息,我認為唯一的替代方法是在這種情況下在WM_MOUSEMOVE
處理程序中設置光標。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.