1、例子备注LmClassLmObject表示类型本身不与范围前缀结合使用IInterface 接口IUnknown注:类名前缀改为Lm,对于非全局的类最好有语义表示其所属模块。类的实例命名与类名大致相同,只是类名语义表示类的通用含义,而类名表示此实例的具体语义。如类名LmSketPoint表示草图点的类定义,而它的两个实例 _StartPoint,_EndPoint分别代表起点和终点的语义。类的实例命名带上前缀_。特殊约定:a MouseTool的派生类的前缀为_Mt.b 对话框类的前缀为CDlg.c 橡皮条类的前缀为_Rb.范围前缀:前缀g_全局作用域g_Serversm_成员变量m_pDoc
2、, l_局部作用域l_strName少用编程时尽量少用全程变量,对于全程变量还应在类型前缀后加上如下关键字:特征模块 : Fea草图模块 Sket装配模块 Asm工程图模块 :Lay曲面模块 Surf界面模块 Ui常用的一般数据类型的前缀内存规格描述chchar8-bit characterchGradeTCHAR16-bit character if _UNICODE is definedchNamebBOOLBoolean valuebEnablednintInteger (size dependent on operating system)nLengthUINTUnsigned val
3、ue (size dependent on operating system)wWORD16-bit unsigned valuewPoslLONG32-bit signed integerlOffsetdwDWORD32-bit unsigned integerdwRangep*Ambient memory model pointerpDoclpFAR*Far pointerlpDoclpszLPSTR32-bit pointer to character stringlpszNameLPCSTR32-bit pointer to constant character stringLPCTS
4、TR32-bit pointer to constant character string if _UNICODE is definedhhandleHandle to Windows objecthWndlpfn(*fn)()callbackFar pointer to CALLBACK functionlpfnAbort常用Windows对象名称缩写Windows 对象例子变量MFC类例子对象HWNDhWnd;CWnd*pWnd;HDLGhDlg;CDialog*pDlg;HDChDC;CDC*pDC;HGDIOBJhGdiObj;CGdiObject*pGdiObj;HPENhPen;C
5、Pen*pPen;HBRUSHhBrush;CBrush*pBrush;HFONThFont;CFont*pFont;HBITMAPhBitmap;CBitmap*pBitmap;HPALETTEhPalette;CPalette*pPalette;HRGNhRgn;CRgn*pRgn;HMENUhMenu;CMenu*pMenu;hCtl;CStatic*pStatic;CButton*pBtn;CEdit*pEdit;CListBox*pListBox;CComboBox*pComboBox;Windows应用程序的基本运行机制与HelloWin程序详解总的来说最基本的Windows应用程
6、序的运行执行顺序总是以如下的基本顺序执行的。顺序结构:调用WinMain函数开始执行-定义窗口类-初始化窗口类-窗口的实例化-通过消息循环获取消息并将消息发送给消息处理函数做出相应的操作由于windows应用程序运行的逻辑结构特殊所以代码的详细解释笔者就不把程序于叙述分开了了,这样有利于阅读与分析。分析代码如下:/程序作者:管宁/站点:dev-/所有稿件均有版权,如要转载,请务必注明出处和作者#include #pragma comment(lib,winmm.lib)/为了要播放声音,必须导入这个库LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, L
7、PARAM);int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow) HINSTANCE 类型的含义为实例句柄。 hInstance 事实上就是当前应用程序自身的标识代号,代号通常都是一个32位整数。 hPrevInstance 与过去的16位应用程序有关系,表示指向前一个实例的句柄。 PSTR 类型的含义是指向以0结尾的字符串指针。 szCmdLine 前面的sz同样是表示指向以0结尾的字符串指针,这个对象用于保存命令行。 最后iCmdShow是一个整型数据,
8、标记了程序最初的显示状态。 为SW_SHOWNORAML的时候为一般大小显示方式。 为SW_SHOWMAXIMIZED的时候为最大化显示方式。 为SW_SHOWMINNOACTIVE的时候程序将显示在任务栏上。 static char szAppName = TEXT(HelloWin);/预先定义一个c风格字符串,稍后用于设置窗口类名称。 WNDCLASS wndclass;/定义窗口类对象 在这里不得不说一下的是,窗口类事实上是struct结构体,内部有10个分量,他们是用来于初始化窗口类对象而用的。 这个结构体在winuser.h头文件中定义,从方式上来说,分为ASCII版的WNDCLA
9、SSA和Unicode版的WNDCLASSW两个。 typedef struct tagWNDCLASSA UINT style; WNDPROC lpfnWndProc; int cbClsExtra; cbWndExtra; HINSTANCE hInstance; HICONhIcon; HCURSOR hCursor; HBRUSH hbrBackground; LPCSTR lpszMenuName; lpszClassName; WNDCLASSA, *PWNDCLASSA, NEAR *NPWNDCLASSA, FAR *LPWNDCLASSA; typedef struct t
10、agWNDCLASSW style; lpfnWndProc; hInstance; hIcon; hbrBackground; LPCWSTR lpszMenuName; lpszClassName; WNDCLASSW, *PWNDCLASSW, NEAR *NPWNDCLASSW, FAR *LPWNDCLASSW;/- 窗口类对象初始化过程 - wndclass.style = CS_HREDRAW | CS_VREDRAW; /* 设置窗口类对象的样式风格,CS_HREDRAW | CS_VREDRAW这两个值是通过位运算的与运算结合起来的。 表示了窗口在改变了水平和垂直大小的时候,
11、窗口要强迫刷新。 这些通过define定义的标识,可以在WinUser.h头文件中找到。 #define CS_VREDRAW0x0001 #define CS_HREDRAW0x0002 #define CS_DBLCLKS0x0008 #define CS_OWNDC0x0020 #define CS_CLASSDC0x0040 #define CS_PARENTDC 0x0080 #define CS_NOCLOSE 0x0200 #define CS_SAVEBITS 0x0800 #define CS_BYTEALIGNCLIENT 0x1000 #define CS_BYTEALI
12、GNWINDOW 0x2000 #define CS_GLOBALCLASS 0x4000 #define CS_IME 0x00010000 wndclass.lpfnWndProc = WndProc ;/指定窗口的处理函数为WndProc,WndProc将处理windows消息。 wndclass.cbClsExtra = 0;/窗口类无扩展 wndclass.cbWndExtra/窗口实例无扩展 wndclass.hInstance = hInstance;/指定当前应用程序实例句柄,也就是程序当前的标识号。 wndclass.hIcon = LoadIcon (NULL,IDI_AP
13、PLICATION); 通过LoadIcon函数设置应用程序窗口标题的icon图标。 HICON LoadIcon(HINSTANCE hInstance,LPCTSTR lpIconName); 函数返回HICON类型的图标句柄。 第一个参数表示当前应用程序的窗口句柄,第二个参数表示图标。 默认状态下,第一个参数为NULL,第二个为IDI_APPLICATION,表示使用系统默认提供的图标,可以在WinUser.h头文件中找到。 #define IDI_APPLICATION 32512 */ wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
14、 通过LoadCursor函数设置应用程序窗口光标样式。 HCURSOR LoadCursor(HINSTANCE hInstance,LPCTSTR lpCursorName); 函数返回HCURSOR类型的光标句柄。 第一个参数表示当前应用程序的窗口句柄,第二个参数表示光标。 默认状态下,第一个参数为NULL,第二个为IDC_ARROW,表示使用系统默认提供的光标,可以在WinUser.h头文件中找到。 #define IDC_ARROW MAKEINTRESOURCE(32512) wndclass.hbrBackground = (HBRUSH)GetStockObject (WHIT
15、E_BRUSH); 通过GetStockObject函数设置应用程序窗口的背景颜色。 HGDIOBJ GetStockObject(int fnObject); 函数返回HCURSOR类型的GDI对象句柄,为了程序能够正确执行,必须把HGDIOBJ类型强制转换成HBRUSH画刷句柄。 参数表示当前使用的画刷颜色。 这些常量的定义可以在WinGDI.h头文件中找到。 #define WHITE_BRUSH 0 #define LTGRAY_BRUSH 1 #define GRAY_BRUSH 2 #define DKGRAY_BRUSH 3 #define BLACK_BRUSH 4 #defi
16、ne NULL_BRUSH 5 #define HOLLOW_BRUSH NULL_BRUSH wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName;/窗口类对象的名称/- RegisterClass (&wndclass); 注册窗口类,参数为窗口类对象的指针。 函数原形为: ATOM RegisterClass(CONST WNDCLASS *lpWndClass);/- 实例化过程 - HWND hwnd ; /创建用于保存窗口句柄的对象,窗口句柄是系统识别不同窗口的依据,它只是个代号。 hwnd = CreateWindow( szAppName, / 窗口类名称 你好世界, / 窗口标题 WS_OVERLAPPEDWINDOW, / 窗口样式 CW_USEDEFAULT, / 初始的窗口x轴位置 / 初始的窗口y轴位置 / 初始的窗口x轴大小 / 初始的窗口y轴大小 NULL, / 父窗口句柄
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1