MSDN describes로서 :왜 창 세트 커서가 올바르게 표시되지 않습니까?
창 위에 마우스 이동, 윈도우가
WM_SETCURSOR
메시지를 수신한다 (다른 윈도우 마우스를 포착하지 않는 한). 윈도우는 부모가
- 경우 취급이 부모를
WM_SETCURSOR
메시지를 전달할 :어플리케이션
상기DefWindowProc
-WM_SETCURSOR
를 통과하면DefWindowProc
함수 커서 이미지 세트의 다음 알고리즘을 사용한다.- 그렇지 않으면 창에 클래스 커서가있는 경우 커서를 클래스 커서로 설정하십시오.
- 클래스 커서가없는 경우 커서를 화살표 커서로 설정하십시오. 그것은 크기 조정 화살표가 나는 창을 통해 빠르게 내 커서를 이동하면
#include <tchar.h> #include <Windows.h> LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInsTance, LPTSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wcex = { 0 }; HWND hWnd; BOOL ret; MSG msg; wcex.cbSize = sizeof(wcex); wcex.lpfnWndProc = WndProc; wcex.hInstance = hInstance; wcex.hIcon = LoadIcon(NULL, IDI_APPLICATION); // wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.lpszClassName = TEXT("MainWindow"); wcex.hIconSm = wcex.hIcon; RegisterClassEx(&wcex); hWnd = CreateWindow(wcex.lpszClassName, TEXT("Test"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, HWND_DESKTOP, NULL, hInstance, NULL); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); while (ret = GetMessage(&msg, NULL, 0, 0)) { if (ret == -1) { return EXIT_FAILURE; } else { TranslateMessage(&msg); DispatchMessage(&msg); } } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DESTROY: PostQuitMessage(EXIT_SUCCESS); break; default: return DefWindowProc(hWnd, uMsg, wParam, lParam); } return 0; }
가, 커서가 화살표로 변경되지 않습니다 :
그리고 여기 내 소스 코드의 wcex.hCursor
을 LoadCursor(NULL, IDC_ARROW)
으로 설정하면 모든 것이 올바르게 수행됩니다. 내 질문은 : MSDN에서 말하는 것처럼 내 코드가 작동하지 않는 이유는 무엇입니까? 의 DefWindowProc
는 "화살표 커서 커서를 설정"해야 내가 wcex.hCursor
를 설정하지 않고, 나는 WM_SETCURSOR
메시지를 처리하지 않는 경우
는 내 말은,하지만 그렇지 않은 것 같다. 왜 그런가요? WNDCLASSEX
의 hCursor
회원의
나는 repro 수. 이 기사는 WM_SETCURSOR의 문서에서 알 수있는대로 잘못되었습니다. –