MFC Window 工具栏创建失败,没有错误消息
MFC Window toolbar creation fails with no error message
我正在尝试为我的 MFC 应用程序动态创建工具栏。我必须遵循此任务的方法。但是,工具栏没有出现在我的 window 中,我也没有收到任何错误消息...
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
// ...
CToolBar menubar;
if(!menubar.CreateEx(this, TBSTYLE_FLAT | TBSTYLE_LIST, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)) {
return -1;
}
TBBUTTON buttons[5] = {
{ -1, ID_TOOLBAR_FILE, TBSTATE_ENABLED, BTNS_AUTOSIZE | BTNS_DROPDOWN, { 0 }, 0, (INT_PTR)L"File" },
{ -1, ID_TOOLBAR_EDIT, TBSTATE_ENABLED, BTNS_AUTOSIZE | BTNS_DROPDOWN, { 0 }, 0, (INT_PTR)L"Edit" },
{ -1, ID_TOOLBAR_VIEW, TBSTATE_ENABLED, BTNS_AUTOSIZE | BTNS_DROPDOWN, { 0 }, 0, (INT_PTR)L"View" },
{ -1, ID_TOOLBAR_LAYOUT, TBSTATE_ENABLED, BTNS_AUTOSIZE | BTNS_DROPDOWN, { 0 }, 0, (INT_PTR)L"Layout" },
{ -1, ID_TOOLBAR_HELP, TBSTATE_ENABLED, BTNS_AUTOSIZE | BTNS_DROPDOWN, { 0 }, 0, (INT_PTR)L"Help" }
};
::SendMessage(menubar.GetSafeHwnd(), TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
::SendMessage(menubar.GetSafeHwnd(), TB_ADDBUTTONS, (WPARAM)5, (LPARAM)&buttons);
::SendMessage(menubar.GetSafeHwnd(), TB_AUTOSIZE, 0, 0);
::ShowWindow(menubar.GetSafeHwnd(), SW_SHOW);
}
这不会显示我的工具栏。为什么会这样?
我发现将工具栏声明为 class 成员可以解决问题。所以这就是我所做的:
class CMainFrame : public CFramWnd {
protected:
CToolBar m_wndToolBar;
// ...
}
其余代码几乎没有变化。我仍然不确定为什么会这样。
我正在尝试为我的 MFC 应用程序动态创建工具栏。我必须遵循此任务的方法。但是,工具栏没有出现在我的 window 中,我也没有收到任何错误消息...
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) {
// ...
CToolBar menubar;
if(!menubar.CreateEx(this, TBSTYLE_FLAT | TBSTYLE_LIST, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_FLYBY | CBRS_SIZE_DYNAMIC)) {
return -1;
}
TBBUTTON buttons[5] = {
{ -1, ID_TOOLBAR_FILE, TBSTATE_ENABLED, BTNS_AUTOSIZE | BTNS_DROPDOWN, { 0 }, 0, (INT_PTR)L"File" },
{ -1, ID_TOOLBAR_EDIT, TBSTATE_ENABLED, BTNS_AUTOSIZE | BTNS_DROPDOWN, { 0 }, 0, (INT_PTR)L"Edit" },
{ -1, ID_TOOLBAR_VIEW, TBSTATE_ENABLED, BTNS_AUTOSIZE | BTNS_DROPDOWN, { 0 }, 0, (INT_PTR)L"View" },
{ -1, ID_TOOLBAR_LAYOUT, TBSTATE_ENABLED, BTNS_AUTOSIZE | BTNS_DROPDOWN, { 0 }, 0, (INT_PTR)L"Layout" },
{ -1, ID_TOOLBAR_HELP, TBSTATE_ENABLED, BTNS_AUTOSIZE | BTNS_DROPDOWN, { 0 }, 0, (INT_PTR)L"Help" }
};
::SendMessage(menubar.GetSafeHwnd(), TB_BUTTONSTRUCTSIZE, (WPARAM)sizeof(TBBUTTON), 0);
::SendMessage(menubar.GetSafeHwnd(), TB_ADDBUTTONS, (WPARAM)5, (LPARAM)&buttons);
::SendMessage(menubar.GetSafeHwnd(), TB_AUTOSIZE, 0, 0);
::ShowWindow(menubar.GetSafeHwnd(), SW_SHOW);
}
这不会显示我的工具栏。为什么会这样?
我发现将工具栏声明为 class 成员可以解决问题。所以这就是我所做的:
class CMainFrame : public CFramWnd {
protected:
CToolBar m_wndToolBar;
// ...
}
其余代码几乎没有变化。我仍然不确定为什么会这样。