设为首页 加入收藏

TOP

2.4 Windows应用程序举例(2)
2013-10-07 01:11:34 来源: 作者: 【 】 浏览:76
Tags:2.4 Windows 应用程序 举例

2.4  Windows应用程序举例(2)

(6) 编译并运行程序,结果如图2.18所示。

 
(点击查看大图)图2.18  generic运行结果
从上面的程序可以看出:控制台应用程序是以main函数作为进入程序的初始入口点,但在Windows应用程序中,main函数被WinMain函数取而代之,WinMain函数的原型如下:
  1. int WINAPI WinMain(  
  2. HINSTANCE hInstance,         // 当前实例句柄  
  3. HINSTANCE hPrevInstance,     // 以前的实例句柄  
  4. LPSTR lpCmdLine,              // 指向命令行参数的指针  
  5. int nCmdshow                // 窗口的显示状态  

每一个Win32应用程序都需要Windows.h头文件,它还包含了其他的一些Windows头文件。这些头文件定义了Windows的所有数据类型、函数调用、数据结构和符号常量。

WinMain函数通常要完成以下几步操作。

(1) 定义并调用API函数RegisterClass注册应用程序的窗口类。

(2) 调用相关API函数创建和显示窗口,并进行其他必要的初始化处理。其中,函数CreateWindow用于创建已注册窗口类的窗口。Windows每一个窗口都有一些基本属性,如窗口标题、窗口位置和大小、应用程序图标、鼠标指针、菜单和背景颜色等。窗口类就是充当这些属性的模板。CreateWindow函数具有如下的原型:

  1. HWND CreateWindow(  
  2. LPCTSTR     lpCIassName,    // 己注册的窗口类名  
  3. LPCTSTR     lpWindowName,   // 窗口标题  
  4. DWORD           dwStyle,     // 窗口风格  
  5. int             x,      // 窗口的水平位置  
  6. int             y,      // 窗口的垂直位置  
  7. int             nWidth,     // 窗口宽度  
  8. int             nHeight,    // 窗口高度  
  9. HWND            hWndParent,    // 父窗口句柄  
  10. HMENU       hMenu,     // 菜单句柄或控件标识  
  11. HINSTANCE   hInstance,     // 应用程序实例句柄  
  12. LPVOID      lpParam    // 其他窗口创建时的参数数据  
  13. ); 

创建和启动应用程序的消息循环。Windows应用程序接受各种不同的消息,包括键盘消息、鼠标以及窗口产生的各种消息。Windows系统首先将消息放入消息队列中,应用程序的消息循环就是从应用程序的消息队列中检取消息,并将消息发送相应的窗口过程函数中作进一步处理。API函数GetMessage和DispatchMessage就是起到这样的作用。

(3) 如果接收到WM_QUIT消息,则退出应用程序。

窗口过程函数WndProc用来接收和处理各种不同的消息。

在该函数中主要处理以下消息:

① WM_PAINT消息

在case WM_PAINT语句后的代码用来将文本"这是一个Windows模板程序!"显示到窗口客户区。在绘制文本时需要先调用BeginPaint函数,用来返回指定窗口句柄的设备描述表句柄,设备描述表用来将程序与计算机外部输出设备连接起来。Hdc定义的是句柄HDC变量,TextOut等GDI函数都需要通过这样的HDC句柄来绘制图形和文本。EndPaint用来释放设备描述表句柄,并使先前无效区域变为有效,从而使Windows不再发送WM_PAINT消息。PAINTSTRUCT是"绘图信息结构",BeginPaint和EndPaint都需要PAINTSTRUCT结构变量作为自己的参数,并且这两个函数必须成对出现,所有的GDI函数的调用也应该在这两个函数之间进行。Textout函数是用来显示文本的最常用的GDI函数,它具有下列原型:

  1. BOOL Textout(  
  2. HDC         hdc,                   // 设备描述表句柄  
  3. int         nXStart,                // 文本显示的水平起始位置  
  4. int             nYStart,               // 文本显示的垂直起始位置  
  5. LPCTSTR         lpString,                // 要显示的文本  
  6. int         cbstring              // 要显示的文本长度  
  7. ); 

② WM_CHAR消息

在case WM_CHAR语句后的代码用来将通过键盘输入的字符绘制在窗口客户区的左上角。通过键盘输入字符的ASC码保存在参数wParam。利用函数sprintf将wParam转换为字符数组Buffer,最后调用Textout函数将字符数组Buffer显示在窗口客户区。

③ WM_LBUTTONDOWN消息

case WM_LBUTTONDOWN语句后代码的作用是以按下鼠标左键的点为圆心,绘制一个半径为10的圆。Ellipse函数用来绘制椭圆,其原型为:

  1. BOOL Ellipse(  
  2. HDC             hdc,          // 设备描述表句柄  
  3. int             nLeftRect,     // 绘制椭圆的外界矩形的左上角x坐标  
  4. int             nTopRect,     // 绘制椭圆的外界矩形的左上角y坐标  
  5. int             nRightRect,    // 绘制椭圆的外界矩形的右下角x坐标  
  6. int             nBottomRect   // 绘制椭圆的外界矩形的右下角y坐标  
  7. ); 

【责任编辑:云霞 TEL:(010)68476606】

回书目   上一节   下一节

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.1.1 Visual C++菜单的使用 下一篇2.4 Windows应用程序举例(1)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: