Bagaimana cara mengubah GAMBAR (tidak peduli jenisnya) dari tombol di toolbar di aplikasi MFC?
Saya tahu bahwa ini adalah masalah bodoh tetapi saya terjebak dengannya selama 4 hari terakhir. Mengapa begitu rumit untuk hanya memodifikasi bilah alat di aplikasi MFC?
Saya membuat aplikasi New Visual studio MFC yang berbasis dialog . Saya membuat sumber daya Toolbar baru . Lalu bagaimana cara mengatur gambar (png, bitmap, jpeg ...) atau jenis apa pun yang akan digunakan di toolbar saya?
Saya telah menyetel ukuran ke w50 dan h50 dan saya bisa menggambar di dalam tombol. Tetapi saya tidak dapat menemukan cara untuk menggunakan gambar.
Sebaliknya 2 tombol yang baru saja saya coba ini berfungsi, saya ingin menggunakan 8 gambar yang berformat bitmap dan png. Saya membaca bahwa PNG tidak didukung oleh aplikasi MFC jadi saya mengonversi ke Bitmap.

Saya memuat toolbar saya di aplikasi dialog seperti ini dalam OnInitDialog()
metode:
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);
}
Tolong jika seseorang dapat membantu saya, saya akan sangat berterima kasih. Format gambar tidak masalah. Saya hanya ingin meletakkan gambar di toolbar.
Ini adalah aplikasi saya saat ini:

UPDATE: Saya sudah mencoba cara ini. ID_BUTTON_1
jika tombol pertama ada di toolbar dan saya coba ubah gambarnya. Tetapi dengan ini tidak ada tombol di toolbar sebagai pengganti tombol pertama. Apa yang saya lakukan salah?
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));
Jawaban
Saya menjawab ini baru-baru ini dan tidak dapat lagi menemukan jawaban saya. Anda dapat menggunakan gambar PNG untuk bilah alat Anda. Di bawah tenda Anda masih menggunakan versi BMP untuk editor sumber daya untuk membuat penangan acara Anda, dll. Namun, Anda kemudian dapat menambahkan PNG sebagai sumber daya dan kemudian memuatnya ke dalam dialog Anda.
Misalnya, saya menyebutnya dalam OnInitDialog
fungsi saya :
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);
}
}
Saya tidak tahu ke mana jawaban saya sebelumnya, kalau tidak saya akan menandai ini sebagai duplikat. #bingung.