2012-05-07 2 views
1

다음과 같이 MSG의 구조 조정 왜 POINT 변수를 창 프로 시저로 전달하지 않고 마우스의 POINT을 찾는 방법이 있습니까? 개발자 : GetCursorPos()? 나는 몇 가지 예를 직접 LOWORD(lParam), HIWORD(lParam)에 의해 얻을 찾으십시오. 당신이 그것에 대해 정보를 말해 줄 수 있습니까? 고마워요 ...얻기 마우스는 WM_LBUTTONDOWN 메시지

누군가가이 글을 쓰는 것을 보았습니다. 맞습니까? 잘 모르겠습니다.

RECT rect1; 
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam) 
{ 
    HDC hDC;   
    WORD x,y; 
    PAINTSTRUCT ps;  

    x = LOWORD(lParam); 
    y = HIWORD(lParam); 

    switch(iMessage) 
    { 
    case WM_LBUTTONDOWN: 
     if(wParam&MK_CONTROL) 
     { 
      rect1.left = x; 
      rect1.top = y; 
     } 
     else if(wParam&MK_SHIFT) 
     { 
      rect1.left = x; 
      rect1.top = y; 
     } 
     break; 

    case WM_DESTROY: 
     PostQuitMessage(0); 
     return 0; 
    default: 
     return(DefWindowProc(hWnd,iMessage,wParam,lParam)); 
    } 
    return 0; 
} 
+0

질문의 첫 번째 부분은 두 번째 질문과 어떤 관련이 있습니까? –

+0

우리가 GetMessage (xx)를 할 때 Mouse'point를 얻을 수 있지만 프로세스 기능에서는 사라져 버리는데 왜 Windows에서 그렇게할까요? 내 영어가 너무 가난하니, 내가 말한 것이 분명해? 감사합니다 ... –

+0

제목에 따라 투표 할 수 있습니까? – Deanna

답변

4

, 그것은 POINT 변수 기능을 처리하기 위해 통과하지 않고, 어떻게 마우스의 포인트를 찾는 이유는 무엇입니까?

정말 원하는 경우 정보를 검색 할 수있는 기능이 있기 때문입니다. 거의 사용하지 않는 메시지 처리기에 대한 추가 인수를 전달할 필요는 없습니다.

GetCursorPos하여(); (나는 그것의 디자인에 대한 이유를 모르겠지만, 회원들이 시간이 지남에 따라 MSG 구조에 추가 된 것으로 추측에는 요 틀림없이 WndProcMSG*을 위해 정의 된 수 있습니다.) ?

번호 GetCursorPos는 메시지가 생성되었을 때의 위치에서 다를 수 있습니다 커서의 현재 위치를 반환합니다. 대신 GetMessagePos이 필요합니다. (GetAsyncKeyState versus GetKeyState과 유사합니다.)

마찬가지로 메시지 처리기는 GetMessageTime을 통해 메시지 시간을 가져올 수 있습니다.

+0

@ Mr.Tu : 예제에서'lParam'과'wParam'의 의미는 메시지 유형에 따라 다르므로 메시지 유형을 검사하기 전에 좌표 데이터를 추출하려고하면 매우 잘못된 것입니다. 좌표를 추출하기 위해서'LOWORD'와'HIWORD'를 사용하는 것도 잘못된 것입니다; 다중 모니터 시스템에서 음수 좌표를 제대로 처리하려면'GET_X_LPARAM'과'GET_Y_LPARAM'을 사용해야합니다. – jamesdlin

+0

고맙습니다 .. 명확한 생각 .. –

+1

음 .. 이런 것들을하기위한 매크로가 있습니다 .. LPARAM의 상위 비트는 x이고, 하위 비트는 y입니다 (메모리가 올바르게 작동하는 경우). http://msdn.microsoft.com/en-us/library/windows/desktop/ms645607%28v=vs.85%29.aspx – johnathon

3

좌표가 사라지지 않습니다. 그들은 lParam에 있습니다. WM_MOUSEMOVE message on MSDN 참조 : 프로세스 기능에서

A window receives this message through its WindowProc function. 
... 
lParam 

    The low-order word specifies the x-coordinate of the cursor. 
The coordinate is relative to the upper-left corner of the client area. 

    The high-order word specifies the y-coordinate of the cursor. 
The coordinate is relative to the upper-left corner of the client area. 
... 
Use the following code to obtain the horizontal and vertical position: 

xPos = GET_X_LPARAM(lParam); 
yPos = GET_Y_LPARAM(lParam); 
+0

네, 맞습니다. WM_MOUSEMOVE로 제한 되었기 때문에 WM_KEYDOWN, WM_CHAR 같은 마우스의 메시지에 속하지 않는 것은 어떨까요? xPos = GET_X_LPARAM (lParam); yPos = GET_Y_LPARAM (lParam); 답변 해 주셔서 감사합니다 ... –

+0

[WM_KEYDOWN message] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms646280%28v=vs.85%)에 대해 읽어보십시오. 29.aspx) 및 [WM_CHAR 메시지] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms646276%28v=vs.85%29.aspx)? –

+0

나는 내 questin을 업데이트했다, 고마워 .. –