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 ...
随机推荐
- Kibana登录认证设置
Kibana从5.5开始不提供认证功能,想用官方的认证,X-Pack,收费滴 . 所以就自己动手吧,用nginx的代理功能了. 1.安装Nginx: [root@ELK /]# yum -y inst ...
- hotplug/mdev机制
目录 hotplug/mdev机制 框架 kobject_uevent_env mdev_main make_device mdev.conf 配置文件学习 更改属性 @:创建设备节点之后执行命令 $ ...
- Numpy系列(十三)- 文件IO
NumPy提供了多种存取数组内容的文件操作函数.保存数组数据的文件可以是二进制格式或者文本格式.二进制格式的文件又分为NumPy专用的格式化二进制类型和无格式类型. 一,tofile()和fromfi ...
- MySQL实战45讲学习笔记:事务隔离级别(第三讲)
一.隔离性与隔离级别 1.事务的特性 原子性 一致性 隔离性 持久性 2.不同事务隔离级别的区别 读未提交:别人改数据的事务尚未提交,我在我的事务中也能读到.读已提交:别人改数据的事务已经提交,我在我 ...
- [物理学与PDEs]第5章习题5 超弹性材料中客观性假设的贮能函数表达
设超弹性材料的贮能函数 $\hat W$ 满足 (4. 19) 式, 证明由它决定的 Cauchy 应力张量 ${\bf T}$ 满足各向同性假设 (4. 7) 式. 证明: 若贮能函数 $W$ 满足 ...
- Java部分概念理解
第1部分 方法 1.1 方法基本概念 1) 方法:用于封装一段特定功能代码,尽可能一个方法至只实现一个基本功能,相当于C语言中的函数: 2) 方法可以多次调用: 3) 避免代码冗余,便于维护,便于团队 ...
- nnet3配置中的上下文和chunk(块)大小
Nnet3配置中的上下文和块大小 简介 本页讨论了nnet3配置中关于解码和训练的块大小以及左右上下文的某些术语.这将有助于理解一些脚本.目前,从脚本角度来看,没有任何关于nnet3的"概述 ...
- CSS盒模型(Box Model)
阅读目录 1. 什么是CSS盒模型 2. IE盒模型和W3C盒模型 3. CSS3属性box-sizing 4. 关于盒模型的使用 在最初接触CSS的时候,对于CSS盒模型的不了解,撞了很多次的南墙呀 ...
- python3 字典常见用法总结
python3 字典常见用法总结 Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串.数字.元组等其他容器模型. 一.创建字典 字典由键和对应值成对组成.字典也被称作关联数组或哈希表 ...
- ng-app&data-ng-app
来源stackoverflow 区别:在验证html5时,ng-app会抛出一个错误,而对带data-前缀的特性不会抛出.其它方面这两个属性一样.