DSP

VC杂记 2011/05/22 WTL

2019-07-13 19:19发布

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) // this is a must, otherwise, no message handled by view. but WHY ?
    END_MSG_MAP()   ## 到目前(20:20),一个完整的WTL程序可运行,耗时约4小时 ##   9.最后的问题: Q:WHY不能有CMyMainWnd.cpp与CMyView.cpp? Q: CHAIN_MSG_MAP做了什么东东?