八宝书库 > 文学其他电子书 > 深入浅出MFC第2版(PDF格式) >

第70部分

深入浅出MFC第2版(PDF格式)-第70部分

小说: 深入浅出MFC第2版(PDF格式) 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






ON_UPDATE_MAND_UI        增加消息映射表中的项目         第3章、第9章 



END_MESSAGE_MAP                    结束消息映射表的建置           第3章、第9章 



事实上,与其它MFC Programming 书籍相比较,本书最大的一个特色就是,要把上述 



这些MFC 宏的来龙去脉交待得非常清楚。我认为这对于撰写MFC 程序是非常重要 



的一件事。 



                                                                           337 


…………………………………………………………Page 400……………………………………………………………

                  第篇    湷觥 FC  程式設計 



            MFC 数据类型 (data types) 



                   下面所列的这些数据类型,常常出现在MFC 之中。其中的绝大部份都和一般的Win32 



                   程序(SDK 程序)所用的相同。 



                   下面这些是和Win32 程序(SDK 程序)共同使用的数据类型: 



                   数据类型                       意义 



                   BOOL            Boolean 值(布尔值,不是TRUE 就是FALSE ) 



                   BSTR            32…bit 字符指针 



                   BYTE            8…bit 整数,未带正负号 



                   COLORREF  32…bit 数值,代表一个颜色值 



                   DWORD        32…bit 整数,未带正负号 



                   LONG           32…bit 整数,带正负号 



                   LPARAM      32…bit 数值,做为窗口函数或callback  函数的一个参数 



                   LPCSTR        32…bit 指针,指向一个常数字符串 



                   LPSTR          32…bit 指针,指向一个字符串 



                   LPCTSTR     32…bit 指针,指向一个常数字符串。此字符串可移植到Unicode 和DBCS  (双 



                               字节字集) 



                   LPTSTR        32…bit 指针,指向一个字符串。此字符串可移植到Unicode 和DBCS  (双位 



                               组字集) 



                   LPVOID        32…bit 指针,指向一个未指定类型的资料 



                   LPRESULT     32…bit 数值,做为窗口函数或callback  函数的回返值 



                   UINT        在Win16  中是一个16…bit 未带正负号整数,在Win32  中是一个32…bit 



                                未带正负号整数。 



                   WNDPROC    32…bit 指针,指向一个窗口函数 



                   WORD            16…bit 整数,未带正负号 



                   WPARAM    窗口函数的callback  函数的一个参数。在Win16  中是16 bits,在Win32 



                                中是32 bits 。 



338 


…………………………………………………………Page 401……………………………………………………………

                                                   第5章    總觀Application Framework  



 下面这些是MFC 独特的数据类型: 



 数据类型                                        意义 



 POSITION    一个数值,代表collection 对象(例如数组或串行)中的元素位置。常使用 



             于MFC collection classes 。 



 LPCRECT    32…bit 指针,指向一个不变的RECT 结构。 



 前面所说那些MFC 数据类型与C++ 语言数据类型之间的对应,定义于WINDEF。H 



 中。我列出其中一部份,并且将不符合(_MSC_VER 》= 800) 条件式的部份略去。 



#define NULL    0 



#define far                //侯俊杰注:Win32 不再有far 或near memory model, 

#define near               // 而是使用所谓的flat model。pascall 函数调用习惯 

#define pascal __stdcall  //也被stdcall 函数调用习惯取而代之。 



#define cdecl _cdecl 

#define CDECL _cdecl 

                                                                                    、 



#define CALLBACK      __stdcall  // 侯俊杰注:在Windows programming 演化过程中 

#define WINAPI       __stdcall  // 曾经出现的PASCAL、CALLBACK、WINAPI 

#define WINAPIV      __cdecl    // 

                                    APIENTRY,现在都代表相同的意义,就是stdcall 

#define APIENTRY     WINAPI     // 函数调用习惯。 

#define APIPRIVATE  __stdcall 

#define PASCAL       __stdcall 



#define FAR          far 

#define NEAR         near 

#define CONST        const 



typedef unsigned long             DWORD; 

typedef int                       BOOL; 

typedef unsigned char             BYTE; 

typedef unsigned short            WORD; 

typedef float                     FLOAT; 

typedef FLOAT                     *PFLOAT; 

typedef BOOL near                 *PBOOL; 

typedef BOOL far                  *LPBOOL; 

typedef BYTE near                 *PBYTE; 

typedef BYTE far                  *LPBYTE; 



                                                                                        339 


…………………………………………………………Page 402……………………………………………………………

                   第篇    湷觥 FC  程式設計 



                   typedef int near           *PINT; 

                   typedef int far            *LPINT; 

                   typedef WORD near           *PWORD; 

                   typedef WORD far           *LPWORD; 

                   typedef long far           *LPLONG; 

                   typedef DWORD near         *PDWORD; 

                   typedef DWORD far          *LPDWORD; 

                   typedef void far           *LPVOID; 

                   typedef CONST void far    *LPCVOID; 



                   typedef int                INT; 

                   typedef unsigned int        UINT; 

                   typedef unsigned int      *PUINT; 



                    /* Types use for passing & returning polymorphic values */ 

                   typedef UINT WPARAM; 

                   typedef LONG LPARAM; 

                   typedef LONG LRESULT; 



                   typedef DWORD   COLORREF; 

                   typedef DWORD   *LPCOLORREF; 



                   typedef struct tagRECT 

                    { 

                       LONG    left; 

                       LONG    top; 

                       LONG    right; 

                       LONG    bottom; 

                    } RECT; *PRECT; NEAR *NPRECT; FAR *LPRECT; 



                   typedef const RECT FAR* LPCRECT; 



                   typedef struct tagPOINT 

                    { 

                       LONG  x; 

                       LONG  y; 

                    } POINT; *PPOINT; NEAR *NPPOINT; FAR *LPPOINT; 



                   typedef struct tagSIZE 

                    { 

                       LONG        cx; 

                       LONG        cy; 

                    } SIZE; *PSIZE; *LPSIZE; 



340 


…………………………………………………………Page 403……………………………………………………………

第5章    總觀Application Framework  



                                       341 


…………………………………………………………Page 404……………………………………………………………

                第篇    湷觥 FC  程式設計 



342 


…………………………………………………………Page 405……………………………………………………………

                                     第6章    MFC 程式的生死因果 



第6章 MFC 程序设计导论 



           MFC 程序的生死因果 



            理想如果不向实际做点妥协,理想就会归于尘土。 



      中华民国还得十次革命才得建立,对象导向怎能把一切传统都抛开。 



以传统的C/SDK 撰写Windows 程序,最大的好处是可以清楚看见整个程序的来龙去脉 



和消息动向,然而这些重要的动线在MFC 应用程序中却隐晦不明,因为它们被 



Application Framework 包起来了。这一章主要目的除了解释MFC 应用程序的长像,也 



要从MFC 源代码中检验出一个Windows 程序原本该有的程序进入点(WinMain)、视 



窗类别注册(RegisterClass )、窗口产生(CreateWindow)、消息循环(Message Loop )、 



窗口函数(Window Procedure )等等动作,抽丝剥茧彻底了解一个MFC 程序的诞生与 



结束,以及生命过程。 



为什么要安排这一章?了解MFC  内部构造是必要的吗?看电视需要知道映射管的原理 



吗?开汽车需要知道传动轴与变速箱的原理吗?学习MFC 不就是要一举超越烦琐的 



Windows API ?啊,厂商(不管是哪一家)广告给我们的印象就是,藉由可视化的工具我 



们可以一步登天,基本上这个论点正确,只是有个但书:你得学会操控Application 



Framework 。 



想象你拥有一部保时捷,风驰电挚风光得很,但是引擎盖打开来全傻了眼。如果你懂汽 



车内部运作原理,那么至少开车时「脚不要老是含着离合器,以免来令片磨损」这个道 



理背后的原理你就懂了,「踩煞车时绝不可以同时踩离合器,以免失去引擎煞车力」这 



个道理背后的原理你也懂了,甚至你的保时捷要保养维修时或也可以不假外力自己来。 



                                                          343 


…………………………………………………………Page 406……………………………………………………………

                第篇    湷觥 FC  程式設計 



                不要把自己想象成这场游戏中的后座车主,事实上作为这本技术书籍的读者的你,应该 



                是车厂师傅。 



                好,这个比喻不见得面面俱到,但起码你知道了自己的身份。 



                题外话:我的朋友曾铭源(现在纽约工作)写信给我说:『最近项目的压力大,人员纷 



                纷离职。接连一个多礼拜,天天有人上门面谈。人事部门不知从哪里找来这些阿哥,号 



                称有三年的SDK/MFC 经验,结果对起话来是鸡同鸭讲,WinMain 和Windows Procedure 



                都搞不清楚。问他什么是message handler ?只会在ClassWizard 上click、click、click !!! 拜 



                Wizard 之赐,人力市场上多出了好几倍的VC/MFC 程序员,但这些「Wizard 通」我们 



                可不敢要』。 



               以raw Windows API 开发程序,学习的 



               路径是单纯的,条理分明的,你一定先                          》 



               从程序进入点开始,然后产生窗口类                            various Windows APIs 。。。 



               别,然后产生窗口,然后取得消息,然 

                                                     Window Procedure 

               后分辨消息,然后决定如何处理消息。 



               虽然动作繁琐,学习却容易。 

                                               GetMessage/DispatchMessage 



                                          CreateWindow 



                                    RegisterClass 



                               WinMain 



344 


…………………………………………………………Page 407……………………………………………………………

                                                                                第6章    MFC 程式的生死因果 



                                    开发程序,一开始很快速,因为                          

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的