MFC最近檔案列表的問題和改進方法

2021-08-23 11:40:20 字數 1108 閱讀 6333

在改進cnbook時發現mfc的乙個小問題。mfc框架支援最近檔案列表。我們不用寫一行**就可以實現檔案列表功能。

在資源檔案的選單資源中,id_file_mru_file1表示最近檔案列表:

menuitem "最近檔案",                 id_file_mru_file1,grayed

menuitem separator

mfc會在這個位置插入檔案列表。預設情況下,最近檔案列表是檔案選單的第一級選單項。在最近檔案比較多時,會造成檔案選單過長,不美觀。所以,有時我們希望把最近檔案列表放在子選單項中,例如:

popup "最近檔案(&f)"

begin

menuitem "最近檔案", id_file_mru_file1,grayed

endmenuitem separator

但執行結果卻不是我們所期待的:

通過檢視mfc的源**,我們可以找到負責檔案列表顯示的函式crecentfilelist::updatemenu。大概看一下這個函式,就會發現這個函式沒有考慮最近檔案列表放在子選單項中的情況。它總是在前乙個選單項的後面插入最近檔案的選單項,即使前乙個選單項在上一級。這就造成將id_file_mru_file1作為子選單的第一項時會發生錯誤。

todd c. gleason

在2023年使用vc5時就發現了這個問題並提出了解決辦法。不過,在vc8中這個問題依然存在。todd c. gleason的解決辦法就是:

好了,看看結果是不是我們想要的:

todd的**是用於vc5環境的,在vc6或vc8使用要做一些細微改動。另外在清空檔案列表後:

}mfc和todd的updatemenu函式都不能正確顯示。我也做了些修改。完整的例子可以從這裡

遊戲開發中的資料池問題和改進

之前開發遊戲的時候,為了能夠在任意地方都能訪問到資料,一般的做法是建立乙個資料池,然後把想要的資料全部放到資料池類中。資料池的寫法一般是建乙個名為datapool的單例類,通常情況下對單例的實現一般是這樣的 datapool.h pragma once class datapool datapool...

mFC下檔案的遞迴刪除和拷貝

mfc 中 刪除乙個非空資料夾 mfc 檔案操作 一 分類 c c 程式開發 2010 08 01 16 50 1107人閱讀 1 收藏舉報 mfc中提供了刪除資料夾的乙個封裝函式 removedirectory lpctstr lppathname 我們只要把要刪除的資料夾的路徑傳進去就可以刪除了...

MFC和QT混合程式設計的問題

最近本猿搞乙個mfc和qt混合程式設計的東西,經常出現這樣的錯誤 program files x86 microsoft visual studio 14.0 vc atlmfc include atlbase.3210 parse error at identifier 查了一下,發現網上資訊很少...