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 ...
随机推荐
- 初识 go 语言:语法
目录 语法 for 循环 if 语句 switch 语句 defer 语句 defer 栈 结束 前言: go语言系列第二篇,主要讲述go语言的语法,如循环,if判断,swich语句,defer语句, ...
- ajax 跨域 springboot
CORS 定义 Cross-Origin Resource Sharing(CORS)跨来源资源共享是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略,是 ...
- BSGS与扩展BSGS
BSGS \(BSGS\)算法又称大步小步\((Baby-Step-Giant-Step)\)算法 \(BSGS\)算法主要用于解以下同余方程 \[A^x\equiv B(mod\ p)\]其中\(( ...
- 第七篇--ubuntu18.04下面特殊符号
按住键盘win键,在搜索框输入“字符”,弹出来的工具点进去 需要什么符号就找什么符号,然后点击它复制就好.
- Numpy进阶操作
目录 1. 如何获取满足条设定件的索引 2. 如何将数据导入和导出csv文件 3. 如何保存和加载numpy对象 4. 如何按列或行拼接numpy数组 5. 如何按列对numpy数组进行排序 6. 如 ...
- 第三节:SignalR之PersistentConnection模型详解(步骤、用法、分组、跨域、第三方调用)
一. 承上声明 在上一个章节里,啰里啰嗦写了一堆关于介绍SignalR的“废话”,从这一篇开始往后正式撸代码,这期间不少人(包括 张善友大哥)建议我直接用.Net Core下的SignalR,关于此简 ...
- 第五节:Task构造函数之TaskCreationOptions枚举处理父子线程之间的关系。
一. 整体说明 揭秘: 通过F12查看Task类的源码(详见下面的截图),发现Task类的构造函数有有一个参数为:TaskCreationOptions类型,本章节可以算作是一个扩展章节,主要就来研究 ...
- UML各种图总结-精华
UML(Unified Modeling Language)是一种统一建模语言,为面向对象开发系统的产品进行说明.可视化.和编制文档的一种标准语言.下面将对UML的九种图+包图的基本概念进行介绍以及各 ...
- Max Area of Island
Given a non-empty 2D array grid of 0's and 1's, an island is a group of 1's (representing land) conn ...
- NB-IoT不一定最完美 但足以成为决定ofo与摩拜物联网胜负的关键【转】
转自:http://news.rfidworld.com.cn/2017_11/3d5ed5c5d8cb9949.html 2018年到来之前,如果还不懂物联网,你会被淘汰. 今年1月,工信部< ...