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函数说明
int WINAPI WinMain
(
HINSTANCE hThisInst,//应用程序当前实例句柄
HINSTANCE hPrevInst,//应用程序其他实例句柄
LPSTR lpszCmdLine,//指向程序命令行参数的指针
int nCmdShow //应用程序开始执行时窗口显示方式的整数值标识
)
{
return ;
}
注意!Windows是多任务管理的,同一应用程序的多个窗口可能会同时存在,
Windows系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识
(2)初始化
窗口类的定义:定义窗口类的形式与功能->LoadIcon/LoadCursor/GetStockObject
窗口类的注册:窗口类必须先注册后使用->RegisterClass
创建窗口实例:CreatWindow
显示窗口:ShowWindow,UpdateWindow
(a)窗口类定义
通过给窗口类数据结构WNDCLASS赋值完成,该数据结构中包含窗口类的各种
属性。窗口类定义常用以下函数:
LoadIcon的作用是在应用程序中加载一个窗口图标。其原型为:
HICON LoadIcon(HINSTANCE hInstance,LPCTSTR IpIconName)
第一个参数:图标资源所在的模块句柄,NULL则使用系统预定义图标
第二个参数:图标资源名或系统预定义图标标识名
//窗口类定义
wndclass.style = ; //窗口类型为缺省类型
wndclass.IpfnWndProc = WndProc; //定义窗口过程函数
wndclass.cbClsExtra = ; //窗口类无拓展
wndclass.cbWndExtra = ; //窗口实例无拓展
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结构体中
消息循环的常见格式如下:
MSG Msg;
…
while (GetMessage (&Msg,NULL,,))
{
TranslateMessage(&Msg);//将消息的虚拟键转换为字符信息
DispatchMessage(&Msg); //将消息传送到指定窗口函数
}
其中函数GetMessage形式为:
(返回零值,即检索到WM_QUIT消息,程序结束循环并退出)
GetMessage
(lpMSG, //指向MSG结构的指针
hwnd,
nMsgFilteMin, //用于消息过滤的最小消息号值
nMsgFilterMax //用于消息过滤的最大消息号值
)
Windows应用程序组成及编程步骤的更多相关文章
- 1-4-1 Windows应用程序组成及编程步骤
主要内容:介绍Windows应用程序的组成以及编程步骤 1.应用程序的组成 <1>一个完整的应用程序通常由五种类型的文件组成 1.源程序文件 2.头文件 3.模块定义文件 4.资源描述文件 ...
- winsock教程- windows下的socket编程(c语言实现)
winsock教程- windows下的socket编程(c语言实现) 使用winsock进行socket 编程 这是一个学习windows下socket编程(c语言)的快速指南.这是因为一下 ...
- SpringMVC_01 SpringMVC五大组件、SpringMVC编程步骤(不使用注解进行配置)、SpringMVC编程步骤(利用注解进行配置)、参数获取、响应数据
1 什么是SpringMVC 是一个mvc框架,用来简化基于mvc架构的web应用程序的 开发. 2 SpringMVC五大组件 DispatcherServlet (前端控制器) HanlderMa ...
- 简单的JDBC编程步骤
1.加载数据库驱动(com.mysql.jdbc.Driver) 2.创建并获取数据库链接(Connection) 3.创建jdbc statement对象(PreparedStatement) 4. ...
- Linux下TCP网络编程与基于Windows下C#socket编程间通信
一.linux下TCP网络编程基础,需要了解相关函数 Socket():用于套接字初始化. Bind():将 socket 与本机上的一个端口绑定,就可以在该端口监听服务请求. Listen():使s ...
- JAVA基础知识之JDBC——编程步骤及执行SQL
JDBC编程步骤 下面以mysql数据库为例, 1.加载驱动 首先需要下载数据库的驱动jar文件,并且在eclipse包中加入到class path中去, 例如mysql的驱动文件 mysql-con ...
- JDBC编程步骤
JDBC编程步骤 加载数据库驱动. 通常使用Class类的forName()静态方法来加载驱动. Class.forName(driverClass) dirverClass: mysql---Cla ...
- iOS开发——图形编程OC篇&OpenGL ES2.0编程步骤
OpenGL ES2.0编程步骤 OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三维图形 API 的子集,针对手机.PDA和游戏主机等嵌入式设备而设 ...
- 在windows下的QT编程中的_TCHAR与QString之间的转换
由于在windows下的QT编程中,如果涉及到使用微软的API,那么不可避免使用_TCHAR这些类型,因此在网上查了一下,其中一个老外的论坛有人给出了这个转换,因此在这里做一下笔记 : )#ifdef ...
随机推荐
- Redux Counter Vanilla example
此示例不需要构建系统或视图框架,并且存在以显示与ES5一起使用的原始Redux API. 代码如下 <!DOCTYPE html> <html> <head> &l ...
- IDEA 破解
推荐三篇文章 : 1: https://blog.csdn.net/nishiwodebocai21/article/details/71359619?fps=1&locationNu ...
- python的内置模块xml模块方法 xml解析 详解以及使用
一.XML介绍 xml是实现不同语言或程序直接进行数据交换的协议,跟json差不多,单json使用起来更简单,不过现在还有很多传统公司的接口主要还是xml xml跟html都属于是标签语言 我们主要学 ...
- Java转换流、缓冲流、流操作规律整理
转换流 1.1 OutputStreamWriter类 OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的字符编码表,将要写入流中的字符编码成字 ...
- C++回顾day03---<纯虚函数和抽象类以及虚析构函数,delete使用>
一:纯虚函数和抽象类 纯虚函数是一个在基类中说明的虚函数,在基类中没有定义,要求任何派生类都定义自己的版本 纯虚函数为各个派生类提供一个公共接口 纯虚函数的形式: virtual 类型 函数名(参数列 ...
- NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
.NET Core 控制台程序没有 ASP.NET Core 的 IWebHostBuilder 与 Startup.cs ,那要读 appsettings.json.注依赖.配日志.设 IOptio ...
- postgreSql 常用操作总结
0. 启动pgsl数据库 pg_ctl -D /xx/pgdata start 1. 查看pgsl版本 pg_ctl --version 1. 命令行登录数据库 psql -U username -d ...
- SPFA+SLF+LLL
关于SLF优化 朴素SPFA使用常规队列(FIFO)更新距离,并没有考虑优化出队顺序(dis值小的优先出队)可以在一开始就把各个点的dis值限值小,从而避免大量的松弛操作,从而提高效率.这就是SLF( ...
- Regularity criteria for NSE 4: $\p_3u$
In [Zhang, Zujin. An improved regularity criterion for the Navier–Stokes equations in terms of one d ...
- dense prediction问题
dense prediction 理解:标注出图像中每个像素点的对象类别,要求不但给出具体目标的位置,还要描绘物体的边界,如图像分割.语义分割.边缘检测等等. 基于深度学习主要的做法有两种: 基于图 ...