MFCアプリケーションのツールバーのボタンのIMAGE(タイプは関係ありません)をどのように変更する必要がありますか?
私はこれが愚かな問題であることを知っていますが、私は過去4日間それで立ち往生しています。MFCアプリのツールバーを変更するだけで複雑なのはなぜですか?
私は、新しいVisual Studioの作成MFCアプリケーションでダイアログベースを。新しいツールバーリソースを作成します。次に、ツールバーで使用する画像(png、ビットマップ、jpeg ...)またはその他のタイプをどのように設定する必要がありますか?
サイズをw50とh50に設定し、ボタンの内側に描画できます。しかし、私は画像を使用する方法を見つけることができません。
代わりに、私が試したばかりのこの2つのボタンが機能する場合は、ビットマップ形式とpngの8つの画像を使用します。PNGがMFCアプリケーションでサポートされていないことをどこかで読んだので、ビットマップに変換しました。

次のOnInitDialog()
方法で、ダイアログアプリにツールバーをロードします。
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);
}
誰かが私を助けてくれたら本当にありがたいです。画像形式は関係ありません。ツールバーに画像を入れたいだけです。
これは現在私のアプリです:

更新:私はこの方法を試しました。ID_BUTTON_1
ツールバーの最初のボタンと私がその画像を変更しようとした場合。ただし、これでは、ツールバーの最初のボタンの場所にボタンがありません。私は間違っているのですか?
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));
回答
私は最近これに答えました、そしてもう私の答えを見つけることができません。ツールバーにはPNG画像を使用できます。内部的には、リソースエディタのBMPバージョンを使用して、イベントハンドラなどを作成します。ただし、PNGをリソースとして追加し、ダイアログにロードすることができます。
たとえば、OnInitDialog
関数でこれを呼び出します。
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);
}
}
以前の回答がどこに行ったのかわかりません。そうでなければ、これに重複のフラグを付けていたでしょう。#confused。