2017-12-23 5 views
0

WM_SETTEXT를 호출 한 후 서브 클래 싱 된 컨트롤이 WM_PAINT를 수신하지 않는다는 정상적인 동작입니까?Win32 C++ WM_SETTEXT를 호출 한 후 서브 클래 싱 된 레이블이 WM_PAINT를 수신하지 않음

부모는 WM_CTLCOLOR를 수신하지만 서브 클래 싱 된 WM_PAINT 메시지 내에는 모든 것을 페인트하려고합니다.

WM_SETTEXT를 호출 한 후 InvalidateRect를 호출하는 것이 좋습니다.

코드를보고 싶다면 알려주세요. 나는이 질문에 꼭 필요하지 않은 것 같아서 처음에 그것을 버렸다.

+0

어떤 메시지 수신 창은 윈도우 프로 시저 주소 (서브 클래스 또는 하위)에 의존하지 않습니다. – RbMm

답변

1

WM_SETTEXT에 대한 응답으로 WM_PAINT가 전송되는지 여부는 하위 클래스가 어떤 클래스인지에 따라 달라지며 예를 들어 버튼이 무효화되지만 목록 상자는 표시되지 않습니다 (목록 상자의 창 텍스트는 디버깅 보조 장치 이상의 것입니다. UI에 표시되지 않음).

클래스는 텍스트를 설정하면 항상 하위 클래스 'WindowProc에 다음과 같이 뭔가를 추가 할 수 무효화해야한다는 등의 경우 :

case WM_SETTEXT: { 
    LRESULT res = CallWindowProc(lpfnParent, hWnd, WM_SETTEXT, wParam, lParam); 
    InvalidateRect(hWnd, nullptr, true); 
    return res; 
} 

당신이 InvalidateRect 각 시간이 필요하지 않습니다 그런 식으로하면 제어 텍스트를 설정하십시오.

+0

감사합니다. 나는 이것이 정말로 이상한 것을 안다. 그러나 나는 그것을 받아 들여야 할 것 같다. 그런데 왜 "CallWindowProc (lpfnParent, hWnd, WM_SETTEXT, wParam, lParam);"호출합니까? –