En raison du problème rencontré après mon utilisation WX_EX_COMPOSITED J'ai été forcé de le désactiver car il n'était pas compatible avec la liste avec le type de rapport défini.Redimensionnement du problème de scintillement du contrôle TAB
Disabling desktop composition causes flickering on Tab Control
Maintenant, chaque fois que je remets à la côte le contrôle TAB avec le redimensionnement de la fenêtre principale en réponse à une des messages WM_SIZE, WM_SIZING, WM_WINDOWPOSCHANGED messages
invoke GetClientRect,hWnd,addr CLRECT
LEA EAX, CLRECT
invoke MoveWindow,MainTabHandle,NULL,NULL,[EAX].RECT.right,[EAX].RECT.bottom,TRUE
Il y a beaucoup de scintillement aller avec le contrôle TAB.
J'ai déjà désactivé le message WM_ERASEBKGND en renvoyant true à la procédure de fenêtre par défaut.
.elseif uMsg == WM_ERASEBKGND
MOV EAX,1
RET
et la manipulation un message WM_PRINT moi-même en utilisant cet article que j'ai lu de Microsoft.
https://msdn.microsoft.com/en-us/library/ms969905.aspx
WM_PRINT gestionnaire de messages
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
procédure de peinture après je l'ai porté de C++ pour 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;
La fonction de la peinture semble fonctionner correctement car si j'omettez le appel à il, il y a un problème de dessin lors du redimensionnement pour étendre la largeur de la boîte de dialogue principale de la nouvelle zone est j Je suis noir. Mais si j'appelle la peinture, la nouvelle zone après le redimensionnement est dessinée correctement. Mais il y a énormément de scintillement.
J'ai 3 boîtes de dialogue on est la boîte de dialogue principale invoquée par DialogBoxParam API
Et les 2 autres sont tout simplement modales boîtes de dialogue (sans légende et son style est réglé sur DS_SYSMODAL) ces boîtes de dialogue sera joint à la commande TAB par CreateDialogParam appel API chacun a son propre unique, DlgProc.
Maintenant, que dois-je faire pour éviter le contrôle de redimensionnement scintillement? devrais-je faire sous-classer le contrôle que je veux redimensionner? et désactiver WM_ERASEBKGND pour chaque contrôle individuellement?
invalidante la WM_ERASEBKGND un message doit être fait que dans la boîte de dialogue principale ou pour toutes les boites de dialogue modales ainsi?
Quelqu'un pourrait aider à ce sujet?
J'ai trouvé un moyen de contourner cela en utilisant l'indicateur WS_EX_COMPOSITED sur le contrôle de tabulation au lieu de sur la boîte de dialogue elle-même et d'utiliser le WS_CLIPCHILDREN dans la boîte de dialogue principale. Cela a corrigé le problème de scintillement lors du redimensionnement de l'onglet. Cependant maintenant les contrôles enfants ne sont pas correctement rendus et ils disparaissent après avoir redimensionné l'onglet. Sur le message WM_SIZING j'utilise MoveWindow api sur le contrôle de tabulation avec bRepaint mis à true comment puis-je faire dessiner correctement les contrôles enfants sans être perdu après le redimensionnement? –