版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Windows编程
基础知识Windows编程基础知识
内容提要1Windows编程概述2基本概念3Windows程序基本结构4程序示例Windows编程基础知识§1.1.
Windows编程概述Windows编程基础知识1Windows编程Windws编程
在微软的Windows操作系统下编程使用的工具
微软公司和其他公司(Boland等)在该操作系统下提供了了很多可视化的开发系统平台,如VC++、VB、BC、Delphi等。我们使用VC++Windows编程基础知识1Windows编程(续)可视化开发系统(资源和工具的集成)源程序编辑器编译器调试工具语法检查程序修改运行监视应用程序Help和Setup开发工具函数库和系统函数开发工具资源管理器各种窗口和控件的编辑器例程库及Help其他功能Windows编程基础知识2Windows程序特点Windows程序特点
1.图形用户界面(窗口)统一、友好
2.独立于设备的图形操作(GUI)
3.支持多任务机制(多线程)
4.事件驱动的程序设计(消息队列机制)
5.程序和资源分开、资源共享
6.支持应用程序间的数据交换(剪贴板等)Windows编程基础知识2Windows程序特点(续)一个简单的Windows程序#include<windows.h>intCALLBACKWinMain(HINSTANCEhInstance, HINSTANCEhPrevInstance, LPSTRlpCmdLine,
intnCmdShow){//产生一个问候小窗口
MessageBox(NULL,“HelloWorld!”, “SayHello”,MB_OK);
return1;}Windows编程基础知识3Windows程序设计方法传统式写法 使用C语言语法规范的API函数(ApplicationProgrammingInterface)交互式写法 使用C++语法规范的MFC类库
(MicrosoftFoundationClass)其他写法 使用模板技术等的ATL模板库
(ActiveXTemplateLibrary)和组件技术等Windows编程基础知识§1.2.
基本概念Windows编程基础知识1Windows程序及对象Windows应用程序使用的界面是由各种图形元素组成的图形界面各个图形元素具有不同的功能应用程序的用户主要是通过键盘和鼠标对应用程序界面上的图形元素进行操作来与Windows应用程序进行交互的Windows编程基础知识1Windows程序及对象(续)在Windows程序(系统)中,存在着许多与DOS应用程序不同的复杂对象对象和句柄
Windows的程序中,对象是具有规范形态和操作模式的部件,例如窗口、按钮、滚动条等;
Windows把为这种复杂对象所定义的标识叫做句柄,应用程序过句柄访问相应的对象信息。句柄实际上在C/C++中实现为指针(或认为其一个长度为4字节长整数值)Windows编程基础知识1Windows程序及对象(续)常用句柄类型HWND 窗口句柄HINSTANCE 当前实例句柄HCURSOR 光标句柄HFONT 字体句柄HPEN 画笔句柄HBRUSH 画刷句柄HDC 设备环境句柄HICON 图标句柄 HMENU 菜单句柄 HFILE 文件句柄 句柄所标识对象实例窗口按钮图标滚动条输出设备控件文件程序进程如此等等…...Windows编程基础知识2数据类型别名Windows应用程序中的数据量非常大,为了提高应用程序的可读性,Windows给许多基本数据类型定义了别名,例如:typedefvoid* HANDLE;typedefunsignedlong DWORD;typedefint BOOL;typedefunsignedchar BYTE;typedefunsignedshort WORD;Windows编程基础知识2数据类型别名(续)Windows应用程序还使用了一些结构类型的数据,例如:
typedef struct tagPOINT { LONGx,y; }POINT; //描述了一个点的位置。Windows编程基础知识3窗口及其功能窗口——Windows程序界面的主要组成典型窗口及其构成控制菜单框窗口边界工作区下拉菜单水平滚动条垂直滚动条最大化按钮最小化按钮标题栏Windows编程基础知识3窗口及其功能(续)窗口功能
1系统对应用程序管理的基本单位
2应用程序与用户之间交互的接口环境
3Window应用程序基本的操作单元Windows应用程序编程 创建一个或多个窗口Windows应用程序运行 窗口内部、窗口与窗口之间、窗口与系统之间进行数据处理与交换的过程Windows编程基础知识4消息的概念消息——应用程序与系统及其它应用程序进行信息交换的数据结构消息的三个组成部分:消息号:由事先定义好的消息名标识字参数(wParam):提供消息的附加信息长字参数(lParam):提供消息的附加信息附加信息与具体消息号的值有关Windows编程基础知识4消息的概念(续)消息的结构typedefstructtagMSG{HWNDhwnd;//窗口句柄,为null,则检索队的所有消息
UINTmessage;//消息号,由Windows.h中的宏定义来标识
WPARAMwParam;//消息的附加信息
LPARAMlParam;//消息的附加信息
DWORDtime;//指定消息送至队列的时间
POINTpt;//指定消息发送时屏幕光标的位置}MSG;Windows编程基础知识4消息的概念(续)系统能产生很多消息各种消息分类,分别以不同的前缀表示:WM——窗口消息BM——按钮控制消息CB——组合框控制消息DM——默认下压式按钮控制消息EM——编辑控制消息LB——列表框控制消息SBM——滚动条控制消息Windows编程基础知识4消息的概念(续)常见的Windows消息有Windows编程基础知识5事件及事件驱动事件——系统运行时发生的事情事件通常以以下三种方式产生:
l通过输入设备,如键盘和鼠标;
l通过屏幕上可视的对象,如菜单、工具栏按钮、滚动条和对话框上的控件;
l来自Windows内部,如当一个后面的窗口显示到前面来时。事件的结果系统以消息的形式记录事件的结果即消息Windows编程基础知识5事件及事件驱动(续)Windows程序和系统是事件驱动的,事件驱动也称消息驱动,事件驱动模型如下:Windows编程基础知识5事件及事件驱动(续)操作系统会用特定的机构管理消息消息队列 作为结果的消息,系统以队列形式进行管理操作系统(软件程序)有监控机构、管理机构、通讯机构等 应用程序在这些机构的管理下运行Windows编程基础知识5事件及事件驱动(续)支持队列特征的消息驱动模型Windows编程基础知识6API函数Windows提供了大量预定义的用C语言编写的函数和数据结构集合,该集合叫API(ApplicationProgrammingInterface)早期的Windows应用程序设计人员要使用相应的API函数来编写程序。类型别名和MSG等结构都包含在API中Windows编程基础知识6API函数(续)根据WindowsAPI函数的功能,可以将其分为三类:
1)管理函数:实现窗口和其它对象的创建、移动和修改等功能。
2)图形设备函数:实现与设备无关的图形操作功能,可以实现图形绘制。
3)系统服务函数:实现与操作系统有关的多种功能,如进程线程管理、任务调度等。Windows编程基础知识§1.3.
Win32程序基本结构Windows编程基础知识1应用程序的组成Windows程序分为“程序代码”和“UI(UserInterface)资源”两大部份
所谓UI资源是指功能菜单、对话框外貌、程序图标、光标形状等一个完整的Windows应用程序通常包含如下几种类型的文件:C/C++语言源程序文件(.c或.cpp)头文件(.h)
资源描述文件(.rc)模块定义文件(.def)…...Windows编程基础知识1应用程序的组成(续)源程序组成
源程序主要由主函数(入口函数)和窗口函数及其相关函数组成WinMain和WinProc是Win32源程序主体前者是应用程序的入口,类似main函数入口函数WinMain窗口函数WndProcWindows应用程序构成基本框架包含各种数据类型数据结构与函数等Windows编程基础知识2WinMain函数三个基本的组成部分:函数说明初始化消息循环功能注册窗口类,建立窗口及初始化进入消息循环,据消息调用相应的处理过程当消息循环检索到WM_QUIT时终止程序运行Windows编程基础知识2WinMain函数(续)函数(原型)说明注意!Windows操作系统是多任务管理的,同一应用程序可能同时存在多个窗口,Windows系统对每个窗口的执行称为一个实例,并用一个实例句柄来唯一标识它。intWINAPIWinMain(
HINSTANCEhThisInst,∥应用当前实例句柄
HINSTANCehPrevInst,∥应用其他实例句柄
LPSTRlpszCmdLine,∥指向命令行参数的指针
IntnCmdShow ∥初始窗口显示方式的整数值标识)Windows编程基础知识2WinMain函数(续)初始化 初始化包括窗口类的定义、注册窗口类、创建窗口和显示窗口四部分。需要注意的是,在显示窗口ShowWindow函数后,需调用UpdateWindow函数更新并绘制用户区,并发出WM_PAINT消息。Windows编程基础知识2WinMain函数(续)消息循环 应用程序通常有一段代码称为消息循环,又称为消息泵,它是程序的动力结构,形式如下MSGmsg;//从消息队列中提取消息while(GetMessage(&msg,NULL,NULL,NULL)){ TranslateMessage(&msg);//消息解释,如字符键的处理
DispatchMessage(&msg);//将消息传送到指定窗口函数}//以上出现的函数都是WindowsAPI函数Windows编程基础知识2WinMain函数(续)消息循环中:
函数GetMessage形式为:
GetMessage(lpMSG,//指向MSG结构的指针
hwnd, nMsgFilteMin,//用于消息过滤的最小消息号值
nMsgFilterMax//用于消息过滤的最大消息号值)GetMessage从消息队列中读取消息,并将消息放在MSG结构中,返回零值,即检索到WM_QUIT消息,程 序结束循环并退出Windows编程基础知识2WinMain函数(续)DispatchMessage函数 该函数负责将消息分发给窗口函数(可以理解为其用指针间接调用了窗口过程函数)在窗口产生过程中,要使用函数指针为窗口联系一个函数(通常为WndProc)WndProc窗口函数是程序和用户交互的主要处理部分!Windows编程基础知识3窗口函数WinProcWndProc函数由一个或多个switch语句组成。每一条case语句对应一种消息,当应用程序接收到一个消息时,相应的case语句被激活并执行相应的响应程序模块。WndProc包含了对各种可能接收到的消息的处理过程定义了应用程序对接收到的不同消息的响应Windows编程基础知识窗口函数的一般形式如下:LRESULTCALLBACKWndProc( HWNDhwnd, UINTmessgae, WPARAMwParam,LPARAMlParam){
…
switch(message) ∥message为标识的消息
{
case…
…break;
…
caseWM_DESTROY:
PostQuitMessage(0);
default:returnDefWindowProc(hwnd,message,wParam,lParam);
}return(0);}在消息处理程序段中一般都有对WM_DESTROY的处理,该消息是关闭窗口时发出的。它向应用程序发出WM_QUIT消息,请求退出处理函数:voidPostQuitMessage(intnExitCode)//nExitCode为应用程序的退出代码为未定义处理过程的消息提供缺省处理Windows编程基础知识4程序与系统之间的关系操作系统监控机构感知事件并产生消息系统将消息发给活动窗口消息队列应用程序拥有一个消息队列程序处理过程: 消息泵获得消息GetMessage,然后分发消息DispatchMessage给窗口过程WndProc(函数调用过程)作相应处理返回,接下来再获取消息,如此循环重复,直到GetMessage检到WM_QUIT消息返回0值。Windows编程基础知识4程序与系统之间的关系(续)Windows编程基础知识§1.4.
完整程序示例Windows编程基础知识应用程序举例#include<windows.h>//包含应用程序中所需的数据类型和数据结构的定义LRESULTCALLBACKWndProc(HWND,UINT,WPARAM,LPARAM);//窗口函数说明//---------------以下初始化窗口类----------------------intWINAPIWinMain(HINSTANCEhInstance, HINSTANCEhPrevInst,LPSTRlpszCmdLine,intnCmdShow){
HWNDhwnd;
MSGMsg;
WNDCLASSwndclass;
charlpszClassName[]="窗口"; //窗口类名
charlpszTitle[]="My_Windows"; //窗口标题名Windows编程基础知识
//窗口类的定义wndclass.style=0; //窗口类型为缺省类型wndclass.lpfnWndProc=WndProc; //定义窗口处理函数wndclass.cbClsExtra=0; //窗口类无扩展wndclass.cbWndExtra=0; //窗口实例无扩展wndclass.hInstance=hInstance; //当前实例句柄wndclass.hIcon=LoadIcon(NULL,IDI_APPLICATION); //窗口的最小化图标为缺省图标wndclass.hCursor=LoadCursor(NULL,IDC_ARROW); //窗口采用箭头光标wndclass.hbrBackground=GetStockObject(WHITE_BRUSH); //窗口背景为白色wndclass.lpszMenuName=NULL; //窗口中无菜单wndclass.lpszClassName=lpszClassName; //窗口类名为"窗口"Windows编程基础知识
//---------------以下进行窗口类的注册-------if(!RegisterClass(&wndclass))//如果注册失败则发出警告
{
MessageBeep(0);
returnFALSE;
}//----------------创建窗口-------------------
hwnd=CreateWindow (
lpszClassName, //窗口类名
lpszTitle, //窗口实例的标题名
WS_OVERLAPPEDWINDOW, //窗口的风格
CW_USEDEFAULT, CW_USEDEFAULT, //窗口左上角坐标为缺省值
CW_USEDEFAULT, CW_USEDEFAULT,, //窗口的高和
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年金融科技行业创新报告:科技赋能与风险控制
- 2026年灯杯行业管理系统创新报告
- 水泥砂浆找平层施工工艺及注意事项
- 水产养殖考试题目及答案
- 《通风与防尘工程》课件
- 万科厨房设计标准研究
- 龙湖天街项目施工现场临时用水施工方案
- 资产管理公司办公用品管理制度
- 2026年雨季施工现场安全培训试题(带答案)
- 三级安全教育培训
- 2026-2030中国戊烷80和和20行业市场发展趋势与前景展望战略分析研究报告
- GB 47834-2026晶体硅光伏组件和逆变器能效限定值及能效等级
- 工程常见质量问题监理实施细则
- 2026水务集团面试题目及答案
- 泳池灯光安装调试施工方案及技术措施
- 2026年部编版二年级上册语文教材分析
- 2026年养老管理师考试试题及答案详解
- 2026年广西公需科目全套1卷《人工智能国家战略与政策通识》
- T-CECS 《多段多级AO除磷脱氮技术规程》
- 脑卒中康复护理中的家庭护理指导
- 涟源市六亩塘镇招聘社区网格员备考题库附答案详解
评论
0/150
提交评论