33
1. Windows 应应应应应应应应应 1.1 应应 API 应应 APPWIZARD WIN32 应应 : 1.2 应应应应应应应 1.2.1 应应应应 : 应应应应应应 应应应应应应应应应应应应 DLL DSP 应应 应应应应应 DSW 应应 应应应应应 , 应应应应应应应应应应 1.2.2 应应应应应 .H .CPP 1.2.3 应应应应 应应 应应应 应应 应应 应应应 CHAP1 WINDOWS API 应应应应

1. Windows 应用程序的工程文件 1.1 创建一个 API 程序 APPWIZARD WIN32 具体步骤 : 1.2 工程文件的组成 1.2.1 工程文件 :

  • Upload
    melita

  • View
    183

  • Download
    12

Embed Size (px)

DESCRIPTION

CHAP1 WINDOWS API 编程基础. 1. Windows 应用程序的工程文件 1.1 创建一个 API 程序 APPWIZARD WIN32 具体步骤 : 1.2 工程文件的组成 1.2.1 工程文件 : 源文件的集合 通过编译连接成执行程序或 DLL DSP 代表一个工程文件 DSW 代表一个工作文件 , 可以包含多个工程文件 1.2.2 源代码文件 .H .CPP 1.2.3 资源文件 : 菜单 、 对话框、 图标、 光标、字符串. 2. Windows 数据类型和变量命名规则. - PowerPoint PPT Presentation

Citation preview

1. Windows 应用程序的工程文件1.1 创建一个 API 程序 APPWIZARD WIN32

具体步骤 :

1.2 工程文件的组成1.2.1 工程文件 :

源文件的集合 通过编译连接成执行程序或 DLL

DSP 代表一个工程文件 DSW 代表一个工作文件 , 可以包含多个工程文件1.2.2 源代码文件 .H .CPP

1.2.3 资源文件 : 菜单 、 对话框、 图标、 光标、字符串

CHAP1 WINDOWS API 编程基础

类型 等价于 说明BOOL Int 布尔变量HANDLE Void 句柄HINSTANCE 32位的无符号整数 用作实例句柄HWND 32位的无符号整数 用作窗口句柄HDC 32位的无符号整数 设备描述背景的句柄WORD Unsigned short 字DWORD Unsigned long 双字VOID Void 空的Wparam Uint 消息参数lresult Long 消息返回值lparam Long 消息参数

表 1.2 VC++自定义数据类型

2. Windows 数据类型和变量命名规则

2.1 Windows c/c++ 自定义数据类型

2.2 常用的数据结构

typedef struct tagPOINT {   LONG x; LONG y;} POINT;

typedef struct tagRECT {   LONG left;   LONG top; LONG right; LONG bottom;

} RECT;

typedef struct tagSIZE { LONG cx; LONG cy; } SIZE;

前缀 数据类型

c 字符(char)

s 短整数(short)

cb 用于定义对象(一般为一个结构)尺寸的整数

n 整数(integer)

sz 以’\0’结尾的字符串

i Int(整数)

x 短整数(坐标 x)

y 短整数(坐标 y)

w 字(WORD,无符号短整数)

l 长整数(long)

h HANDLE(无符号 int)

m_ 类成员变量

fn 函数(function)

dw 双字(DWORD,无符号长整数)

表 1.4 在Windows里定义数据类型的一些标准前缀

2.3 匈牙利命名法

3 . WINMAIN ()函数——程序的入口点功能 : 创建并显示窗口 执行消息循环3 . 1 函数原型 int APIENTRY WinMain(

HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)

参数 说明Hinstance 应用程序当前实例句柄HPrevInstance 应用程序前一个实例句柄lpCmdLine, 指向命令行参数的指针nCmdShow 窗口显示方式的整数值标识

表 1.6 WinMain函数的参数说明

3 . 2 重要概念 --Windows 对象与句柄 Windows 对象: 窗口,菜单,光标,图标,应用程序实例… 句柄 :

提供对 Windows 对象的访问途径 由操作系统给定 唯一代表 Windows 对象的整型数 HINSTANCE :代表一个应用程序的实列句柄

HMEN :菜单HWND :窗口HICON :图标HCURSOR :光标

3.3.1 窗口与窗口类窗口:

外观;矩形区域 要素:标题,菜单,边框,窗口工作区, 最大化 最小化 恢复框

功能:提供图形操作界面 主窗口——代表一个应用程序单元 窗口对象的访问 : HWND

窗口类: 用于创建窗口的模板 决定了窗口的以下属性:图标、光标、菜单 决定窗口的功能(对用户操作的响应) WNDCLASS ( EX )结构

3.3 窗口的创建与显示

typedef struct _WNDCLASSEX {

UINT cbSize; // 定义窗口类结构的大小,如 sizeof(WNDCLASSEX).

UINT style; // 定义窗口样式,如 CS_HREDRAW |CS_VREDRAW

WNDPROC lpfnWndProc; // 指向窗口过程函数的指针 int cbClsExtra; // 分配在窗口类结构后的字节数 int cbWndExtra; // 分配在窗口实例后的字节数 HINSTANCE hInstance; // 定义窗口类应用程序的实例句柄 HICON hIcon; // 窗口类的图标 HCURSOR hCursor; // 窗口类的光标 HBRUSH hbrBackground; // 窗口类的背景填充色 LPCTSTR lpszMenuName; // 窗口类的菜单资源名 LPCTSTR lpszClassName; // 窗口类的名称 HICON hIconSm; // 与窗口类相关联的小图标句柄} WNDCLASSEX, *PWNDCLASSEX;

WNDCLASSEX 结构

3.3.2 了解有关 API 函数注册窗口类: RegisterWndClass()ATOM RegisterClass( CONST WNDCLASS *lpWndClass );

创建窗口: CreateWindow() HWND CreateWindow( LPCTSTR lpClassName, // 注册的窗口类名 LPCTSTR lpWindowName, // 窗口的标题名 DWORD dwStyle, // 窗口的风格 int x, // 窗口左上角的 x 坐标值 int y, // 窗口左上角的 y 坐标值 int nWidth, // 窗口的宽度 int nHeight, // 窗口的高度 HWND hWndParent, // 父窗口句柄 HMENU hMenu, // 主菜单句柄 HINSTANCE hInstance, // 应用程序的实例句柄 LPVOID lpParam // 指向一个传递给窗口的参数值指针);

常用窗口风格如表 1.7所示:类型 说明WS_BORDER 有边框的窗口WS_CAPTION 有标题的窗口WS_HSCROLL 有水平滚动条的窗口WS_MAXIMIZE 最大化的窗口WS_MAXIMIZEBOX 有最大化框的窗口WS_MINIMIZE 最小化的窗口WS_MINIMIZEBOX 有最小化框的窗口WS_POPUP 弹出式窗口WS_POPUPWINDOW 有边框和系统菜单的弹出式窗口WS_SYSMENU 有系统菜单的窗口WS_VSCROLL 有垂直滚动条的窗口

表 1.7 常用窗口风格

可以通过位或( | )操作实现窗口样式的自定义组合例如: WS_VSCROLL| WS_POPUP 表示窗口样式为有垂直滚动条的弹出式窗口

显示窗口: ShowWindow() 函数BOOL ShowWindow( HWND hWnd , int nCmdShow )显示方式标识 说明SW_HIDE 隐藏当前窗口SW_SHOW 显示窗口并保持当前状态不变SW_SHOWNORMAL 激活并显示窗口,如果该窗口正处于最大化或最小化,则

系统自动恢复其原始大小及位置SW_SHOWNA    以当前状态显示窗口,但激活状态不变SW_MINIMIZE 把窗口最小化,并激活系统列表中的顶层窗口SW_SHOWMAXIMIZED 激活窗口并最大化显示窗口SW_SHOWMINIMIZED 激活窗口并将窗口最小化

表 1.8常用窗口显示方式标识及其说明

更新窗口 : UpdateWindow() 函数 BOOL UpdateWindow( HWND hWnd);

System class•BUTTON

•COMBOBOX

•EDIT

•LISTBOX

•RichEdit

•RICHEDIT_CLASS

•SCROLLBAR

•STATIC

EX1.1 改变窗口类的属性,观察程序运行结果,窗口类决定窗口的哪些属性。

消息:每发生一个用户操作事件,操作系统产生一条对应的消息WM_KEYDOWN WM_LBUTOWDOWN WM_COMMAND

消息可以不一定由用户操作产生 WM_PAINT WM_CREATE

3.4 消息循环

从消息队列中检取消息,并发送到窗口过程函数由程函数处理消息。

3.4.1重点概念 : 消息、消息队列

了解 MSG 结构

typedef struct tagMSG { HWND hwnd; // identifies the window UINT message;//the message number WPARAM wParam; LPARAM lParam;//additional information

DWORD time; // message posted time

POINT pt; //cursor position} MSG;

• WM_CREATE• WM_DESTROY• WM_PAINT• WM_SIZE

int cx=LOWORD(lParam);int cy=HIWORD(lParam)

• WM_KEYDOWN wParam -virtual-key code of the nonsystem key• WM_LBUTTONDOWN

xPos = GET_X_LPARAM(lParam);yPos = GET_Y_LPARAM(lParam);

消息队列 :WINDOWS 操作系统维护的缓冲区, WINDOWS 为每一个应用程序的主

线程创建一个消 息队列 , 用于存放消息 ,等待被消息循环捡取 .

3.4.2 了解有关 API 函数 GetMessage() TranslateMessage() DispachMessage()

GetMessage() 函数

从消息队列检取消息,放到消息结构变量中。

如果检取到除WM_QUIT 消息外的消息,返回值非零 ; 如果检取到 WM_QUIT 消息,返回值为零。

如果消息队列中没有消息,把程序控制权转给其它程序。

函数原型:BOOL GetMessage( LPMSG lpMsg,

HWND hWnd,

UINT wMsgFilterMin,

UINT wMsgFilterMax );

参数 说明lpMsg 指向从消息队列中获得的MSG结构的指针HWnd 发送消息的窗口句柄wMsgFilterMin 能检取到的最小消息号值wMsgFilterMax 能检取到的最大消息号值

TranslateMessage()

把按键消息翻译成字符消息,放入消息队列中

BOOL TranslateMessage( CONST MSG *lpMsg // address of structure with message);

DispatchMessae()

把消息发送到窗口过程函数。 LONG DispatchMessage( CONST MSG *lpmsg // pointer to structure with message);

4. 窗口过程函数

4.1 函数原型 :

LRESULT CALLBACK WndProc(

HWND hWn, UINT message,WPARAM wParam, LPARAM lParam)

4.2 功能 :

实现对消息处理 ,

WINDOWS 程序的主要工作就是响应并处理消息

4.3 响应消息…..

switch(msg) {

case WM_ :

//Operation1

break;

case WM_ :

//Operation2

break;

…..

case WM_DESTROY

PostQuitMessage(0);

break

default:

return DefaultWindowProc(hWnd,message,wParam,lParam );

}

…..

4.4 缺省窗口过程函数

功能:

处理所有未被处理的消息, 某些消息必须进行缺省的处理 , 如: WM_PAINT 消息

EX1.2 消息处理实列 设计要求,把文本显示移动到鼠标的位置

5. 资源编辑答与资源文件 资源 ID 唯一标识资源 5.1 字符串与资源①编辑资源 ②使用字符串资源 LoadString ( )5.2 图标资源 ①编辑 ② LoadIcon()

5.3 光标资源 ①编辑 ② LoadCursor()

EX 1.3 编辑资源

常用的窗口操作函数• BOOL MoveWindow( HWND hWnd, // handle to window int X, // horizontal position int Y, // vertical position int nWidth, // width int nHeight, // height BOOL bRepaint // repaint option );

• BOOL EnableWindow( HWND hWnd, // handle to window BOOL bEnable // enable or disable input );

6.1工程文件 集合了源程序(代码)与资源文件(数据), 代码与数据分开 可以由多个源代码文件,但资源文件只能有一个。

6. 本章总结

6.2 WinMain( ) 函数

程序入口点

实现窗口的创建,显示等初始化工作,

执行消息循环

一个工程中只有一个 WinMain 函数

6.3 窗口过程函数

处理各种类型的消息一个窗口类对应一个窗口过程函数。

6.4 资源

特殊形式的数据

资源有 ID 来标识;

代码中使用资源需要通过函数装载;

资源文件 .RC ,编译后 .RES

6.5 运行应用程序: DEBUG 、 RELEASE 两种版本。

编译: C\C++ -- .OBJ

.RC – .RES

链接 : .EXE

本章重点概念:1 . 消息(事件)驱动2 . 窗口类、窗口与窗口函数3 . 消息,消息循环与窗口函数

课堂练习1. 试述窗口、窗口类和窗口函数的功能及其间

相互关系2. 试述 WinMain 函数和窗口函数各完成什么功

能3. 试述消息队列、消息循环和窗口函数的功能

及其间相互关系4. DefWindProc 函数的功能,哪个消息不能缺

省处理,如何处理。5. 如何设置窗口的位置和大小,改变光标形状

和窗口背景颜色。6. 你对讲课内容或方式有什么问题和建议