關於菜單欄中RecentFiles顯示爲彈出菜單

之前一直爲將RecentFiles中的路徑全部顯示的問題所困擾。

在csdn遇到一個大神推薦了一份代碼,得到絕大部分的參考。

貼出出處:http://download.csdn.net/download/schlafenhamster/5704807


因爲我的程序用的不是CMenu的菜單,而是CMFCMenuBar對象的菜單項


整理下處理思路:

1、在Capp.cpp中定義一個全局變量 CRecentFileList *g_pRecentFileList,在CMRUFApp::InitInstance()中的LoadStdProfileSettings();在這個函數中可以定義最近瀏覽文件的最大顯示數目,默認爲4。緊隨其後就是用我們定義的全局變量去承接 g_pRecentFileList=m_pRecentFileList。我們可以通過這個變量可以得到包含最近打開文件字符串的數組。

2、在菜單欄中添加一個菜單項,屬性Popup設置爲true,爲其添加一個子菜單項,id爲ID_FILE_MRU_1。

3、在MainFrm.cpp中定義最大最近打開文件按鈕的ID號,即#define ID_FILE_MRU_4  ID_FILE_MRU_1+4。爲CMainFrame類添加一個OnShowPopupMenu()處理消息,以及最近打開文件的按鈕處理消息ON_COMMAND_RANGE(ID_FILE_MRU_1,ID_FILE_MRU_4, OnFileMru)

(這裏要說明的是,因爲在OnInitMenuPopup()中一直處理出問題,就選擇在OnShowPopupMenu裏面處理)


4、下面就是在OnShowPopupMenu裏處理了

if( pMenuPopup && pMenuPopup->GetMenuBar()->CommandToIndex(ID_FILE_MRU_1) > =0 ) //這裏面的判斷pMenuPopup 爲真很關鍵,不然程序會掛

{

int all=g_pRecentFileList->GetSize();//default = 4
int nID;
CString str;
for(int j=0; j < all; ++j)
{
str=g_pRecentFileList->m_arrNames[j];
pMenuPopup->InsertItem(CMFCToolBarMenuButton(ID_FILE_MRU_1+j,NULL,-1,str),j); 
}

}

這樣就能達到顯示的效果了,但還是有很多需要改進的地方。好比彈出菜單項中有個原先設置的ID爲ID_FILE_MRU_1的菜單項(想着把它刪掉,或者替換掉)。

還有各個按鈕的響應事件;基本上得到最近打開文件的文件名一般就得到了一切。!!

有建議留下啊。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章