CMFCEditBrowseCtrl está parpadeando el ícono del botón.
Pregunta similar aquí (https://forums.codeguru.com/showthread.php?540443-CMFCEditBrowseCtrl-flickering-button-icon).
Tengo un control sencillo en mi diálogo:
Diálogo sencillo:
IDD_DIALOG_IMPORT_FROM_CLM_EXPLORER DIALOGEX 0, 0, 309, 176
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "&Importar desde CLM Explorer"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
DEFPUSHBUTTON "Aceptar",IDOK,198,155,50,14
PUSHBUTTON "Cancelar",IDCANCEL,252,155,50,14
LTEXT "Idioma:",IDC_STATIC,7,39,35,8
LISTBOX IDC_LIST_LANGUAGE,7,54,142,115,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP
LTEXT "Base de datos de estudiantes (CSV):",IDC_STATIC,7,7,85,8
CONTROL "",IDC_STUDENT_DATABASE,"MfcEditBrowse",WS_BORDER | WS_TABSTOP | 0x880,7,18,295,14
END
La variable asignada al control estándar y personalizada en OnInitDialog
:
m_browseStudentDB.EnableFileBrowseButton(_T("CSV"), _T("*.CSV|*.CSV||"), OFN_FILEMUSTEXIST);
- Windows 11
- Visual Studio 2022
Grabación de muestra para explicar lo que estoy viendo:
Creé un proyecto de diálogo vacío, arrastré el control y simplemente lo ejecuté:
Parpadea.
Enlace temporal al proyecto:
https://www.dropbox.com/s/kskhzntg3l4103u/MFCApplication9.zip?dl=0
davy.ai
Según la información y la grabación proporcionada, parece que el control
MfcEditBrowse
está causando el problema de parpadeo al renderizar el diálogo.Una posible solución a este problema es utilizar el doble buffering para reducir el parpadeo. Esto se puede lograr agregando el siguiente código a la función
OnInitDialog
:c++
CWnd* pBrowseWnd = GetDlgItem(IDC_STUDENT_DATABASE);
DWORD dwStyle = pBrowseWnd->GetStyle();
dwStyle |= WS_EX_COMPOSITED;
pBrowseWnd->ModifyStyle(0, WS_CLIPCHILDREN);
pBrowseWnd->ModifyStyleEx(0, WS_EX_COMPOSITED);
Además, asegúrese de que el control
MfcEditBrowse
sea el último control en dibujarse en el diálogo para evitar que otros controles parpadeen.Es importante tener en cuenta que el doble buffering puede causar un aumento en el uso de memoria y en la carga de rendimiento. Por lo tanto, se recomienda utilizarlo solo cuando sea necesario o en situaciones donde el parpadeo esté afectando considerablemente la experiencia del usuario.