Windows应用程序组成及编程步骤
Windows应用程序组成及编程步骤:
1、应用程序的组成:
一个完整的Windows应用程序通常由五种类型的文件组成
1.C语言源程序文件
2.头文件
3.模块定义文件
4.资源描述文件
5.项目文件
2、源程序组成结构:
1.所有应用程序的入口,类似main函数
2.完成一系列的定义和初始化,并产生消息循环
Windows应用程序-> 入口函数WinMain,窗口函数WndProc->构成基本框架->
包含多种数据类型、数据结构与函数等。
/*WinMain和WndProc是Windows应用程序的主体*/
(1)WinMain函数
1.基本组成部分:函数说明、初始化和消息循环
2.功能:注册窗口类,建立窗口及执行必要的初始化
进入消息循环,具接受的消息调用相应的处理过程
当消息循环检索到WM_QUIT时终止程序
3.WinMain函数说明
1 int WINAPI WinMain 2 ( 3 HINSTANCE hThisInst,//应用程序当前实例句柄 4 HINSTANCE hPrevInst,//应用程序其他实例句柄 5 LPSTR lpszCmdLine,//指向程序命令行参数的指针 6 int nCmdShow //应用程序开始执行时窗口显示方式的整数值标识 7 ) 8 { 9 return 0; 10 }
注意!Windows是多任务管理的,同一应用程序的多个窗口可能会同时存在,
Windows系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识
(2)初始化
窗口类的定义:定义窗口类的形式与功能->LoadIcon/LoadCursor/GetStockObject
窗口类的注册:窗口类必须先注册后使用->RegisterClass
创建窗口实例:CreatWindow
显示窗口:ShowWindow,UpdateWindow
(a)窗口类定义
通过给窗口类数据结构WNDCLASS赋值完成,该数据结构中包含窗口类的各种
属性。窗口类定义常用以下函数:
LoadIcon的作用是在应用程序中加载一个窗口图标。其原型为:
HICON LoadIcon(HINSTANCE hInstance,LPCTSTR IpIconName)
第一个参数:图标资源所在的模块句柄,NULL则使用系统预定义图标
第二个参数:图标资源名或系统预定义图标标识名
//窗口类定义 wndclass.style = 0; //窗口类型为缺省类型 wndclass.IpfnWndProc = WndProc; //定义窗口过程函数 wndclass.cbClsExtra = 0; //窗口类无拓展 wndclass.cbWndExtra = 0; //窗口实例无拓展 wndclass.hInstance = hinstance; //当前实例句柄 wndclass.hIcon = LocadIcon(NULL,IDI_APPLICATION);//窗口的最小化图标为缺省图标 wndclass.hCursor = LocadCursor(NULL,IDC_ARROW);//窗口采用箭头光标 wndclass.hbrBackground = GetStockObject(WHITE_BRUSH);//窗口背景为白色 wndclass.IpszMenuName = NULL;//窗口中无菜单 wndclass.IpszClassName = IpszClassName;//窗口类名为"窗口"
LoadCursor的作用是在应用程序中加载一个窗口光标
HCURSOR LoadCursor(HINSTANCE hInstance,LPCTSTR lpCursorName)
第一个参数:光标资源所在的模块句柄,NULL则使用系统预定义图标
第二个参数:光标资源名或系统预定义图标标识名
应用程序调用函数GetStockObject获取系统提供的背景刷
HBRUSH GetStockObject(int nBrush);
(b)注册窗口类
Windows系统本身提供部分预定义的窗口类,程序员也可以自定义窗口类,
窗口类必须先注册后使用。窗口了的注册由函数
RegisterClass()实现。
RegisterClass(&wndclass);//wndclass为窗口类结构
RegisterClass函数返回为布尔值,注册成功则返回真
(c)创建窗口实例
创建一个窗口类的实例由函数CreateWindow()实现
函数原型如下:
HWND CreateWindow ( LPCTSTR lpszClassName, //窗口类名 LPCTSTR lpszTitle, //窗口标题名 DWORD dwStyle, //创建窗口的样式 int x,y, //窗口左上角坐标 int nWidth,nHeight, //窗口宽度和高度 HWND hwndParent, //该窗口的父窗口句柄 HMENU hMenu, //窗口主菜单句柄 HINSTACNCE hInstcane, //创建窗口的应用程序当前句柄 LPVOID lpParam //指向一个传递给窗口的参数值的指针 )
(d)显示窗口
窗口类的显示由ShowWindow和UpdateWindow函数实现。应用程序调用
ShowWindow函数在屏幕上显示窗口
ShowWindow(hwnd,nCmdshow);//nCmdshow为窗口显示形式标识
SW_HIDE 隐藏窗口
SW_SHOWNORMAL 显示并激活窗口
SW_SHOWMINIMIZE 显示并最小化窗口
SW_SHOWMAXMIZE 显示并最大化窗口
SW_SHOWNOACTIVE 显示但不激活窗口
SW_RESTORE 恢复窗口的原来位置及尺寸
显示窗口后,应用程序调用UpdateWindow更新并绘制用户区,
并发出WM_PAINT消息。
UpdateWindow(hwnd);
(3)消息循环
Windows将产生的消息在WinMain函数中传给窗口函数的相应过程处理
从消息队列中读取一条消息,并将消息放在MSG结构体中
消息循环的常见格式如下:
1 MSG Msg; 2 … 3 while (GetMessage (&Msg,NULL,0,0)) 4 { 5 TranslateMessage(&Msg);//将消息的虚拟键转换为字符信息 6 DispatchMessage(&Msg); //将消息传送到指定窗口函数 7 }
其中函数GetMessage形式为:
(返回零值,即检索到WM_QUIT消息,程序结束循环并退出)
1 GetMessage 2 (lpMSG, //指向MSG结构的指针 3 hwnd, 4 nMsgFilteMin, //用于消息过滤的最小消息号值 5 nMsgFilterMax //用于消息过滤的最大消息号值 6 )