【C/C++】ウィンドウ上の任意のクライアント領域にマウスカーソルが入ったときに処理【Win32】
【C/C++】ウィンドウ上の任意のクライアント領域にマウスカーソルが入ったときに処理【Win32】
例1: 任意の範囲にマウスが入った時に非表示
// プロトタイプ宣言
LRESULT OnNCHitTest(HWND, UINT, WPARAM, LPARAM);//
// ウィンドウプロシージャ
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {switch (message) {
case WM_NCHITTEST:
return OnNCHitTest(hWnd, message, wParam, lParam);
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}return DefWindowProc(hWnd, message, wParam, lParam);
}//
// WM_NCHITTEST が発生した時の処理
//
LRESULT OnNCHitTest(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
POINT pos = {LOWORD(lParam), HIWORD(lParam)};ScreenToClient(hWnd, &pos);
if ((5 <= pos.x) && (pos.x < 517) && (5 <= pos.y) && (pos.y < 517)) {
while (ShowCursor(FALSE) >= 0) {}
} else {
while (ShowCursor(TRUE) < 0) {}
}return DefWindowProc(hWnd, message, wParam, lParam);
}
例2: 任意の範囲にマウスが入った時にカーソル変更 (2014/03/17追記)
//
// ウィンドウクラス登録
//
ATOM MyRegisterClass(HINSTANCE hInstance) {
WNDCLASSEX wcex;wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style= CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc= WndProc;
wcex.cbClsExtra= 0;
wcex.cbWndExtra= 0;
wcex.hInstance= hInstance;
wcex.hIcon= LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TEST));
wcex.hCursor= NULL;
wcex.hbrBackground= (HBRUSH)GetStockObject(LTGRAY_BRUSH);
wcex.lpszMenuName= MAKEINTRESOURCE(IDC_TEST);
wcex.lpszClassName= szWindowClass;
wcex.hIconSm= LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));return RegisterClassEx(&wcex);
}//
// ウィンドウプロシージャは同様
////
// WM_NCHITTEST が発生した時の処理
//
LRESULT OnNCHitTest(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
POINT pos = {LOWORD(lParam), HIWORD(lParam)};ScreenToClient(hWnd, &pos);
if ((5 <= pos.x) && (pos.x < 517) && (5 <= pos.y) && (pos.y < 517)) {
SetCursor(LoadCursor(NULL, IDC_SIZEALL));
} else {
SetCursor(LoadCursor(NULL, IDC_ARROW));
}return DefWindowProc(hWnd, message, wParam, lParam);
}
以下:日記