Windows程序内部运行机制介绍
来源:优易学  2011-11-30 17:52:15   【优易学:中国教育考试门户网】   资料下载   IT书店

  一、WinMain 函数原型

  int WINAPI WinMain(

  HINSTANCE hInstance,      // handle to current instance 程序当前运行实例句柄

  HINSTANCE hPrevInstance, // handle to previous instance 前一个实例句柄,参数总为NULL

  LPSTR lpCmdLine,          // command line 以空字符串结尾的命令行参数

  int nCmdShow              // show state 指定窗口的显示方式

  )

  二、创建一个窗口

  1.设计一个窗口类

  2.注册一个窗口类

  3.创建窗口

  4.显示及更新窗口

  (1).设计一个窗口类

  typedef struct _WNDCLASS{

  UINT style;

  WNDPROC lpfnWndProc;

  int cbClsExtra;

  int cbWndExtra;

  HANDLE hInstance;

  HICON Icon;

  HCURSOR Cursor;

  HBRUSH hbrBackground;

  LPCTSTR lpszMenuName;

  LPCTSTR lpszClassName;

  } WNDCLASS;

  ① style 属性指定窗口样式:

  CS_HREDRAW - 水平宽度变化重绘。

  CS_VREDRAW - 垂直方向高度变化重绘.

  CS_NOCLOSE - 禁用系统CLOSE命令.设关闭按钮.

  CS_DBLCLKS - 窗口接收双击消息.

  ② lpfnwndproc 函数指针

  指向窗口过程函数

  窗口过程函数是一个回调函数

  ③ cbclsExtra; -- 一般值为0

  Windows 系统中每一个窗口类型管理一个WNDCLASS结构

  ④ cbwndExtra; -- 一般值为0

  Windows系统中为每一个窗口管理一个内部数据结构,在注册一个窗口类时,

  应用程序能够指定一定字节数的附加内存空间,称为窗口附加内存.

  ⑤hInstance

  包含窗口过程的程序实例句柄

  ⑥hIcon 窗口类图标句柄

  成员变量须为一个图标资源句柄且成员为NULL,为系统提供默认图标

  我们可使用loadIcon函数来加载一个图标资源,并且它给系统分配图标句柄.

  函数原型:

  HIcon loadIcon(HINSTANCE hInstance, LPCTSTR lpIconName)

  ⑦hCursor指定窗口类光标句柄 -- 必须加载一个光标资源句柄,如果成员为NULL,

  无论何时鼠标进入到应用程序窗口中,应用程序都必须明确设置光标形状。

  ⑧hbrBackgound指定窗口类背景画刷句柄

  当窗口发生重绘,系统使用这里指定画刷来擦除窗口背影.

  ⑨ lpszMenuName -- 指定菜单资源名字(以以后终止字符串)

  如果使用菜单资源ID,那么需要用MAKENTRESouRCE宏来转换

  如果将其初始化为NULL,那么就算默认没有菜单。

  ⑩ lpszClassName - 指定窗口类名字(相当于给窗口取名字)

  三、注册窗口类

  设计宏窗口类后(WNDCLASS),我们还需要用 RegisterClass函数

  对其进行注册,注册成功后,才可创建该类型窗口 原型如下:

  ATOM RisterClass(Const WNDCLASS *LPWNDCLass);

  函数只有 - 参数,即上步骤中所设计窗口类对象指针。

  四、创建窗口 -- CreateWindow 函数

  HWND CreateWindow(

  LPCTSTR lpClassName, // 窗口类的名称 说明1

  LPCTSTR lpWindowName // 窗口的名字 - 窗口样式又标题栏,指定窗口名是在标题栏

  DWORD    dwstyle, // 指定窗口类样式,具体参考WS_OVERLAPPEDWINDOW类型

  int x, // 窗口左上角x.y坐标 -- 宽、高。 -- x,设为CW_USEDEFAULT,窗口默认左上角坐标忽略y参数。

  int y,

  int nWidth,

  int nHeight, // - 设为 CW_USEDEFAULT 窗口默认宽、高,nHight忽略。

  HWND hwndparent, // 创建窗口的父窗口句柄

  HMENU hmenu. // 指定窗口菜单句柄

  HANDLE hInstance, // 指定窗口所属应用程序实例句柄

  LPVOID lparam // WM_CREATE消息附加参数lparam传入数据指针

  // 创建多文档界面窗口,lparam指向CLIENTCREATESRUCT结构体多数窗口设为NULL

  // 说明1、调用CreateWindows函数前,没有用RegisterClass函数,注册名称的窗口类。

  #define WS_OVERLAPPEDWINDOW (WS_OVERLAPPED // 产生层叠窗口有标题栏和边框

  WS_CAPTION      |\ 创建一个有标题窗口

  WS_SYSMENU      |\ 创建在标题栏上有系统菜单和WS_CAPTION类型一起作用

  WS_THICKFRAME   |\ 创建一个具有可调边框窗口

  WS_MINIMIZEBOX |\ 最小化窗口,设定WS_SYSMENU类型

  WS_MAXIMIZEBOX |\ 最大化窗口,设定WS_SYSMENU类型

  )

  窗口创建成功,CreaeWindow 函数返回系统为窗口分配句柄,否则返回NULL

[1] [2] 下一页

责任编辑:小草

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训