学习WTL快半年了,但是实际工作中根本用不到。一是因为公司不允许,二是有效的资源还比较少。通常情况下,自娱自乐的时候我还是选择WTL来做界面。在这里,我把平时学习实践过程中的东西(思想)保留下来,供大家参考,也可以互相进步。
这篇文章可能会很长很长,但是划分了4个模块:
- 一.WTL的使用
- 二.WTL的结构
- 三.WTL的剖析
- 四.WTL的资源
- 五.WTL的项目(我自己写的哦)
选择WTL很大部分原因都是因为对模板的迷恋,不知为啥,C++的魅力尽然在模板!好,开始我们的征程吧。
一 WTL的使用
3.教程:
二 WTL的结构
WTL的类大致分为:
1.框架窗口:CFrameWindowImpl、CMDIFrameWindowImpl
2.控件封装: CButtonT、CListViewCtrl
3.GDI封装: CDCT、CMenuT
4.特殊界面封装:CSplitterWindow、CUpdateUI、CCustomDraw
5.实用工具类:CString、CRect
6.宏:BEGIN_MSG_MAP、END_MSG_MAP
先来看看令人头疼的“宏”介绍吧:
1.在atlcrack.h中,BEGIN_MSG_MAP_EX和END_MSG_MAP_EX用来处理窗口消息的派发
1: // Note about message maps with cracked handlers:
2: // For ATL 3.0, a message map using cracked handlers MUST use BEGIN_MSG_MAP_EX.
3: // For ATL 7.0 or higher, you can use BEGIN_MSG_MAP for CWindowImpl/CDialogImpl derived classes,
4: // but must use BEGIN_MSG_MAP_EX for classes that don't derive from CWindowImpl/CDialogImpl.
5:
6: #define BEGIN_MSG_MAP_EX(theClass) /
7: public: /
8: /* 在UI类中,声明一个m_bMsgHandled的变量,来判断消息是否已处理,是否需要传给基类*/ /
9: BOOL m_bMsgHandled; /
10: /* "handled" management for cracked handlers */ /
11: BOOL IsMsgHandled() const /
12: { /