2010-04-29 2 views
7

TWinControl에 하드웨어 가속 렌더러를 포함시킨 구성 요소를 만들었으므로이 구성 요소를 폼에 배치 할 수 있습니다. 대부분의 경우 잘 작동하지만 컨트롤의 크기를 조정하려고하면 메시지 루프가 실행될 때까지 모든 것이 공백이되며 외부 DLL에서 호스팅되는 렌더러에 대해 WndProc을 호출합니다. 이것은 코드에서 컨트롤의 크기를 조정 한 후에 명시 적으로 Application.ProcessMessages를 호출해야한다는 것을 의미합니다. 이는 나쁜 습관으로 간주됩니다.ProcessMessages를 호출하지 않아도 됨

컨트롤의 크기를 변경할 때 DLL의 WndProc를 호출하도록 컨트롤에 일부 논리를 넣을 수있는 방법이 있습니까? 그렇다면 바로 처리하기 위해 ProcessMessages를 호출 할 필요가 없습니까?

+0

처음에는 ProcessMessages를 피하려고합니다. –

답변

10

TWinControl.Update 대신 대신 WM_PAINT 이벤트를 SendMessage로 호출하여 임의의 메시지를 처리 ​​할 수 ​​있습니다.

+0

그게 효과가있다. 감사! –

3

올바른 해결책은 크기를 조정할 때 InvalidateRect를 호출하는 것입니다. 그러면 Windows에서 WM_PAINT 메시지를 게시합니다. 참고로 Petzold를 선반에서 떼어 내고 회화 장을 읽어야합니다.

+1

또한 크기를 조정하는 동안 시스템 설정에서 창을 다시 그려야하는 경우 다시 크기 조정 작업이 완료 될 때까지 WM_PAINT가 표시되지 않습니다. –

관련 문제