ShowWindow (hwnd,iCmdShow) Update Window (hwnd); while (GetMessage (&msg,NULL,0,0)) TranslateMessage (&msg) DispatchMessage (&msg); return msg.wParam
ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg) ; DispatchMessage (&msg) ; } return msg.wParam ; }
LRESULT CALLBACK WndProc (HWND hwnd,UINT message, WPARAM wParam,LPARAM IParam) HDC hdc; PAINTSTRUCT ps RECT rect; switch (message) { case WM CREATE: PlaySound (TEXT ("hellowin.wav"),NULL,SND FILENAME SND ASYNC); return 0; case WM PAINT: hdc BeginPaint (hwnd,&ps); GetClientRect (hwnd,&rect); DrawText (hdc,TEXT ("Hello,Windows 98!"),-1,&rect, DT SINGLELINE DT CENTER DT VCENTER); EndPaint (hwnd,&ps); return 0; case WM DESTROY: PostQuitMessage (0); return 0; } return DefWindowProc (hwnd,message,wParam,IParam);
LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc ; PAINTSTRUCT ps ; RECT rect ; switch (message) { case WM_CREATE: PlaySound (TEXT ("hellowin.wav"), NULL, SND_FILENAME | SND_ASYNC) ; return 0 ; case WM_PAINT: hdc = BeginPaint (hwnd, &ps) ; GetClientRect (hwnd, &rect) ; DrawText (hdc, TEXT ("Hello, Windows 98!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER) ; EndPaint (hwnd, &ps) ; return 0 ; case WM_DESTROY: PostQuitMessage (0) ; return 0 ; } return DefWindowProc (hwnd, message, wParam, lParam) ; }
三、总体考虑 实际上,每一个Windows程序代码中都包括 HELLOWIN.C程序的大部分。没人能真正记 住编写此代码的全部语法;通常,Windows程 序员在开始一个新程序时总是复制一个现有的 程序,然后再做相应的修改。上面提到, HELLOWIN将在其窗口的中央显示文本串。 那不完全正确。文本实际显示在程序客户区的中央,它在图中是 标题栏和边界范围内的大片白色区域。这种特性对我们很重要;客 户区就是程序自由绘图并且向用户交付可观输出的窗口区域。如果 您认真思考一下,将会发现虽然只有80行代码,这个窗口却令人惊 讶地具有许多功能。您可以用鼠标按住标题栏,在屏幕上移动窗口: 可以按住边框,改变窗口的大小。在窗口大小改变时,程序自动地 将“hello,windows98!”文本串重新定位在客户区域的中央。您 可以按最大化按钮,放大HELLOWIN以充满整个屏幕;也可以按最 小化按钮,将程序压缩为一个图标
三、总体考虑 实际上,每一个Windows程序代码中都包括 HELLOWIN.C程序的大部分。没人能真正记 住编写此代码的全部语法;通常,Windows程 序员在开始一个新程序时总是复制一个 现有的 程序,然后再做相应的修改。上面提到, HELLOWIN将在其窗口的中央显示文本串。 那不完全正确。文本实际显示在程序客户区的中央,它在图中是 标题栏和边界范围内的大片白色区域。这种特性对我们很重要;客 户区就是程序自由绘图并且向用户交付可观输出的窗口区域。如果 您认真思考一下,将会发现虽然只有80行代码,这个窗口却令人惊 讶地具有许多功能。您可以用鼠标按住标题栏,在屏幕上移动窗口; 可以按住边框,改变窗口的大小。在窗口大小改变时,程序自动地 将“hello,windows 98!”文本串重新定位在客户区域的中央。您 可以按最大化按钮,放大HELLOWIN以充满整个屏幕;也可以按最 小化按钮,将程序压缩为一个图标
您可以从系统菜单(标题栏最左端的小图际)中 执行所有选项;也可以通过从系统莱单中选择 Close选项,或者通过单未标题栏最右端的关闭 按钮,或者通过双击标题栏最左端的图标来关闭 窗口以终止程序的执行。 当然,我们首先要从整体上看一下。HELLOWIN.C也有一个 WinMaini函数,但它还有另外一个函数,名为WndProc。这就是窗 口过程。注意,在HELLOWIN,C中没有调用WndProc的代码。然 而,在WinMain中有对WndProc的声明,这就是函数要在程序顶部 附近声明的原因
您可以从系统菜单(标题栏最左端的小图际)中 执行所有选项;也可以通过从系统莱单中选择 Close选项,或者通过单未标题栏最右端的关闭 按钮,或者通过双击标题栏最左端的图标来关闭 窗口以终止程序的执行。 当然,我们首先要从整体上看一下。HELLOWIN.C也有一个 WinMain函数,但它还有另外一个函数,名为WndProc。这就是窗 口过程。注意,在HELLOWIN,C中没有调用 WndProc的代码。然 而,在 WinMain中有对WndProc的声明,这就是函数要在程序顶部 附近声明的原因
1.Windows函数调用 HELLOWIN至少调用了I8个Windows函数。下面以它们在 HELLOWIN,C中出现的次序列出这些函数以及各自的简明描述: LoadIcon加载图标供程序使用: LodCursor加载鼠标指针供程序使用: GetStockObject获取一个图形对象,在这个例子中,是获取绘制窗口背景的刷子: RegisterClass为程序窗口注册窗口类; MessageBox显示消息框: Create Window根据窗口类创建一个窗口: ShowWindow 在屏幕上显示窗口: Update Window指示窗口刷新自身: GetMessage从消息队列中获取消息: TranslateMessage转换某些键盘消息: DispatchMessage将消息发送给窗口过程; PlaySound播放一个声音文件: BeginPaint开始窗口绘制: GetClientRect获取窗口客户区的尺寸: DrawText显示文本串; EndPaint结束窗口绘制; PostQuitMessage在消息队列中插入一条“退出”消息: DefWindowProc执行默认的消息处理。 这些函数均在平台SDK文档中说明,并在不同的头文件中声明,其中绝大多数在 WINUSER.H中声明
1. Windows 函数调用 HELLOWIN至少调用了18个Windows函数。下面以它们在 HELLOWIN,C中出现的次序列出这些函数以及各自的简明描述: LoadIcon 加载图标供程序使用; LodCursor 加载鼠标指针供程序使用; GetStockObject 获取一个图形对象,在这个例子中,是获取绘制窗口背景的刷子; RegisterClass为程序窗口注册窗口类; MessageBox 显示消息框; CreateWindow 根据窗口类创建一个窗口; ShowWindow 在屏幕上显示窗口; UpdateWindow 指示窗口刷新自身; GetMessage 从消息队列中获取消息; TranslateMessage转换某些键盘消息; DispatchMessage将消息发送给窗口过程; PlaySound 播放一个声音文件; BeginPaint 开始窗口绘制; GetClientRect 获取窗口客户区的尺寸; DrawText 显示文本串; EndPaint 结束窗口绘制; PostQuitMessage 在消息队列中插入一条“退出”消息; DefWindowProc 执行默认的消息处理。 这些函数均在平台SDK文档中说明,并在不同的头文件中声明,其中绝大多数在 WINUSER.H中声明