1. 杂问
Q:所有conf-client的项目介绍及物理位置?
Q:Why在VA中搜索不到GetProcAddress函数?
Q:SourceInsight的使用?
Q:VC6如何处理LinuxC++工程?
Q:我们的UI库到底做过什么功能?
Q:My1stWTL70Win项目的所有文件为什么都看不见了?
A:估计是*.dsp文件里的SOURCE项因故丢失了(比如突然关机)
Q:我们的Component库似乎实现了类似COM++的什么功能?
Q:VC6中,如何把一些已经有的*.cpp/*.h放进project中?
A:在文件tab中,右击folder,选择Add Files to Folder
Q:Why在VA的symbol搜索里找不到CFrameWindowImpl?
2. WTL前期工作总结
* 使用WTL的wizard完成一个例子HelloWTL70Win,可以运行
* 参照Wizard的例子,手工完成过一个例子,My1stWTL70Win,有main framewindow,也有view
把这两个例子重新做一遍
3. HelloWTL70Win2
* 安装
E:/software-repository/cpp/vc/wtl70/AppWiz60/setup.js,执行即可
* 使用
安装WTL70 Wizard后,在File/New/Project中会有相关选项出现
* WTL基本过程总结
初始化WTL环境:
HRESULT hRes = ::CoInitialize(NULL);
实例化Loop instance并加入到_Module
实例化主窗口对象并显示(窗口类注册陷含完成了)
执行Loop中的消息循环:
theLoop.run();
删除Loop instance
清理WTL环境
_Module.Term();
::CoUninitialize();
注:必须定义一个CModuleApp对象:
CAppModule _Module;
4. My2ndWTL70Win项目
* build/compile Error
e:/projects-workspace/box-4.2-ucp-4.5-0429/src/uilib/wtl80/atlframe.h(22) : fatal error C1189: #error : atlframe.h requires atlapp.h to be included first
Error executing cl.exe.
注1:搞不清状况,重新建一个project,建立的时候选择empty win32。
5. My2ndWTL70Win2项目
使用File/New加入一个新的文件:My2ndWTL70Win2.cpp
结果仍然出现4.中的同样问题。
6. 让上次写的My1stWTL70Win项目恢复工作
* 把以前的项目目录变成My1stWTL70Win.bak
* 新建一个My1stWTL70Win
* 将所有文件copy到新目录
* 在文件栏里把相关文件加入project
* 处理MyView.cpp的一些问题后OK
7. 定位4.与5.中出现的问题
经反复检查,发现My1stWTL70Win项目中,有一个stdafx.h,其中内容如下:
// Change these values to use different versions
#define WINVER 0x0400
//#define _WIN32_WINNT 0x0400
#define _WIN32_IE 0x0400
#define _RICHEDIT_VER 0x0100
#include
#include
extern CAppModule _Module;
#include
所以,这是在WTL Wizard中设置的,通过这种方式包含了正确的头文件!
Note:也就是说,在WTL Wizard中,stdafx.h中会自动包含正确的头文件,而手工做的时候,需要自己去包含。 2011/11/15
8. 重做My2ndWTL70Win项目
* Error:
MyMainWnd.cpp
d:/study/wtl/hellowtl70/my1stwtl70win/mymainwnd.h(13) : error C2504: 'CFrameWindowImpl' : base class undefined
d:/study/wtl/hellowtl70/my1stwtl70win/mymainwnd.h(13) : error C2143: syntax error : missing ',' before '<'
d:/study/wtl/hellowtl70/my1stwtl70win/mymainwnd.h(13) : error C2059: syntax error : '<'
奇怪的是,当前project是My2ndWTL70Win,但报出的错误却在My1stWTL70Win!
把MyMainWnd.cpp从project去掉,并将其constuctor/deconstructor在MyMainWnd.h中实现,OK!
## 目前为止,一个空白的Window出来,但没有任何东东显示 ,下一步让Window里有view,并在view里显示东东 ##
* 定义MyView实例,Error
d:/study/wtl/hellowtl70/my2ndwtl70win/mymainwnd.h(15) : error C2146: syntax error : missing ';' before identifier 'MyView'
d:/study/wtl/hellowtl70/my2ndwtl70win/mymainwnd.h(15) : error C2501: 'CMyView' : missing storage-class or type specifiers
d:/study/wtl/hellowtl70/my2ndwtl70win/mymainwnd.h(15) : error C2501: 'MyView' : missing storage-class or type specifiers
增加头头文件引用:#include "myview.h", OK !
* 把MyView加进MyMainWnd,在CMyMainWnd::OnCreate里
LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
m_hWndClient = MyView.Create(m_hWnd, rcDefault, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, WS_EX_CLIENTEDGE);
//CMessageLoop* pLoop = _Module.GetMessageLoop();
//ATLASSERT(pLoop != NULL);
return 0;
}
* 在消息印射中一定加入CHAIN_MSG_MAP
DECLARE_FRAME_WND_CLASS(NULL, NULL)
BEGIN_MSG_MAP(CMyMainWnd)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
CHAIN_MSG_MAP(CFrameWindowImpl
END_MSG_MAP()
## 到目前(20:20),一个完整的WTL程序可运行,耗时约4小时 ##
9.最后的问题:
Q:WHY不能有CMyMainWnd.cpp与CMyView.cpp?
Q: CHAIN_MSG_MAP做了什么东东?