欢迎来到我的博客https://www.cnblogs.com/veis/

https://www.cnblogs.com/veis/p/14182037.html

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 010 }

 


注意!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

 

posted @ 2017-06-04 12:02  veis  阅读(2230)  评论(0编辑  收藏  举报