¿Cómo debo cambiar la IMAGEN (no importa el tipo) del botón en la barra de herramientas en las aplicaciones MFC?
Sé que este es un problema estúpido, pero me he quedado atascado durante los últimos 4 días. ¿Por qué es tan complicado simplemente modificar la barra de herramientas en las aplicaciones MFC?
Creo Nueva Visual Studio aplicación MFC que se basa diálogo . Creo un nuevo recurso de la barra Google . Y luego, ¿cómo debo configurar las imágenes (png, mapa de bits, jpeg ...) o cualquier tipo para usar en mi barra de herramientas?
He configurado el tamaño en w50 y h50 y puedo dibujar dentro de los botones. Pero no puedo encontrar la manera de usar la imagen.
En su lugar, estos 2 botones que acabo de probar si funcionan, quiero usar 8 imágenes que están en formato de mapa de bits y en png. Leí en alguna parte que PNG no es compatible con las aplicaciones MFC, así que lo convertí a mapa de bits.

Carga mi barra de herramientas en la aplicación de diálogo así en el OnInitDialog()
método:
DWORD dwCtrlStyle = TBSTYLE_FLAT | TBSTYLE_TOOLTIPS | CBRS_SIZE_DYNAMIC;
DWORD dwStyle = AFX_DEFAULT_TOOLBAR_STYLE;
CMFCToolBar::m_dblLargeImageRatio = 1;
if (m_ToolBar.CreateEx(this, dwCtrlStyle, dwStyle, CRect(1, 1, 1, 1), IDR_TOOLBAR1))
{
dwStyle = CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC;
m_ToolBar.SetPaneStyle(m_ToolBar.GetPaneStyle() | dwStyle);
CMFCToolBarInfo info;
m_ToolBar.LoadToolBarEx(IDR_TOOLBAR1, info, FALSE);
CSize sizeToolBar = m_ToolBar.CalcFixedLayout(TRUE, TRUE);
m_ToolBar.SetWindowPos(NULL, 0, 0, sizeToolBar.cx, sizeToolBar.cy, SWP_NOACTIVATE |
SWP_NOZORDER);
CPoint ptOffset(0, sizeToolBar.cy);
}
Por favor, si alguien me puede ayudar, estaría muy agradecido. El formato de la imagen no importa. Solo quiero poner una imagen en la barra de herramientas.
Esta es mi aplicación actualmente:

ACTUALIZACIÓN: Lo he intentado de esta manera. ID_BUTTON_1
si el primer botón en la barra de herramientas y traté de cambiar su imagen. Pero con esto no hay ningún botón en la barra de herramientas en el lugar del primer botón. ¿Que estoy haciendo mal?
VERIFY(m_toolbar.LoadBitmap(IDB_BITMAP1));
CMFCToolBarButton mbutton;
mbutton.SetImage(m_toolbar.GetImages()->GetCount() - 1);
m_toolbar.ReplaceButton(ID_BUTTON_1, CMFCToolBarButton(ID_BUTTON_1, 0));
Respuestas
Respondí esto recientemente y ya no puedo encontrar mi respuesta. Puede utilizar imágenes PNG para sus barras de herramientas. Bajo el capó, todavía usa la versión BMP para el editor de recursos para crear sus controladores de eventos, etc. Pero luego puede agregar su PNG como un recurso y luego cargarlo en su diálogo.
Por ejemplo, llamo a esto en mi OnInitDialog
función:
void CMeetingScheduleAssistantDlg::CreateToolbar()
{
DWORD dwCtrlStyle = TBSTYLE_FLAT | TBSTYLE_TOOLTIPS | CBRS_SIZE_DYNAMIC;
DWORD dwStyle = AFX_DEFAULT_TOOLBAR_STYLE;
CMFCToolBar::m_dblLargeImageRatio = 1; // AJT v20.1.7 Bug fix
if (m_ToolBar.CreateEx(this, dwCtrlStyle,
dwStyle, CRect(1, 1, 1, 1), IDR_TOOLBAR))
{
dwStyle = CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC;
m_ToolBar.SetPaneStyle(m_ToolBar.GetPaneStyle() | dwStyle);
CMFCToolBarInfo info;
info.m_uiColdResID = IDB_PNG_MAIN_TOOLBAR;
info.m_uiHotResID = IDB_PNG_MAIN_TOOLBAR;
info.m_uiLargeColdResID = IDB_PNG_MAIN_TOOLBAR;
info.m_uiLargeHotResID = IDB_PNG_MAIN_TOOLBAR;
m_ToolBar.LoadToolBarEx(IDR_TOOLBAR, info, FALSE);
CSize sizeToolBar = m_ToolBar.CalcFixedLayout(TRUE, TRUE);
m_ToolBar.SetWindowPos(NULL, 0, 0, sizeToolBar.cx, sizeToolBar.cy,
SWP_NOACTIVATE | SWP_NOZORDER);
// Move all controls down
CPoint ptOffset(0, sizeToolBar.cy);
CRect rcChild;
CWnd* pwndChild = GetWindow(GW_CHILD);
while (pwndChild)
{
if (pwndChild->GetSafeHwnd() != m_ToolBar.GetSafeHwnd())
{
pwndChild->GetWindowRect(rcChild);
ScreenToClient(rcChild);
rcChild.OffsetRect(ptOffset);
pwndChild->MoveWindow(rcChild, FALSE);
}
pwndChild = pwndChild->GetNextWindow();
}
// Resize the window
CRect rcWindow;
GetWindowRect(rcWindow);
rcWindow.bottom += sizeToolBar.cy;
MoveWindow(rcWindow, FALSE);
}
}
No sé a dónde ha ido mi respuesta anterior, de lo contrario, lo habría marcado como duplicado. #confuso.