MFC窗口工具栏创建失败,没有错误消息



我正在尝试动态地为我的MFC应用程序创建工具栏。我必须按照方法来完成这项任务。然而,工具栏没有显示在我的窗口,我没有得到错误信息…

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 CMainFrame : public CFramWnd {
protected:
  CToolBar m_wndToolBar;
  // ...
}

其余的代码实际上是不变的。我仍然不确定为什么它是这样工作的

最新更新