1
사용자 정의 NCHITTEST 및 NCCALCSIZE를 구현하는 계층화 된 창 (WS_EX_LAYERED)을 사용하여 클라이언트 rect를 창 rect와 동일하게 만듭니다. 내 창 크기와 페인트가 올바르게; 커서가 내 창의 아래쪽 가장자리 근처에있을 때 WM_NCHITTEST에서 HTBOTTOM을 반환하여 세로 크기 조정 창에서 하단 유형 입력 작업을 수행 할 수 있습니다. 그러나 세로 크기 조정 커서가 표시되지 않습니다. WM_SETCURSOR를 구현하고 포인터의 위치 대 윈도우의 가장자리를 테스트 할 필요없이이 문제를 해결할 수있는 방법이 있습니까? 의 lParam의 하위 워드 히트 테스트 코드를 지정 -WM_NCHITTEST 마우스 커서를 변경하지 않습니다.
당신은 WM_SETCURSOR 메시지를 처리 할 필요가case WM_NCCALCSIZE:
// Bypass DefWindowProc, so the Window Rect == Client Rect
return 0;
case WM_NCHITTEST: {
RECT w;
::GetWindowRect(hwnd, &w);
// Compare the mouse X/Y vs the rect of the window to detect
// resizing from the bottom edges
int r = HTCLIENT;
int x = GET_X_LPARAM(lParam);
int y = GET_Y_LPARAM(lParam);
if (w.bottom - y < 10) {
// If I was not using NCHITTEST, I should get a verticle resize pointer here
if (x - w.left < 10)
r = HTBOTTOMLEFT;
else if (w.right - x < 10)
r = HTBOTTOMRIGHT;
else
r = HTBOTTOM;
}
return r;
}
없음 생식. 어떤 실수도 보지 마라. 문제가되는 투명성 키를 추측해야합니다. –