WIN32编程入门指南资料

合集下载

win32编程基础知识

win32编程基础知识

win32编程基础知识 尽管Windows应⽤程序千变万化,令⼈眼花缭乱,但,消息机制和窗⼝过程却始终它们的基础,掌握了这两项技术,也就相当于把握住了问题的关键。

如果你以前是C程序员或是MFC的忠实⽤户,只要你学习过C语⾔的语法,⾃⼰亲⼿编过⼀些简短的C程序,理解以下的Win32编程基础也不是⼀件困难的事。

⼀个最简单的Win32程序 在以前的C语⾔编程中,⼀个最简单的程序可以只有两⾏。

void main(void){ printf "Hello World!"; } ⽽要实现同样功能的Windows程序却最少也要写⼏⼗⾏,这并不是说明Windows应⽤程序效率低下,难于掌握,只是说明程序在Windows环境下有更丰富的内涵。

Windows程序的效率其实不低,在所有的Windows应⽤程序中,都有⼀个程序初始化的过程,这得⽤上⼏⼗条语句,这段初始化的代码对于任何Windows应⽤程序⽽⾔,都是⼤同⼩异的。

下⾯以⼀个实现最简单功能的程序EasyWin为例,说明Windows程序的基本框架。

打开Visual C++ 6.0。

选择File菜单的New,在出现的对话框中,选择Projects栏⽬(新建⼯程),并点取其下的Win32 Application项,表⽰使⽤Win32环境创建应⽤程序。

先在Locatin(路径)中填⼊“c:\”,然后在Project Name(项⽬名称)中填⼊“EasyWin”,其它按照缺省设置)。

单击OK按钮。

再次选择File菜单的New,在出现的对话框中,选择Files栏⽬(新建⽂件),并点取其下的C++ Source File项,表⽰新建⼀个C++源⽂件。

在右边的File栏中输⼊“EasyWin”,最后确定让Add to project检查框打上勾)。

单击OK按钮。

在EasyWin.cpp⽂件中输⼊以下源程序代码。

 //*******************************************************************// ⼯程:easywin// ⽂件:easywin.cpp// 内容:⼀个基本的Win32程序//*******************************************************************#include <windows.h>#include <windowsx.h>//函数声明BOOL InitWindow( HINSTANCE hInstance, int nCmdShow );LRESULT CALLBACK WinProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );//*******************************************************************//函数:WinMain()//功能:Win32应⽤程序⼊⼝函数。

第三讲 WIN32编程入门(2)

第三讲 WIN32编程入门(2)

•使用者改变窗口的大小(如果窗口类别样式有着CS_HREDRAW和 CS_VREDRAW位旗标的设定)。
•程序使用ScrollWindow或ScrollDC函数滚动显示区域的一部分。
ቤተ መጻሕፍቲ ባይዱ
•程序使用InvalidateRect或InvalidateRgn函数刻意产生WM_PAINT消息。
见WMPAINT例程
消息类型(2)
在某些情况下,Windows总是保存它所覆盖的显示区域,然后恢复它。这 些情况是:
鼠标光标穿越显示区域。 图标拖过显示区域。
见WMPAINT例程
消息类型(2)
在这种机制下,应用程序的编写应该组织成:准备绘制屏幕所需要的所有 信息,然后在WM_PAINT消息处理中进行绘制。 例如:鼠标交互过程中,应该在各种鼠标事件中准备绘制所需的信息,然 后在WM_PAINT消息处理中使用这些信息进行绘制。
消息类型(2)
在某些情况下,显示区域的一部分被临时覆盖,Windows试图保存一个显 示区域,并在以后恢复它,但这不一定能成功。在以下情况下,Windows 可能发送WM_PAINT消息: Windows擦除覆盖了部分窗口的对话框或消息框。 菜单下拉出来,然后被释放。 显示工具提示消息。
见WMPAINT例程
见WMPAINT例程
消息类型(3)
鼠标键盘交互事件消息:
WM_LBUTTONDOWN
WM_RBUTTONSOWN
WM_CHAR
见WMPAINT例程
GDI简介
图形设备接口(GDI:Graphics Device Interface)是Windows的子系统, 它负责在视讯显示器和打印机上显示图形。GDI是Windows非常重要的部 分。要在窗口的显示区域绘图,可以使用Windows的图形设备接口(GDI) 函数。从程序写作者的观点来看,GDI由几百个函数调用和一些相关的数 据类型、宏和结构组成。 Windows提供了几个GDI函数,用于将字符串输 出到窗口的显示区域内TextOut等。该函数的格式如下: TextOut (hdc, x, y, psText, iLength) ; SetPixel (hdc, x, y, crColor) ;

win32编程

win32编程

windows基本工具的使用一. Windows编程基础:1.Win32应用程序的基本类型:1.1控制台程序:不需要完善的Windows窗口,可以使用DOS窗口的方式显示.1.2 Win32窗口程序包含窗口的程序。

可以通过窗口与程序交互1.3 Win32库程序提供已有的代码,供其他程序使用动态库(*.dll):是在执行的时候可以加载的程序.静态库(*.lib):是在编译连接时使用的程序.1.4 对比1.4.1程序的入口函数不同控制台程序:mainWin32窗口程序:WinMain动态库:DllMain静态库:无1.4.2编译连接后存在的形式不同控制台程序和Win32窗口程序:exe文件,可执行文件动态库DLL:DLL文件,无法执行静态库LIB:LIB文件,无法执行1.4.3执行结果不同:控制台程序:使用DOS窗口,自己没有窗口。

Win32窗口程序:会产生自己的窗口,可以将结果输出或者从窗口接受输入。

动态库DLL:提供可执行代码,当exe等待执行时,可以只用这些代码,执行时该库必须在指定的路径。

静态库LIB:本身无法执行,提供给程序在编译连接时使用,可以将库中的代码嵌入到程序当中。

执行时,不需要该库存在。

二. Win32窗口程序和编译环境:2.1 开发和编译环境VC1.0-VC6.0(2008)-VC10.0(2010)经典版本:VC6.02.1.1编译器 cl.exe将代码编译为目标代码*.OBJ文件2.1.2链接器 link.exe将*.OBJ文件和库函数连接生成*.EXE文件2.1.3资源编译器 rc.exe将资源脚本编译成可以连接的*.RES文件2.2头文件和库2.2.1 头文件 windows.h包含了windows常用的定义等。

其他,还包含了一些其他的头文件windef.h 定义了各种数据类型winbase.h 定义了kernel的相关函数wingdi.h 定义了绘图和文字winuser.h 窗口、控件等函数winnt.h 提供Unicode支持2.2.2库kernel32.lib-提供进程/线程/内存等等API函数的支持user32.lib-包括窗口/界面等等gdi32.lib-提供绘图/文字等2.3 Hello World应用程序2.3.1入口函数int WINAPI WinMain(HINSTANCE hInstance, //应用程序的实例句柄HINSTANCE hPrevInstance, //该应用程序的前一个实例句柄LPSTR pszCmdLine, //命令行参数int nShowCmd) //窗口的显示方式2.3.2 MesssgeBox2.4编译环境的准备在VC98的bin目录下VCVARS32.BAT将该文件以拖动的方式增加编译环境:若出现上面的提示,则编译环境准备好2.5编译:cl.execl的常用选项(字母大小写敏感):/c 只编译不连接/TC 编译C文件/TP 编译C++文件如果不指定,cl会根据文件类型自动区分/I 头文件所在目录例如: cl HelloWorld.c /c则编译成功,并生成*.obj目标文件2.6连接:link.exelink常用选项:/out:文件名连接成指定文件名的程序/LIBPATH:LIB文件存放的路径/SUBSYSTEM:CONSOLE/WINDOW例如:link HelloWorld.obj user32.lib则连接成功,并生成可执行文件*.exe 。

第五讲WIN32编程入门GDI绘图

第五讲WIN32编程入门GDI绘图
文字文字的数学味道不像计算机图形的其它方面那样浓。文字和几百年的 传统印刷术有关,它被许多印刷工人看作为一门艺术。因此,文字通常不 仅是所有的计算机图形系统中最复杂的部分,而且(如果识字还是社会基 本要求的话)也是最重要的部分。用于定义GDI字体对象和取得字体信息 的数据结构是Windows中最庞大的部分之一。从Windows 3.1开始,GDI开 始支持TrueType字体,该字体是在填入轮廓线基础上建立的,这样的填入 轮廓线可由其它GDI函数处理。依据兼容性和储存大小的考虑,WindБайду номын сангаасws 98继续支持旧式的点阵字体。我会在第十七章讨论字体。
GDI的画笔—创建画笔
HPEN CreatePen (
int fnPenStyle, int nWidth, COLORREF crColor );
// 线型 // 画笔线宽,以像素为单位 // 画笔颜色,RGB(R, G,B)
线型可选参数值: PS_SOLID PS_DASH PS_DOT PS_DASHDOT等
GDI的画刷—创建画刷
HBRUSH CreateSolidBrush ( COLORREF crColor // 画刷颜色 ); 创建一个单颜色的画刷,即填充区域内使用单一指定的颜色填 充
HBRUSH CreateHatchBrush
(
int fnStyle,
// 线条的图案方式
COLORREF crColor // 线条颜色
int nBottomRect //包围矩形的右下角y坐标
);
GDI基本图形—圆角矩形
BOOL RoundRect
(
HDC hdc,
// 设备句柄
int nLeftRect, //包围矩形的左上角x坐标

第02课 - Win32编程基础知识

第02课 - Win32编程基础知识
27
C语言入口函数
Windows程序设计-基础教程
例如 dir /w /p c:\windows argc = 4 argv[0] = dir argv[1] = /w argv[2] = /p argv[3] = c:\windows
17
代码规范-函数头的注释模板
Windows程序设计-基础教程
每行字符不要超出80个字符(“/”加上“-” 的总长度是80个字符; “FUNC”为函数的名称; “IN”为输入的参数; “OUT”为在函数内部的输出信息内容,即函数 参数作为返回值的说明; “RETURN”函数的返回值(如:函数成功返 回TRUE,否则返回FALSE。); “AUTHOR”为作者信息,需要时间的写法; “NOTE”为函数功能的描述,其中包括:功 能描述、全局变量描述以及调用模块。
Windows 数据类型
C 数据类型
char * const char *
Windows 类型
LPSTR, PSTR LPCSTR, PCSTR
void
void *
VOID
LPVOID
22
Windows 新增数据类型:句柄类型 * *
Windows程序设计-基础教程
HINSTANCE HWND HANDLE HPEN HBRUSH HBITMAP HFONT HDC HRESOURCE HCURSOR ……
8
代码规范-函数命名
Windows程序设计-基础教程
第一个字母必须使用大写字母,要求用大小写字 母组合规范函数命名,必要时可用下划线间隔, 示例如下: int GetValue(); void* Word_GetApp();

Win32程序快速入门指南

Win32程序快速入门指南

Win32程序快速入门指南1.程序说明示例程序放在Win32ShapeOrg中1.1_tWinMain_tWinMain是程序入口。

while (GetMessage(&msg, NULL, 0, 0))开始为消息处理循环。

如果程序运行到此处将进入一个消息响应过程,即如果有消息就会进入消息响应函数LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 1.2全局初始化如果要做全局初始化可以在tWinMain函数中while (GetMessage(&msg, NULL, 0, 0))前1.3消息响应机制win32程序是基于消息响应的,最核心的模块是消息响应函数LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)消息是依附在某个窗口的。

其中hWnd是窗口句柄,windows程序里,每一个窗口都有一个HWND类型的句柄用于标识这个窗口。

message是UINT类型的消息,实质上整数,消息的其它信息包含在wParam和lParam中1.4绘制函数WM_PAINT是绘制消息,所有和绘制相关的代码都放在WM_PAINT消息响应部分(具体在hdc = BeginPaint(hWnd, &ps);和EndPaint(hWnd, &ps);之间),win32所有绘制函数都带有一个HDC类型设备上下文句柄的参数。

InvalidateRect(hWnd, NULL, true);语句会发出绘制消息。

如果需要更新绘制画面,就可以调用此语句。

Windows绘制机制的基础是图像设备交互(GDI,Graphics Device Interface)。

Brush是用来填充的刷子,绘制的东西是实心的。

Win32编程基础04

Win32编程基础04

Day 05一鼠标消息1 鼠标消息:a 基本鼠标消息:WM_LBUTTONDOWN 左键按下、WM_LBUTTONUP 左键抬起、WM_RBUTTONDOWN 右键按下、WM_RBUTTONUP 右键抬起、WM_MOUSEMOVE 鼠标移动;b 双击消息:WM_LBUTTONDBLCLK 左键双击、WM_RBUTTONDBLCLK 右键双击。

c 滚轮消息:WM_MOUSEWHEEL 鼠标滚轮。

2 消息的参数:WPARAM - 当前键盘和鼠标按键状态,例如MK_CONTROL、MK_SHIFT、MK_LBUTTON等;LPARAM - 当前鼠标的坐标,坐标的原点是窗口客户区的左上角。

X坐标- LOWORD(lParam),低16位。

Y坐标- HIWORD(lParam),高16位参数具体内容和具体鼠标消息有稍微不同。

3 消息的使用3.1 基本鼠标消息,只需在窗口处理函数增加消息处理即可. 当消息来临,获取鼠标和按键状态。

例如:附:坐标转换的函数ClientToScreen可以将鼠标坐标转换为屏幕的坐标。

3.2 双击消息3.2.1 窗口注册要增加CS_DBLCLKS类型wce.style = CS_DBLCLKS|...;3.2.2 在窗口处理函数中增加消息处理3.2.3 产生过程,例如:WM_LBUTTONDBLCLK、WM_LBUTTONDOWN、WM_LBUTTONUP、WM_LBUTTONDBLCLK、WM_LBUTTONUP连续两次鼠标左击的时间间隔小于预定的双击时间间隔,就会产生LBUTTONDBLCLK消息。

双击时间间隔可以通过控制面板调整。

3.3 滚轮消息3.3.1 由于WM_MOUSEWHEEL需要Winnt4.0以上版本支持,所以需要包含windows.h的头文件前,增加_WIN32_WINNT 宏定义:#define _WIN32_WINNT 0x04003.3.2 在窗口处理函数中增加消息处理3.3.3 消息参数表wParam和lParam:LPARAM 与其它鼠标消息类相同,WPARAM - LOWORD( WPARAM ) 表示按键状态,HIWORD(WPARAM) 表示滚轮滚动幅度,是20的倍数,可以为正负值。

Lesson 01_Win32编程

Lesson 01_Win32编程

Lesson 01 Win32编程Win32编程最重要的是理解窗口、窗口类、窗口过程、消息队列、消息循环和窗口消息等概念以及它们是怎样配合的。

一、Win32程序总体结构例子程序:Generic1.Win32程序开发流程图1-1 一个32位Windows SDK程序的开发流程2.以消息为基础,以事件驱动之(Message Based,Event Driven)Windows程序的进行依靠外部发生的事件来驱动,程序不断等待,等待任何可能的输入,然后判断,再做适当的处理。

输入是由操作系统捕捉到之后,以消息的形式(一种数据结构)进入程序之中。

USER 模块掌管外围的驱动程序,它们各有侦测循环。

如果对应用程序获得的各种输入进行分类,可以分为由硬件装置所产生的消息(如鼠标移动或键盘被按下等),放在系统消息队列(system queue)中,以及由Windows 系统或其他Windows程序传过来的消息,放在程序消息队列中(application queue)。

程序调用GetMessage API就取得一个消息,程序的生命靠它来推动,即以消息为基础的事件驱动。

每一个Windows程序都会有如下消息循环:MSG msg;While(GetMessage(&msg,NULL,NULL,NULL)){TranslateMessage(&msg);DispatchMessage(&msg);}消息,即上面的MSG结构,格式如下:The MSG structure has the following form:typedef struct tagMSG { // msgHWND hwnd;UINT message; //WM_xxx格式,例如:WM_MOUSEMOVE,WM_SIZE……WPARAM wParam;LPARAM lParam;DWORD time;POINT pt;} MSG;The MSG structure contains message information from a thread’s message queue.接受并处理消息的主角是窗口。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第二部分 Win32 SDK编程
Windows程序与传统C程序区别
•传统的C程序是顺序的,所有的流程控制由程序员决 定
•Windows程序是交互式的、事件驱动的。事件是随 机的,事件发生后OS以消息的形式通知应用程序如 何动作。所有的Windows程序都要处理对鼠标键盘等 事件,对事件的不同处理方法是windows程序的构成 本质。
Windows消息模型
消息模型(一)
Windows程序设计的关键
Windows程序程序设计需要掌握Windows操作系统为 程序设计者提供的API( Application Programming Interface)。具体分两个方面: 1)某个具体事件发生后你需要OS为你做什么,如建 立窗口、输出文本、输出图形; 2)OS如何通知你发生了什么事件、事件的具体内容, 如鼠标的某个键被按下、某个键盘键被按下。
Win32 程序构成
WndProc( )函数负责完成消息的处理,该函数的编 写几乎是windows程序设计的全部工作。对不同的消 息进行不同的处理,如对键盘输入和鼠标输入的处理, 对窗口的重绘等。
消息类型(1)
WM_CREATE WM_CLOSE 窗口创建时发送 窗口关闭时发送
WM_DESTROY 窗口销毁是发送 WM_QUIT 退出程序值为0
Win32 程序构成
#include <windows.h> WinMain( )函数 WndProc( )窗口过程函数
见HelloWin32(没有窗口过程函数)与OnlyWindow例程
Win32 程序构成
WinMain( )函数负则完成: 窗口设计 ----- 搭积木 窗口注册 ----- 通知OS搭好了 窗口显示 ----- 让OSБайду номын сангаас窗口显示出来 建立消息循环 ----- 获取消息并分发消息到窗口过程
相关文档
最新文档