2011年11月20日 星期日

Keep Menu Expand - MFC

在VS 2008 Feature Pack後MFC的menu有了expand的style,VS 2010進一步整合feature pack的GUI行為在建立專案時就可以選擇新的menu style。
不過新功能有一個很不好用的地方,不管你應用程式中的選單數量是多還是少,都會預設的收折(collapse)。
選單收折的新功能是由下面這段程式碼所引發

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    ...

    CList< UINT, UINT> lstBasicCommands;

    lstBasicCommands.AddTail(ID_FILE_NEW);
    lstBasicCommands.AddTail(ID_FILE_OPEN);
    lstBasicCommands.AddTail(ID_FILE_SAVE);
    lstBasicCommands.AddTail(ID_FILE_PRINT);
    lstBasicCommands.AddTail(ID_APP_EXIT);
    lstBasicCommands.AddTail(ID_EDIT_CUT);
    lstBasicCommands.AddTail(ID_EDIT_PASTE);
    lstBasicCommands.AddTail(ID_EDIT_UNDO);
    lstBasicCommands.AddTail(ID_APP_ABOUT);
    lstBasicCommands.AddTail(ID_VIEW_STATUS_BAR);
    lstBasicCommands.AddTail(ID_VIEW_TOOLBAR);

    CMFCToolBar::SetBasicCommands(lstBasicCommands);
}

CMFCToolBar::SetBasicCommands是採正面列表的方式,指定基本選單。這些基本選單在使用者點選選單時,會保持可視狀態而不會被隱藏,而不在清單中的選單則自動收藏起來。因此如果你的選單是不想被收折起來,只要把選單的ID加入到lstBasicCommands中即可。 如果應用程式不希望有收折的功能,則只要把這段程式刪除即可。