友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

C语言实例教程(PDF格式)-第30章

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






hWnd=CreateWindow (〃SdkDemo1〃; // 窗口类名  



〃第一个Win32 SDK应用程序〃; // 窗口标题  



WS_OVERLAPPEDWINDOW; // 窗口样式  



CW_USEDEFAULT; // 初始化 x 坐标  



CW_USEDEFAULT; // 初始化 y 坐标  



CW_USEDEFAULT; // 初始化窗口宽度  


…………………………………………………………Page 139……………………………………………………………

CW_USEDEFAULT; // 初始化窗口高度  



NULL; // 父窗口句柄  



NULL; // 窗口菜单句柄  



hInstance; // 程序实例句柄  



NULL); // 创建参数  



// 显示窗口  



ShowWindow(hWnd;SW_SHOW);  



// 更新主窗口客户区  



UpdateWindow(hWnd);  



// 开始消息循环  



while (GetMessage(&msg;NULL;0;0))  



{  



TranslateMessage(&msg);  



DispatchMessage(&msg);  



}  



return msg。wParam;  



}  



// WndProc 主窗口过程  



LRESULT WINAPI WndProc (HWND hWnd;  



UINT msg;  



WPARAM wParam;  



LPARAM lParam)  



{  



HDC hdc;  



RECT rc;  



HPEN hPen;hPenOld;  


…………………………………………………………Page 140……………………………………………………………

HBRUSH hBrush;hBrushOld;  



switch (msg)  



{  



case WM_PAINT:  



hdc=GetDC(hWnd);  



GetClientRect(hWnd;&rc);  



hPen=CreatePen(PS_SOLID;0;RGB(0;0;0));  



hBrush=CreateHatchBrush(HS_DIAGCROSS;RGB(0;0;0));  



hPenOld=SelectObject(hdc;hPen);  



hBrushOld=SelectObject(hdc;hBrush);  



Ellipse(hdc;rc。left;rc。top;rc。right;rc。bottom);  



SelectObject(hdc;hPenOld);  



SelectObject(hdc;hBrushOld);  



ReleaseDC(hWnd;hdc);  



break;  



case WM_DESTROY:  



PostQuitMessage(0);  



break;  



default:  



break;  



}  



return DefWindowProc(hWnd;msg;wParam;lParam);  



}  



该示例代码中的所有内容都已在前面做了完整的讲解,这里我们简单 

的说一下如何在Microsoft Developer Studio中编译该示例程序。请 

按下面的步骤进行:  



1。  选择File菜单下的New命令,新建一个Win32  Application工程, 


…………………………………………………………Page 141……………………………………………………………

这里我们假设对该工程命名为SdkDemo1,而事实上这完全取决于你的 

意愿。这个过程已经在本书的第一章中作为介绍,这里就不再重复说 

明了。  



2。  选择Project菜单下的Add  To  Project|New。。。命令,向工程中添 

加一个C++    Source  File  (C++源文件),可以将该文件命名为 

winmain。cpp,不需要键入扩展名,Microsoft  Developer  Studio在 

创建文件时会 自动加上。cpp的后缀名。这个过程也已经在第一章中作 

过介绍。阅读过该章内容的读者不应感到陌生。然后在Wordspace窗 

口的FileView 中双击文件名winmain。cpp  (在依赖于你在前面过程中 

的设定),输入下面的源代码即可。  



如果已将源代码输入为C++源文件 (以。cpp为后缀名的文件),则可以 

使用Project|Add To Project|Files。。。将其添加到工程中。  



                                         



               图3。2 示例程序SdkDemo1的运行结果  



3。  单击Build菜单下的Build  SdkDemo1。exe或Build  All或按下快捷 

键F7   (如果未对该快捷键做过 自定义操作的话)或单击Build或Build  

Minibar工具条上的   按钮,编译并创建可执行文件SdkDemo1。exe, 

运行该可执行文件 (从Developer  Studio中或资源管理器均可),将得 

到如图3。2所示的结果。  



前面已经不只一次说到过,使用这种方式编写的应用程序使用调试和 

维护的难度很大。这个问题是使用直接使用SDK编程的固有总是。但 

是,我们还是有办法可以使得该程序的结构更紧凑和更集中一些,从 

而改善代码的可读性,也使得它更接近于使用SDK编写的真正的Win32 

应用程序。  


…………………………………………………………Page 142……………………………………………………………

通过分析应用程序,我们发现,在上面的程序代码中,WinMain函数 

的代码显得有些过分臃肿,解决总是的办法就是将这些代码分离为单 

个的函数,这样,我们就可以得到更实用的基本SDK应用程序框架, 

当然,相对于MFC所提供的应用程序框架来说,我们的这个应用程序 

框架几乎不值一提,但是,它的确是要比前面的示例程序好多了。  



经过修改的代码如下:  



#include   



// 函数原型  



int WINAPI WinMain(HINSTANCE;HINSTANCE;LPSTR;int);  



LRESULT WINAPI WndProc(HWND;UINT;WPARAM;LPARAM);  



BOOL InitApplication(HINSTANCE);  



BOOL InitInstance(HINSTANCE;int);  



// WinMain 函数  



int WINAPI WinMain (HINSTANCE hInstance;  



HINSTANCE hPrevInstance;  



LPSTR lpCmdLine;  



int nCmdShow)  



{  



if (!hPrevInstance)  



if (!InitApplication(hInstance))  



return FALSE;  



if (!InitInstance(hInstance;SW_SHOW))  



return FALSE;  



MSG msg; // 窗口消息  



// 开始消息循环  



while (GetMessage(&msg;NULL;0;0))  



{  


…………………………………………………………Page 143……………………………………………………………

TranslateMessage(&msg);  



DispatchMessage(&msg);  



}  



return msg。wParam;  



}  



// WndProc 主窗口过程  



LRESULT WINAPI WndProc (HWND hWnd;  



UINT msg;  



WPARAM wParam;  



LPARAM lParam)  



{  



HDC hdc;  



RECT rc;  



HPEN hPen;hPenOld;  



HBRUSH hBrush;hBrushOld;  



switch (msg)  



{  



case WM_PAINT:  



hdc=GetDC(hWnd);  



GetClientRect(hWnd;&rc);  



hPen=CreatePen(PS_SOLID;0;RGB(0;0;0));  



hBrush=CreateHatchBrush(HS_DIAGCROSS;RGB(0;0;0));  



hPenOld=SelectObject(hdc;hPen);  



hBrushOld=SelectObject(hdc;hBrush);  



Ellipse(hdc;rc。left;rc。top;rc。right;rc。bottom);  



SelectObject(hdc;hPenOld);  


…………………………………………………………Page 144……………………………………………………………

SelectObject(hdc;hBrushOld);  



ReleaseDC(hWnd;hdc);  



break;  



case WM_DESTROY:  



PostQuitMessage(0);  



break;  



default:  



break;  



}  



return DefWindowProc(hWnd;msg;wParam;lParam);  



}  



BOOL InitApplication(HINSTANCE hInstance)  



{  



WNDCLASS wc; // 窗口类  



// 填充窗口类信息  



wc。style=CS_HREDRAW|CS_VREDRAW;  



wc。lpfnWndProc=WndProc;  



wc。cbClsExtra=0;  



wc。cbWndExtra=0;  



wc。hInstance=hInstance;  



wc。hIcon=LoadIcon(NULL;IDI_APPLICATION);  



wc。hCursor=LoadCursor(NULL;IDC_ARROW);  



wc。hbrBackground=GetStockObject(WHITE_BRUSH);  



wc。lpszMenuName=NULL;  



wc。lpszClassName=〃SdkDemo2〃;  



// 注册窗口类  


………………………………………………………
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!