es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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:

Sample


Creé un proyecto de diálogo vacío, arrastré el control y simplemente lo ejecuté:

Sample

Parpadea.

Enlace temporal al proyecto:

https://www.dropbox.com/s/kskhzntg3l4103u/MFCApplication9.zip?dl=0

Tags:  , ,

Answer

  1. Avatar for 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.

Comments are closed.