Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12838881
  • 博文数量: 1293
  • 博客积分: 13501
  • 博客等级: 上将
  • 技术积分: 17974
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-08 18:11
文章分类

全部博文(1293)

文章存档

2019年(1)

2018年(1)

2016年(118)

2015年(257)

2014年(128)

2013年(222)

2012年(229)

2011年(337)

分类: C/C++

2012-12-19 21:21:37

所有的windows应用程序必须包含两个基本函数WinMain()、Wnnproc():

一、应用程序主函数WinMain()

      WinMain()是所有应用程序的入口,类似C语言中的Main函数。它完成一系统的定义与初始化工作,并产生消息循环。


 

  1. int WINAPI WinMain(HINSTANCE hinstance,//程序本身的实例句柄
  2.                    HINSTANCE hPrevInstance,//应用程序其他实例句柄(因为多任务)
  3.                    LPSTR lpCmdLine,//指向字符串的指针,用来保存程序运行时的命令行参数
  4.                    int nCmdShow);//表示应用程序开始执行时窗口显示模式(如窗口放大、缩小)

 

     注意1因为windows是多任务的系统,所以同一应用程序的多个窗口可能会同时存在,windows系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识。

     在WinMain()函数中实现以下三个功能:注册窗口类、创建并初始化窗口、创建消息循环。

1、注册窗口类:

每个窗口都有一些基本属性,如窗口的大小、标题栏文字、背景色等。windows应用程序使用WNDCLASS结构体来定义窗口的各个属性。

 

  1. typedef struct tagWNDCLASS {
  2. DWORD style;        /* 窗口风格 */
  3. WNDPROC *lpfnWndProc; /* 窗口函数 */
  4. int cbCl***tra; /* 类变量占用的存储空间 */
  5. int cbWndExtra; /* 实例变量占用的存储空间 */
  6. HINSTANCE hinstance; /* 定义该类的应用程序实例的句柄 */
  7. HICON hicon; /* 图标对象的句柄 */
  8. HCURSOR hCursor; /* 光标对象的句柄 */
  9. HBRUSH hbrBackground; /* 窗口背景颜色的句柄 */
  10. LPCSTR lpszMenuName; /* 标识选单对象的字符串 */
  11. LPCSTR lpszClassName; /* 标识该类的名字的字符串 */
  12. } WNDCLASS;

 

定义完窗口类后,再使用Windows的API函数RegisterClass(&wndclass)注册窗口类。注册成功后,就能创建窗口了。

 

2、创建并初始化窗口:

用CreateWindow()函数用于创建该窗口,调用ShowWindow()和UpdateWindow两个函数来显示窗口。

 

3、创建消息循环:

WinMain()函数最后使用while语句创建一个消息循环,负责从消息循环队列中获取消息并分发给相应的窗口函数。


 

  1. While(GetMessage(&Msg,NULL,0,0))//获取消息


  2. {

  3. TranslateMessage(&Msg);//消息转换


  4. DispatchMessage(&Msg);//消息分发


  5. }



 

(2)窗口处理函数Wndproc()


 

  1.  LRESULT CALLBACK WndProc{ //WndProc名称可自由定义


  2.   HWND hwnd, //接收消息的窗口句柄,即像该窗口处理函数发生邀请的窗口


  3.   UINT message,

  4.   WPARAM wParam,

  5.   LPARAM lParam

  6. }


 

     在窗口函数中,根据接收的消息信息(mesage,wParam和Parm)进行判断,然后使用switch语句对应用程序接收到的不同消息进行响应,执行相应的程序模块。

      MFC应用程序也有一个WinMain函数,但程序员不需要编写该函数,该函数被封装在MFC的应用程序框架内,当应用程序启动时被自动调用。

阅读(3399) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~