2013-12-18 7 views
0

메세지를 보내는 컨트롤의 ID를 얻는 msg WM_CTLCOLORSTATIC가 수신되면 대화 상자 프로 시저에 포함하려고합니다. 내가 WM_CTLCOLORSTATIC의 lParam에 그것이 정확하지 않을 수 있습니다 값 65535을 반환 캐스트 입력 할 때WM_CTLCOLORSTATIC lParam, C++ WINAPI

case WM_CTLCOLORSTATIC: 
     UINT ID = GetWindowLong((HWND)lParam, GWL_ID); 

문제는 ...이다; 최대 UINT ID 65535의 리소스 항목조차 없습니다.

왜 이런 일이 발생했는지 알 수 있습니까?

+0

당신은 창 핸들 (lParam에가) 65535 건가요? 아니면'GetWindowLong'의 결과가 65535입니까? 귀하의 질문을 명확히하십시오. – arx

+0

'GetWindowLong'은 x64 플랫폼을 지원하지 않기 때문에 더 이상 사용되지 않습니다. 올바른 함수는 ['GetWindowLongPtr']입니다 (http://msdn.microsoft.com/en-us/library/windows/desktop/ms633585 (v = vs .85) .aspx) – Mgetz

+0

CTLCOLORSTATIC의 매개 변수 "lParam"과 GWL_ 메시지 "GWL_ID"를 사용하여 GetWindowLong을 호출했습니다. 그래서 GetWindowLong CTLCOLORSTATIC 메시지를 보내는 컨트롤의 UINT ID를 반환해야합니다. 그러나 그렇지 않습니다. 65535를 반환합니다. –

답변

5

귀하의 질문은 명확하지 않지만, 당신은 ID가 65535 인 것으로 추측합니다. -1은 정적 제어 ID에 대해 꽤 표준입니다.

정적 컨트롤을 구분할 수있게하려면 다른 ID를 지정하십시오.

다른 정전기 제어에 대한 색상의 상관하지 않는 경우

, 그냥 사용

if (ID == IDC_RECT_CC_00) { 
    [...] 
} else { 
    // don't bother 
} 
+2

수정. 거기에는 상수가 있습니다 : 'IDC_STATIC'. – rodrigo

+0

모두 ID가 다릅니다. 이 컨트롤의 ID는 #define IDC_RECT_CC_00입니다. 1000 –

+0

각 정적 컨트롤은 부모에게 WM_CTLCOLORSTATIC을 보냅니다. ID가 -1 인 정적 컨트롤이 있습니다. – manuell