poner menus logo iconos icono fotos font con como awesome agregar mfc mfc-feature-pack

mfc - menus - menu con fotos wordpress



Iconos en menús de MFC Feature Pack (5)

Creo (pero puedo estar equivocado) que estas clases son las mismas que las clases de BCGToolbar que se incluyeron en MFC cuando Microsoft compró BCG. De ser así, puede crear una barra de herramientas y utilizar la misma ID en un botón de la barra de herramientas que en los elementos del menú para los que desea crear iconos, y deberían aparecer automáticamente. Por supuesto, no tiene que mostrar realmente las barras de herramientas.

Hay tres lugares donde los menús aparecen en la nueva funcionalidad de MFC (Feature Pack):

  • En barras de menú (CMFCMenuBar)
  • En menús emergentes (CMFCPopupMenu)
  • En la versión ''menú desplegable'' de CMFCButton

Quiero poner iconos (de alto colorido y con transparencia) en los menús en todos ellos. He encontrado CFrameWndEx :: OnDrawMenuImage () que puedo usar para dibujar los iconos delante de los elementos de la barra de menú. No es muy conveniente tener que implementar el dibujo de iconos en 2008, pero funciona. Para los demás no he encontrado una solución todavía. ¿Existe una manera automática de establecer iconos para los menús?


En BCGToolbar, es suficiente crear una barra de herramientas en los recursos y cargarla (pero no mostrar la ventana), pero el botón de la barra de herramientas debe tener la misma ID que el elemento del menú al que desea vincularla.


Una cosa que puede sorprender a una persona es que para las barras de herramientas personalizables (es decir, no bloqueadas), la primera barra de herramientas que crea, el marco se divide y se convierte en una especie de mapa de bits de paleta de todos los iconos del programa. Si intenta agregar más barras de herramientas más tarde (o barras de herramientas diferentes) que tienen mapas de bits (o pngs) con una profundidad de color diferente a la primera, parecen fallar porque no puede agregarlos a la misma paleta.


Así es como lo hice funcionar:

primero

, como dijeron los demás, crea una barra de herramientas invisible al lado de tu barra de herramientas principal (estoy usando los nombres habituales basados ​​en los nombres de AppWizard):

MainFrm.h: class CMainFrame { //... CMFCToolBar m_wndToolBar; CMFCToolBar m_wndInvisibleToolBar; //... }; MainFrm.cpp: int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { //... // Normal, visible toolbar if(m_wndToolBar.Create(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)) { VERIFY( m_wndToolBar.LoadToolBar( theApp.m_bHiColorIcons ? IDR_MAINFRAME_256 : IDR_MAINFRAME) ); // Only the docking makes the toolbar visible m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); DockPane(&m_wndToolBar); } // Invisible toolbar; simply calling Create(this) seems to be enough if(m_wndInvisibleToolBar.Create(this)) { // Just load, no docking and stuff VERIFY( m_wndInvisibleToolBar.LoadToolBar(IDR_OTHERTOOLBAR) ); } }

Segundo: las imágenes y los recursos de la barra de herramientas

IDR_MAINFRAME e IDR_MAINFRAME_256 fueron generados por AppWizard. La primera es la versión fea de 16 colores y la última es la interesante versión en color.
A pesar de su nombre, si no recuerdo mal, incluso la imagen generada por AppWizard tiene una profundidad de color de 24 bits. Lo mejor: simplemente reemplázalo con una imagen de 32 bits y eso también funcionará.

Existe la barra de herramientas invisible IDR_OTHERTOOLBAR : IDR_OTHERTOOLBAR una barra de herramientas con el editor de recursos. Solo algunos íconos simulados y los ID de comando. VS luego generó un mapa de bits que reemplacé con mi versión de alto color. ¡Hecho!

Nota

No abra las barras de herramientas con el editor de recursos: puede tener que convertirlo a 4 bits antes de que pueda hacer algo con él. E incluso si dejas que haga eso (porque, detrás de Visual Studio, vas a reemplazar el resultado con la imagen de color alta de nuevo, ¡ja!), Descubrí que (¿a veces?) Simplemente no puede editar la barra de herramientas. Muy extraño.
En ese caso, le aconsejo que edite directamente el archivo .rc.


Intenta usar esta función:

CMFCToolBar::AddToolBarForImageCollection(UINT uiResID, UINT uiBmpResID=0, UINT uiColdResID=0, UINT uiMenuResID=0, UINT uiDisabledResID=0, UINT uiMenuDisabledResID=0);

Entonces, por ejemplo:

CMFCToolBar::AddToolBarForImageCollection(IDR_TOOLBAROWNBITMAP_256);

Funcionó muy bien para mí