分類:
一、 VC 6.0中的MFC ClassWizard從Visual Studio 2005開始已被分拆成兩個功能:
1. 對控件和菜單建立事件映射的功能
菜單視圖(View)->Solution Explorer或Ctrl+W,S中Resource Files樹下,在資源視圖(通過輕按兩下資源檔案*.rc可進入該視圖)選中某一個菜單或者控件,右鍵其中的某項,在彈出的菜單中選擇“添加事件處理程式”(Add Event Handler...),接下來就能找到VS 6中類似Message Maps的選項;
2. 添加窗體的消息映射
菜單視圖(View)->類視圖(Class View)或Ctrl+W,C進入類視圖單擊類,右鍵此類選中“屬性”(Properties),進入屬性界面,其上有事件(Events)、消息(Messages)、重寫(Overrides)等。對比VS 6沒有了Automation(以前稱作OLE自動化,COM IDispatch接口)選項。
從Visual Studio 2005開始有了MFC Class Wizard,不過是在類視圖中選中項目,右鍵Add->Class,選中MFC->MFC Class,點選Add後才出現的。
二、 自Visual Studio 2005環境起,字元串如"Microsoft"無法自動轉換為LPCTSTR類型,解決方法見微軟FAQ: Cannot convert from 'const char [..]' to 'LPCTSTR'。
三、 *View.h消息映射中
//{{AFX_MSG(*)
...
//}}AFX_MSG
這兩個AFX_MSG注釋宏不再存在,其中*代表建立的項目名。
同樣在*View.cpp消息映射中注釋宏AFX_MSG_MAP也不再存在了。
四、 連接配接*.lib。在VC6.0中是在Project->Setting中設定,而自Visual Studio 2005起,菜單Project->Properties,設定lib路徑(隻存在VS2005中):Configuration Properties->General->Addition Library Directories,添加lib:Configuration Properties->Linker->Input->Addition Dependences。
五、 Visual C++ Components目錄自VC 7.0就已被移除,原先在VC++ 6.0中的操作為:菜單Project->Add To Project->Components and Controls->Visual C++ Components->Popup Menu。.Net環境項目可以通過工具 (Tools) ->選擇工具箱項 (Choose Toolbox Items) 進行; MFC中添加Popup Menu可以通過向View類中添加消息WM_CONTEXTMENU進行。Splash Screen 元件也是以不存在,但可以參照Microsoft Visual Studio 9.0/Samples/1033/AllVCLanghageSamples.zip中拷貝出splash.cpp和splash.h這兩個檔案,加入到現有項目中或者對話框增強版。
六、 自Visual Studio 2003起,控件通知消息WM_INITDIALOG移到了重寫(Overrides)裡面,重寫裡的方法OnInitDialog()對應WM_INITDIALOG消息。
七、 自VS2005起對消息的檢查更為嚴格,VC6中沒問題的
ON_MESSAGE(message,OnMyMessage); |
傳回值必須規範為LRESULT
afx_msg LRESULT OnMyMessage(WPARAM, LPARAM); |
傳回值可以為TRUE或者FALSE。
八、 從Components裡添加ActiveX(基于COM)不再可行,自VS2005以來中需要Add Class->MFC Class From ActiveX Control,點Add,視窗Add Class From ActiveX Control Wizard顯現。
九、 ActiveX Control Test Container即tstcon32.exe,預設儲存在%programfiles%/Microsoft Visual Studio 9.0/Common7/Tools/目錄中,但從VS2008起已被移除,VS2005是最後一個包含它的版本,如想擷取它可以自行編譯TSTCON sample或者單獨擷取其早期版本。
【資源】
Activex、OLE、COM、OCX、DLL之間有什麼差別?
【附錄】
A:LPCTSTR
LPCTSTR = Long Pointer to a Const TCHAR STRing
LP表示長指針,這是為了相容Windows 3.1等16位作業系統遺留下來的,在win32中以及其它32位作業系統中,long指針和near指針及far修飾符都是為了相容的作用,沒有實際意義。
P表示是指針。
C表示是常量即const。
T在Win32環境中是一個_T宏,這個宏用來表示你的字元是否使用UNICODE。如果你的程式定義了UNICODE或者其它相關的宏,那麼這個字元或者字元串将被作為UNICODE字元串, 否則就是标準的ANSI字元串。
STR表示這個變量是字元串。
是以LPCTSTR就表示一個指向長位址的可以根據一些宏定義改變語義的固定字元串。
完整定義見WinNT.h: