MFC 응용 프로그램의 도구 모음에있는 단추의 IMAGE (유형은 중요하지 않음)를 어떻게 변경해야합니까?
나는 이것이 어리석은 문제라는 것을 알고 있지만 지난 4 일 동안 붙어 있습니다. MFC 앱에서 툴바를 수정하는 것이 왜 그렇게 복잡한가요?
대화 기반의 New Visual Studio MFC 응용 프로그램 을 만듭니다 . 새로운 툴바 리소스를 생성 합니다 . 그런 다음 이미지 (png, 비트 맵, jpeg ...) 또는 도구 모음에서 사용할 유형을 어떻게 설정해야합니까?
크기를 w50과 h50으로 설정했고 버튼 내부에 그릴 수 있습니다. 그러나 이미지를 사용하는 방법을 찾을 수 없습니다.
대신 내가 방금 시도한이 2 개의 버튼이 작동한다면 비트 맵 형식과 png로 된 8 개의 이미지를 사용하고 싶습니다. MFC 응용 프로그램에서 PNG가 지원되지 않는다는 것을 읽었으므로 Bitmap으로 변환했습니다.

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);
}
}
이전 답변이 어디로 갔는지 모르겠습니다. 그렇지 않으면 이것을 중복으로 표시했을 것입니다. # 혼란.