Como devo alterar a IMAGEM (não importa o tipo) do botão na barra de ferramentas em aplicativos MFC?
Eu sei que este é um problema estúpido, mas estou preso a ele nos últimos 4 dias. Por que é tão complicado apenas modificar a barra de ferramentas nos aplicativos MFC?
Eu crio um novo aplicativo MFC Visual studio que é baseado em diálogo . Eu crio um novo recurso da barra de ferramentas . E então como devo definir as imagens (png, bitmap, jpeg ...) ou qualquer tipo a ser usado na minha barra de ferramentas?
Eu configurei o tamanho para w50 e h50 e posso desenhar dentro dos botões. Mas não consigo encontrar uma maneira de usar a imagem.
Ao invés destes 2 botões que acabei de experimentar estão funcionando, quero usar 8 imagens que estão em formato bitmap e em png. Eu li em algum lugar que PNG não é compatível com aplicativos MFC, então eu converti em bitmap.

Eu carrego minha barra de ferramentas no aplicativo de diálogo assim no 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, se alguém puder me ajudar ficaria muito grato. O formato da imagem não importa. Eu só quero colocar a imagem na barra de ferramentas.
Este é meu aplicativo atualmente:

ATUALIZAÇÃO: eu tentei dessa forma. ID_BUTTON_1
se o primeiro botão na barra de ferramentas e eu tentei mudar sua imagem. Mas com isso não há botão na barra de ferramentas no local do primeiro botão. O que estou fazendo errado?
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));
Respostas
Respondi recentemente e não consigo mais encontrar minha resposta. Você pode usar imagens PNG para suas barras de ferramentas. Nos bastidores, você ainda usa a versão BMP para o editor de recursos para criar seus manipuladores de eventos etc. Mas você pode adicionar seu PNG como um recurso e carregá-lo em sua caixa de diálogo.
Por exemplo, eu chamo isso em minha OnInitDialog
função:
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);
}
}
Não sei para onde foi minha resposta anterior, caso contrário, teria sinalizado como duplicado. #confuso.