WX_EX_COMPOSITED을 사용한 후에 문제가 발생하여 보고서 유형이 설정된 listview와 호환되지 않아 강제로 해제되었습니다. 내가 메시지 중 하나에 대한 응답으로 주 대화 상자의 크기를 조정과 함께 탭 컨트롤의 크기를 조정할 때마다TAB 컨트롤 깜박임 문제 크기 조정
Disabling desktop composition causes flickering on Tab Control
지금 WM_SIZE, WM_SIZING은 많은이 있습니다 메시지
invoke GetClientRect,hWnd,addr CLRECT
LEA EAX, CLRECT
invoke MoveWindow,MainTabHandle,NULL,NULL,[EAX].RECT.right,[EAX].RECT.bottom,TRUE
을 WM_WINDOWPOSCHANGED TAB 컨트롤로 깜빡입니다.
이미 기본 윈도우 프로 시저로 돌아가서 WM_ERASEBKGND 메시지를 해제했습니다.
.elseif uMsg == WM_ERASEBKGND
MOV EAX,1
RET
와 나는 Microsoft에서 읽고이 문서를 사용하여 내 자신에 WM_PRINT 메시지를 처리.
https://msdn.microsoft.com/en-us/library/ms969905.aspx
WM_PRINT 메시지 핸들러
invoke BeginPaint,hWnd,addr PS
invoke Paint,hWnd,addr PS
invoke EndPaint,hWnd,addr PS ;PS is just a LOCAL PAINTSTRUCT structure used for painting
페인트 절차 내가 MASM
페인트 기능은 내가를 생략하면 이후 잘 작동하는 것 같다Paint Proc hWnd:DWORD, pPAINTSTRUCT:PPAINTSTRUCT
LOCAL rc:RECT ;
LOCAL hdcMem:HDC ;
LOCAL hBITMAP:HANDLE
LOCAL hbmMem:HANDLE
LOCAL hbmOld:HANDLE
LOCAL hbrBkGnd:HBRUSH ;
LOCAL hfntOld:HFONT ;
invoke GetClientRect,hWnd,addr rc
MOV EAX,pPAINTSTRUCT
invoke CreateCompatibleDC,[EAX].PAINTSTRUCT.hdc
MOV hdcMem ,EAX
MOV EAX,pPAINTSTRUCT
invoke CreateCompatibleBitmap,[EAX].PAINTSTRUCT.hdc,rc.right,rc.bottom
MOV hbmMem,EAX
invoke SelectObject,hdcMem,hbmMem
MOV hbmOld,EAX
invoke GetSysColor,COLOR_WINDOW
invoke CreateSolidBrush,EAX
MOV hbrBkGnd,EAX
invoke FillRect,hdcMem,addr rc,hbrBkGnd
invoke DeleteObject,hbrBkGnd
.if hfnt
invoke SelectObject,hdcMem,hfnt
MOV hfntOld,EAX
.endif
invoke SetBkMode,hdcMem,TRANSPARENT
invoke GetSysColor,COLOR_WINDOWTEXT
invoke SetTextColor,hdcMem,EAX
invoke DrawText,hdcMem,addr szCaption,-1,addr rc,DT_CENTER
invoke SelectObject,hdcMem,hfntOld
MOV EAX,pPAINTSTRUCT
LEA EBX,rc
MOV EDX,[EBX].RECT.right
SUB EDX,[EBX].RECT.left
MOV ECX,[EBX].RECT.bottom
SUB ECX,[EBX].RECT.top
invoke BitBlt,[EAX].PAINTSTRUCT.hdc,rc.left,rc.top,EDX,ECX,hdcMem,0, 0,SRCCOPY
invoke SelectObject,hdcMem, hbmOld
invoke DeleteObject,hbmMem;
invoke DeleteDC,hdcMem;
에 C++에서 포팅 후 그것에 대한 호출, 새로운 영역은 j입니다 메인 대화 상자의 너비를 확장하기 위해 크기를 조정할 때 그리기 문제가있다 ust black. 하지만 페인트를 호출하면 크기 조정 후 새 영역이 올바르게 그려집니다. 그러나 깜박 거림은 엄청납니다.
나는 하나 DialogBoxParam API를 통해 호출 주 대화 상자 3 개 대화 상자가
그리고 다른 2 (NO 캡션과는 스타일이 DS_SYSMODAL로 설정입니다) 단지 모덜리스 대화 상자입니다 이러한 대화 상자 CreateDialogParam API 호출을 통해 Tab 컨트롤에 연결됩니다. 각각 고유 한 DlgProc이 있습니다.
이제 컨트롤 크기가 깜박이는 것을 방지하려면 어떻게해야합니까? 내가 크기를 조정하려는 컨트롤에 하위 분류를해야합니까? 각 컨트롤에 대해 WM_ERASEBKGND을 개별적으로 비활성화 하시겠습니까?
WM_ERASEBKGND 메시지를 기본 대화 상자에서만 또는 모든 모덜리스 대화 상자에서 사용하지 않도록 설정해야합니까?
누구든지이 문제에 대해 도움이 될 수 있습니까?
대화 상자 자체가 아닌 탭 컨트롤에서 WS_EX_COMPOSITED 플래그를 사용하고 주 대화 상자에서 WS_CLIPCHILDREN을 사용하여 그 주위에 방법을 발견했습니다. 이렇게하면 탭의 크기를 변경할 때 깜박 거리는 문제가 해결되었습니다. 그러나 이제 자식 컨트롤이 제대로 렌더링되지 않고 탭 크기를 조정하면 사라집니다. WM_SIZING 메시지에서 bRepaint가 true로 설정된 탭 컨트롤에서 MoveWindow API를 사용하고 있습니다. 자식 컨트롤이 크기 조절 후 손실되지 않고 제대로 그릴 수 있도록하려면 어떻게해야합니까? –