一、 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: