2012-08-27 11 views
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; 
    } 
+0

없음 생식. 어떤 실수도 보지 마라. 문제가되는 투명성 키를 추측해야합니다. –

답변

3

가 :

여기 내 코드의 조각입니다. 예를 들어

,

case WM_SETCURSOR: 
    switch (LOWORD(lParam)) 
    { 
     case HTBOTTOM: 
      SetCursor(LoadCursor(0, IDC_SIZENS)); 
      return 0; 
      } 
     } 
    } 
    return DefWindowProc(hWnd, uMsg, wParam, lParam);