Comment dois-je changer l'image (peu importe le type) du bouton dans la barre d'outils dans les applications MFC?
Je sais que c'est un problème stupide mais je suis coincé avec ça depuis 4 jours. Pourquoi est-il si compliqué de simplement modifier la barre d'outils dans les applications MFC?
Je Créer un nouveau Visual Studio application MFC qui est basée dialogue . Je crée une nouvelle ressource Toolbar . Et puis comment définir les images (png, bitmap, jpeg ...) ou tout autre type à utiliser dans ma barre d'outils?
J'ai défini la taille sur w50 et h50 et je peux dessiner à l'intérieur des boutons. Mais je ne trouve pas moyen d'utiliser l'image.
Au lieu de ces 2 boutons que je viens d'essayer si cela fonctionne, je souhaite utiliser 8 images au format bitmap et au format png. J'ai lu quelque part que PNG n'est pas pris en charge par les applications MFC, j'ai donc converti en Bitmap.

Je charge ma barre d'outils dans l'application de dialogue comme ceci dans la OnInitDialog()
méthode:
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);
}
S'il vous plaît, si quelqu'un peut m'aider, je serais vraiment reconnaissant. Le format d'image n'a pas d'importance. Je veux juste mettre l'image dans la barre d'outils.
Ceci est mon application actuellement:

MISE À JOUR: j'ai essayé de cette façon. ID_BUTTON_1
si le premier bouton de la barre d'outils et j'ai essayé de changer son image. Mais avec cela, il n'y a pas de bouton dans la barre d'outils à l'endroit du premier bouton. Qu'est ce que je fais 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));
Réponses
J'y ai répondu récemment et je ne trouve plus ma réponse. Vous pouvez utiliser des images PNG pour vos barres d'outils. Sous le capot, vous utilisez toujours la version BMP pour l'éditeur de ressources pour créer vos gestionnaires d'événements, etc. Mais vous pouvez ensuite ajouter votre PNG en tant que ressource et le charger dans votre boîte de dialogue.
Par exemple, j'appelle ceci dans ma OnInitDialog
fonction:
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);
}
}
Je ne sais pas où ma réponse précédente est allée, sinon j'aurais signalé cela comme un double. #confus.