记得以前看过一本书,叫做《windows图形编程》,作者是Yuan Feng,机械工业出版社出版的,该书从Win32API开始介绍,讲述了Win32 GDI和DirectDraw API的技术细节,里面好多技术都研究得特别深入。最让我难忘的是它基本上用Win32API完成了一套类似于MFC的图形框架,不过与MFC不同的是,MFC里面消息映射机制还不算是完全的面向对象的,而它则完全用面向对象的技术方法实现了图形库。
最近上网查资料,偶然发现他最基础的那个窗口基类居然能在网上找到代码。真是喜出往外了。
看看他的用面向对象技术封装的KWindow类吧。呵呵,我就喜欢在类名前加个大写字母K了,真是与我爱好一样啊。
头文件KWindow.h:
- #if _MSC_VER > 1000
- #pragma once
- #endif // _MSC_VER > 1000
- // 以K开头来命名类,是希望与MFC有明显区别
- class KWindow
- {
- protected:
- // 处理WM_PAINT消息,由WndProc调用
- virtual void OnDraw(HDC hDC)
- {
- }
- // 处理WM_KEYDOWN消息,由WndProc调用
- virtual void OnKeyDown(WPARAM wParam, LPARAM lParam)
- {
- }
- // 真正的消息分发/处理函数
- virtual LRESULT WndProc(HWND hWnd, UINT uMsg,
- WPARAM wParam, LPARAM lParam);
- // API中注册的消息处理函数,不能是成员函数,因为成员函数有this指针
- static LRESULT CALLBACK WindowProc(HWND hWnd,
- UINT uMsg, WPARAM wParam, LPARAM lParam);
- // 派生类可以在这里修改窗口的属性,如图标、菜单等
- virtual void GetWndClassEx(WNDCLASSEX & wc);
- public:
- // 保存该窗口对应的HWND
- HWND m_hWnd;
- // m_hWnd 由CreateEx成员函数调用API函数CreateWindowEx赋值
- KWindow(void)
- {
- m_hWnd = NULL;
- }
- // destructor
- virtual ~KWindow(void)
- {
- }
- // 调用API函数CreateWindowEx创建窗口