目录
仅供快速查询使用
31:GET_X_LPARAM和 GET_Y_LPARAM 宏
50:GetRValue、GetGValue 和 GetBValue 宏
常用Win 32 API
Windows api
1:MessageBox
函数功能:
MessageBox 函数用于显示一个模态对话框,其中包含一个系统图标、 一组按钮和一个简短的特定于应用程序消息,如状态或错误的信息。
消息框中返回一个整数值,该值指示用户单击了哪个按钮。
API 函数原型:
注释:_In_ 说明该参数是输入的,_opt_ 说明该参数是可选参数。
int WINAPI MessageBox(
_In_opt_ HWNDhWnd,
_In_opt_ LPCTSTRlpText,
_In_opt_ LPCTSTRlpCaption,
_In_ UINT uType
);
参数解析:
参数 |
含义 |
hWnd |
1. 该消息框的父窗口句柄 |
lpText |
消息框的内容 |
lpCaption |
消息框的标题 |
uType |
1. 指定一个决定对话框的内容和行为的位标志集 |
uType参数定义解析
按钮 |
含义 |
MB_OK |
默认值,有一个“确认”按钮在里面 |
MB_YESNO |
有“是”和“否”两个按钮在里面 |
MB_ABORTRETRYIGNORE |
有“中止”,“重试”和“跳过”三个按钮在里面 |
MB_YESNOCANCEL |
有“是”,“否”和“取消”三个按钮在里面 |
MB_RETRYCANCEL |
有“重试”和“取消”两个按钮在里面 |
MB_OKCANCEL |
有“确定”和“取消”两个按钮在里面 |
图标 |
含义 |
MB_ICONEXCLAMATION |
一个惊叹号出现在消息框: |
MB_ICONWARNING |
一个惊叹号出现在消息框(同上) |
MB_ICONINFORMATION |
一个圆圈中小写字母i组成的图标出现在消息框: |
MB_ICONASTERISK |
一个圆圈中小写字母i组成的图标出现在消息框(同上) |
MB_ICONQUESTION |
一个问题标记图标出现在消息框: |
MB_ICONSTOP |
一个停止消息图标出现在消息框: |
MB_ICONERROR |
一个停止消息图标出现在消息框(同上) |
MB_ICONHAND |
一个停止消息图标出现在消息框(同上) |
默认按钮 |
含义 |
MB_DEFBUTTON1 |
指定第一个按钮为默认按钮 |
MB_DEFBUTTON2 |
指定第二个按钮为默认按钮 |
MB_DEFBUTTON3 |
指定第三个按钮为默认按钮 |
MB_DEFBUTTON4 |
指定第四个按钮为默认按钮 |
消息框形态 |
含义 |
MB_APPLMODAL |
1. 在 hWnd 参数标识的窗口中继续工作以前,用户一定响应消息框 |
MB_SYSTEMMODAL |
1. 除了消息框有 WB_EX_TOPMOST 类型,否则 MB_APPLMODAL 和 MB_SYSTEMMODAL 一样 |
MB_TASKMODAL |
1. 如果参数 hWnd 为 NULL 的话,那么除了所有属于当前线程高层次的窗口失效外,MB_TASKMODAL 和 MB_APPLMODAL 一样 |
其他标志 |
含义 |
MB_DEFAULT_DESKTOP_ONLY |
1. 接收输入的当前桌面一定是一个默认桌面,否则函数调用失败 |
MB_HELP |
1. 把一个 Help 按钮增加到消息框 |
MB_RIGHT |
文本为右对齐 |
MB_RTLREADING |
用在 Hebrew 和 Arabic 系统中从右到左的顺序显示消息和大写文本 |
MB_SETFOREGROUND |
1. 消息框变为前景窗口 |
MB_TOPMOST |
消息框用 WS_EX_TOPMOST 窗口类型来创建 MB_SERVICE_NOTIFICATION |
返回值:
返回值 |
含义 |
IDOK |
用户按下了“确认”按钮 |
IDCANCEL |
用户按下了“取消”按钮 |
IDABORT |
用户按下了“中止”按钮 |
IDRETRY |
用户按下了“重试”按钮 |
IDIGNORE |
用户按下了“忽略”按钮 |
IDYES |
用户按下了“是”按钮 |
IDNO |
用户按下了“否”按钮 |
举例:
#include <windows.h>
int WINAPI WinMain(HINSTANCEhInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
MessageBox(NULL, TEXT("这是我在鱼C学的第一个程序!"), TEXT("打招呼"), MB_OKCANCEL| MB_ICONQUESTION | MB_DEFBUTTON2);
return 0;
}
1:MessageBox
Windows的窗口总是基于窗口类来创建的,窗口类同时确定了处理窗口消息的窗口过程(回调函数)。
在创建应用程序窗口之前,必须调用 RegisterClass 函数来注册窗口类。该函数只需要一个参数,即指向 WNDCLASS 窗口类的指针。因为 WNDCLASS 类包含了窗口所拥有的基本属性。
结构原型:
typedef struct tagWNDCLASSW {
UINT style;
WNDPROC lpfnWndProc;
int cbClsExtra;
int cbWndExtra;
HINSTANCE hInstance;
HICON hIcon;
HCURSOR hCursor;
HBRUSH hbrBackground;
LPCWSTR lpszMenuName;
LPCWSTR lpszClassName;
} WNDCLASSW, *PWNDCLASSW, NEAR*NPWNDCLASSW, FAR *LPWNDCLASSW;
成员解析:
成员 |
含义 |
style |
指定窗口类型,各种“类风格”(详见下方↓)可以使用按位或操作符组合起来 |
lpfnWndProc |
指定窗口过程(必须是回调函数) |
cbClsExtra |
预留的额外空间,一般为 0 |
cbWndExtra |
预留的额外空间,一般为 0 |
hInstance |
应用程序的实例句柄 |
hIcon |
为所有基于该窗口类的窗口设定一个图标 |
hCursor |
为所有基于该窗口类的窗口设定一个鼠标指针 |
hbrBackground |
指定窗口背景色 |
lpszMenuName |
指定窗口菜单 |
lpszClassName |
指定窗口类名 |
style 类风格解析
类风格 |
含义 |
CS_VREDRAW |
移动或者调整窗口的高度(垂直方向)时,重绘整个窗口 |
CS_HREDRAW |
移动或者调整窗口的宽度(水平方向)时,重绘整个窗口 |
CS_DBLCLKS |
当用户光标在窗口内双击时,允许发送双击消息给窗口过程 |
CS_OWNDC |
给予每个窗口实例分配一个唯一的 DC(注意,尽管这样是很方便,但它必须慎重使用,因为每个 DC 大约要占 800 个字节的内存) |
CS_CLASSDC |
该窗口类的所有窗口实例都共享一个窗口类 DC |
CS_PARENTDC |
1. 将子窗口的裁剪区域设置到父窗口的 DC 中去,这样子窗口便可以在父窗口上绘制自身。(注意,这是子窗口还是从系统缓存中获取 DC,而不是使用父窗口的 DC。) |
CS_NOCLOSE |
禁止系统菜单的关闭选项 |
CS_SAVEBITS |
1. 以位图形式保存被该窗口遮挡的屏幕部分,这样当给窗口移动以后,系统便可以用该保存的位图恢复屏幕移动的相应部分,从而系统不用向被该窗口遮挡的窗口发送 WM_PAINT 消息 |
CS_BYTEALIGNCLIENT |
在字节边界上(在 x 方向上)定位窗口的用户区域的位置 |
CS_BYTEALIGNWINDOW |
在字节边界上(在 x 方向上)定位窗口的位置 |
CS_GLOBALCLASS |
1. 当调用 CreateWindow 或 CreateWindowEx 函数来创建窗口时允许它的 hInstance 参数和注册窗口类时传递给 RegisterClass 的 hInstance 参数不同 |
1:MessageBox
函数功能:
CreateWindow 函数创建一个重叠式窗口、弹出式窗口或子窗口。它指定窗口类,窗口标题,窗口风格,以及窗口的初始位置及大小(可选的)。函数也指该窗口的父窗口或所属窗口(如果存在的话),及窗口的菜单。
若要使用除 CreateWindow 函数支持的风格外的扩展风格,则使用 CreateWindowEx 函数代替 CreateWindow 函数。
API 函数原型:
注释:_In_ 说明该参数是输入的,_opt_ 说明该参数是可选参数。
HWND WINAPI CreateWindow(
_In_opt_ LPCTSTRlpClassName, // 窗口类名称
_In_opt_ LPCTSTRlpWindowName, // 窗口标题
_In_ DWORD dwStyle, // 窗口风格,或称窗口格式
_In_ int x, // 初始 x 坐标
_In_ int y, // 初始 y 坐标
_In_ int nWidth, // 初始 x 方向尺寸
_In_ int nHeight, // 初始 y 方向尺寸
_In_opt_ HWNDhWndParent, // 父窗口句柄
_In_opt_ HMENUhMenu, // 窗口菜单句柄
_In_opt_ HINSTANCEhInstance, // 程序实例句柄
_In_opt_ LPVOIDlpParam // 创建参数
);
参数解析:
参数 |
含义 |
lpClassName |
1. 窗口类名称,可以是一个指向 NULL 结束的字符串或一个整型数值 |
lpWindowName |
1. 窗口标题,一个指向 NULL 结束的字符串指针 |
dwStyle |
指定创建窗口的风格(详见下方↓) |
x |
1. 指定窗口的初始水平位置(x 坐标) |
y |
1. 指定窗口的初始垂直位置(y 坐标) |
nWidth |
1. 以设备单元指明窗口的宽度 |
nHeight |
1. 以设备单元指明窗口的高度 |
hWndParent |
1. 指向被创建窗口的父窗口或所有者窗口的句柄 |
hMenu |
1. 指向窗口菜单句柄,或依据窗口风格指明一个子窗口标识 |
hInstance |
与窗口相关联的模块实例的句柄 |
lpParam |
1. 指向一个值的指针,该值传递给窗口 WM_CREATE 消息。该值通过在 IParam 参数中的 CREATESTRUCT 结构传递 |
dwStyle 窗口风格解析
窗口风格 |
含义 |
WS_BORDER |
创建一个带边框的窗口 |
WS_CAPTION |
创建一个有标题框的窗口(包含了 WS_BODER 风格) |
WS_CHILD |
创建一个子窗口,这个风格的窗口不能拥有菜单也不能与 WS_POPUP 风格合用 |
WS_CHILDWINDOW |
与 WS_CHILD 相同 |
WS_CLIPCHILDREN |
当在父窗口内绘图时,排除子窗口区域,在创建父窗口时使用这个风格 |
WS_CLIPSIBLINGS |
1. 排除子窗口之间的相对区域,也就是,当一个特定的窗口接收到 WM_PAINT 消息时,WS_CLIPSIBLINGS 风格将所有层叠窗口排除在绘图之外,只重绘指定的子窗口 |
WS_DISABLED |
1. 创建一个初始状态为禁止的子窗口,一个禁止状态的窗口不能接受来自用户的输入信息 |
WS_DLGFRAME |
创建一个带对话框边框风格的窗口,这种风格的窗口不能带标题条 |
WS_GROUP |
1. 指定一组“控制窗口”的第一个“控制窗口” |
WS_HSCROLL |
创建一个有水平滚动条的窗口 |
WS_ICONIC |
创建一个初始状态为最小化状态的窗口,与 WS_MINIMIZE 风格相同 |
WS_MAXIMIZE |
创建一个初始状态为最大化状态的窗口 |
WS_MAXIMIZEBOX |
创建一个具有最大化按钮的窗口,该风格不能与 WS_EX_CONTEXTHELP 风格同时出现,同时必须指定 WS_SYSMENU 风格 |
WS_MINIMIZE |
创建一个初始状态为最小化状态的窗口,与 WS_ICONIC 风格相同 |
WS_MINIMIZEBOX |
创建一个具有最小化按钮的窗口,该风格不能与 WS_EX_CONTEXTHELP 风格同时出现,同时必须指定 WS_SYSMENU 风格 |
WS_OVERLAPPED |
产生一个层叠的窗口,一个层叠的窗口有一个标题条和一个边框,与 WS_TILED 风格相同 |
WS_OVERLAPPEDWINDOW |
相当于(WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX),与 WS_TILEDWINDOW 风格相同 |
WS_POPUP |
创建一个弹出式窗口,该风格不能与 WS_CHILD 风格同时使用。 |
WS_POPUPWINDOW |
相当于(WS_POPUP | WS_BORDER | WS_SYSMENU),但 WS_CAPTION 和 WS_POPUPWINDOW 必须同时设定才能使窗口某单可见 |
WS_SIZEBOX |
创建一个可调边框的窗口,与 WS_THICKFRAME 风格相同 |
WS_SYSMENU |
创建一个在标题条上带有窗口菜单的窗口,必须同时设定 WS_CAPTION 风格 |
WS_TABSTOP |
1. 创建一个“控制窗口”,在用户按下 Tab 键时可以获得键盘焦点。 |
WS_THICKFRAME |
创建一个具有可调边框的窗口,与 WS_SIZEBOX 风格相同 |
WS_TILED |
产生一个层叠的窗口,一个层叠的窗口有一个标题和一个边框,与 WS_OVERLAPPED 风格相同 |
WS_TILEDWINDOW |
相当于(WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX),与 WS_OVERLAPPEDWINDOW 风格相同 |
WS_VISIBLE |
创建一个初始状态为可见的窗口 |
WS_VSCROLL |
创建一个有垂直滚动条的窗口 |
返回值:
1. 如果函数成功,返回值为新窗口的句柄;
2. 如果函数失败,返回值为 NULL。
4:ShowWindow
函数功能:
ShowWindow 函数用于设置指定窗口的显示状态。
应用程序第一次调用 ShowWindow 时,应该使用 WinMain 函数的 nCmdshow 参数作为它的 nCmdShow 参数。在随后调用 ShowWindow 函数时,必须使用下列显示方式中的一个给定值,而不是由 WinMain 函数的 nCmdSHow 参数指定的值。
API 函数原型:
BOOL WINAPI ShowWindow(
_In_ HWNDhWnd,
_In_ intnCmdShow
);
参数解析:
参数 |
含义 |
hWnd |
窗口句柄 |
nCmdShow |
控制窗口如何显示,如果发送应用程序的程序提供了 STARTUPINFO 结构,则应用程序第一次调用 ShowWindow 时该参数被忽略。否则,在第一次调用 ShowWindow 函数时,该值应为在函数 WinMain 中 nCmdShow 参数。 |
在随后的调用中,nCmdShow 参数可以为下列值之一:
显示方式 |
含义 |
SW_FORCEMINIMIZE |
1. 最小化窗口,即使拥有窗口的线程被挂起也会最小化 |
SW_HIDE |
隐藏窗口并激活其他窗口 |
SW_MAXIMIZE |
最大化指定的窗口 |
SW_MINIMIZE |
最小化指定的窗口并且激活在 Z 序中的下一个顶层窗口 |
SW_RESTORE |
1. 激活并显示窗口 |
SW_SHOW |
在窗口原来的位置以原来的尺寸激活并显示窗口 |
SW_SHOWDEFAULT |
依据在 STARTUPINFO 结构中指定的 SW_FLAG 标志设定显示状态,STARTUPINFO 结构是由启动应用程序的程序传递给 CreateProcess 函数的。 |
SW_SHOWMAXIMIZED |
激活窗口并将其最大化 |
SW_SHOWMINIMIZED |
激活窗口并将其最小化 |
SW_SHOWMINNOACTIVE |
1. 窗口最小化 |
SW_SHOWNA |
1. 以窗口原来的位置以原来的尺寸显示窗口 |
SW_SHOWNOACTIVATE |
1. 以窗口最近一次的位置和尺寸显示窗口 |
SW_SHOWNORMAL |
1. 激活并显示一个窗口 |
返回值:
1. 如果窗口之前可见,则返回值为非 0;
2. 如果窗口之前被隐藏,则返回值为 0。
5: UpdateWindow__更新窗口
函数功能:
UpdateWindow 函数绕过应用程序的消息队列,直接发送 WM_PAINT 消息给指定窗口的窗口过程。
如果窗口更新的区域不为空,UpdateWindow 函数通过发送一个 WM_PAINT 消息来更新指定窗口的客户区。如果更新区域为空,则不发送消息。
API 函数原型:
BOOL UpdateWindow(
_In_ HWNDhWnd
);
参数解析:
参数 |
含义 |
hWnd |
指定要更新的窗口的句柄. |
返回值:
1. 如果函数调用成功,返回值为非 0;
2. 如果函数调用不成功,返回值为 0。
UpdateWindow, WindowsSDK, WindowsAPI, SDK教程, UpdateWindow详解
6:MSG 消息结构
MSG 消息结构
在 Windows 程序中,消息是由 MSG 结构体来表示的。
结构原型:
typedef struct tagMSG {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
} MSG, *PMSG, *LPMSG;
成员解析:
成员 |
含义 |
hwnd |
指定接收消息的窗口句柄 |
message |
1. 消息的标识符,由于数值不便于记忆,所以 Windows 将消息对应的数值定义为 WM_XXX 宏的形式 |
wParam |
指定消息的附加消息,确切的含义取决于消息成员的值 |
lParam |
指定消息的附加消息,确切的含义取决于消息成员的值 |
time |
该消息被投放到消息队列的时间 |
pt |
当消息被投放到消息队列的时,鼠标位于屏幕中的位置 |
7: GetMessage
函数功能:
GetMessage 函数的作用是从当前线程的消息队列里取出一个消息并填入 MSG结构 中。
该函数只能获取调用线程的消息,不能获得其他线程的消息。成功获取消息后,线程将从消息队列中删除该消息。如果消息队列为空,函数会一直等待直到有消息到来才有返回值。
API 函数原型:
BOOL WINAPI GetMessage(
_Out_ LPMSG lpMsg,
_In_opt_ HWNDhWnd,
_In_ UINT wMsgFilterMin,
_In_ UINT wMsgFilterMax
);
参数解析:
参数 |
含义 |
lpMsg |
指向 MSG 结构的指针 |
hWnd |
1. 需要检索消息的窗口的句柄,该窗口必须属于当前线程 |
wMsgFilterMin |
指定被检索的最小消息值的整数 |
wMsgFilterMax |
指定被检索的最大消息值的整数 |
返回值:
1. 如果函数取得 WM_QUIT 之外的其他消息,返回非零值;
2. 如果函数取得 WM_QUIT 消息,返回值是零;
3. 如果出现了错误,返回值是 -1。
8:TranslateMessage
函数功能:
TranslateMessage 函数将虚拟键消息转换为字符消息,字符消息被寄送到当前线程的消息队列里。
当下一次线程调用函数 GetMessage 或PeekMessage 时被读出。
API 函数原型:
BOOL WINAPI TranslateMessage(
_In_ constMSG *lpMsg
);
参数解析:
参数 |
含义 |
lpMsg |
指向含有消息的 MSG 结构的指针 |
返回值:
1. 如果消息被转换(字符消息被寄送到当前线程的消息队列里)则返回非零值;
2. 如果消息是 WM_KEYDOWN,WM_KEYUPWM_SYSKEYDOWN 或 WM_SYSKEYUP,返回非零值,不考虑转换;
3. 如果消息没被转换(字符消息没被寄送到调用线程的消息队列里)则返回值是零。
9: DispatchMessage
函数功能:
DispatchMessage 函数分派一个消息给窗口过程(回调函数),通常该消息从 GetMessage 函数获得。Windows 的控制权在该函数交给了应用程序。
API 函数原型:
LRESULT WINAPIDispatchMessage(
_In_ constMSG *lpmsg
);
参数解析:
参数 |
含义 |
lpmsg |
指向含有消息的 MSG结构 的指针 |
返回值:
1. 返回值是窗口过程返回的值;
2. 尽管返回值的含义依赖于被分派的消息,但返回值通常被忽略。
备注:
1. MSG 结构必须包含有效的消息值。
2. 如果参数 lpmsg 指向一个 WM_TIMER 消息,并且 WM_TIMER 消息的参数 lParam 不为 NULL,则调用 lParam 指向的函数,而不是调用窗口程序。
10:PAINTSTRUCT 结构
PAINTSTRUCT 结构包含一些窗口过程用来对客户区进行绘制的信息。
结构原型:
typedef struct tagPAINTSTRUCT{
HDC hdc;
BOOL fErase;
RECT rcPaint;
BOOL fRestore;
BOOL fIncUpdate;
BYTErgbReserved[32];
} PAINTSTRUCT, *PPAINTSTRUCT;
成员解析:
成员 |
含义 |
hdc |
用于绘制的设备环境句柄 |
fErase |
1. 表示背景是否必须擦除,如果为非零值则擦除背景,否则不擦除背景 |
rcPaint |
一个 RECT结构,指定左上角和右下角的坐标确定一个要绘制的矩形范围 |
fRestore |
系统保留 |
fIncUpdate |
系统保留 |
rgbReserved |
系统保留 |
11:RECT 结构
RECT 结构定义了一个矩形的左上角和右下角的坐标。
结构原型:
typedef struct _RECT {
LONG left;
LONG top;
LONG right;
LONG bottom;
} RECT, *PRECT;
成员解析:
成员 |
含义 |
left |
指定矩形左上角的 x 坐标 |
top |
指定矩形左上角的 y 坐标 |
right |
指定矩形右下角的 x 坐标 |
bottom |
指定矩形右下角的 y 坐标 |
12:BeginPaint
函数功能:
BeginPaint 函数为指定窗口进行绘画工作的准备,并用将和绘画有关的信息填充到一个 PAINTSTRUCT结构中。
API 函数原型:
HDC BeginPaint(
_In_ HWND hwnd,
_Out_ LPPAINTSTRUCTlpPaint
);
参数解析:
参数 |
含义 |
hwnd |
需要重新绘制的窗口句柄 |
lpPaint |
指向 PAINTSTRUCT结构的指针,用于存放绘画相关的信息 |
返回值:
1. 如果函数成功,返回值是指定窗口的“显示设备描述表”句柄;
2. 如果函数失败,返回值是 NULL,表明没有得到显示设备的内容。
备注:
1. BeginPaint 函数自动设置显示设备内容的剪切区域,而排除任何更新区域外的区域。该更新区域可以通过 InvalidateRect 或 InvalidateRgn 函数设置,也可以是系统在改变大小、移动、创建、滚动后设置的,或者其他的影响客户区的操作来设置的。
2. 如果更新区域被标记为可擦除的,BeginPaint 发送一个 WM_ERASEBKGND 消息给窗口。
3. 一个应用程序除了响应 WM_PAINT 消息外,不应该调用 BeginPaint。
4. 每次调用 BeginPaint 都应该有相应的 EndPaint 函数。
5. 如果被绘画的客户区中有一个 caret(caret:插入符。是窗口客户区中的一个闪烁的线,块,或位图。插入符通常表示文本或图形将被插入的地方。即一闪一闪的光标),BeginPaint 自动隐藏该符号,而保证它不被擦除。
6. 如果窗口类有一个背景刷,BeginPaint 使用这个刷子来擦除更新区域的背景。
13:GetClientRect
函数原型:
GetClientRect 函数用于获取窗口客户区的坐标,客户区坐标指定客户区的左上角和右下角。
由于客户区坐标是相对窗口客户区的左上角而言的,因此左上角坐标为(0,0)
API 函数原型:
BOOL WINAPI GetClientRect(
_In_ HWND hWnd,
_Out_ LPRECTlpRect
);
参数解析:
参数 |
含义 |
hWnd |
需要获取客户区坐标的窗口句柄 |
lpRect |
1. 指向 RECT结构的指针,该结构有四个成员,分别为 left、top、right 和 bottom |
返回值:
1. 如果函数成功,返回值是非 0;
2. 如果函数失败,返回值是 0。
14:DrawText
函数原型:
DrawText 函数在指定的矩形里写入格式化的正文,根据指定的方法对正文格式化(扩展的制表符,字符对齐、折行等)。
需要指定更多的格式选项,可以使用 DrawTextEx 函数。
API 函数原型:
int DrawText(
_In_ HDC hDC,
_Inout_ LPCTSTRlpchText,
_In_ int nCount,
_Inout_ LPRECTlpRect,
_In_ UINT uFormat
);
参数解析:
参数 |
含义 |
hDC |
指定“显示设备描述表”句柄 |
lpchText |
1. 指向将被写入的字符串的指针,如果参数 nCount 是 -1,则字符串必须是以 \0 结束的 |
nCount |
1. 指向字符串中的字符数 |
lpRect |
指向 RECT结构的指针,其中包含文本将被置于其中的矩形的信息(按逻辑坐标) |
uFormat |
1. 指定格式化文本的方法 |
uFormat 参数各种标志解析
标志 |
含义 |
DT_BOTTOM |
对齐文字到矩形的底部,当且仅当设置了 DT_SINGLELINE 标志才有效 |
DT_CALCRECT |
1. 这个参数决定矩形的宽度和高度 |
DT_CENTER |
文本水平居中显示 |
DT_EDITCONTROL |
将拥有多行编辑控件的正文显示特性(尤其是平均字符宽度的计算方法,并且不会显示不可见的最后一行) |
DT_END_ELLIPSIS |
1. 对于显示的文本,如果结束的字符串的范围不在矩形内,它会被截断并以省略号标识 |
DT_EXPANDTABS |
1. 扩展制表符,每个制表符的缺省字符数是 8 |
DT_EXTERNALLEADING |
在行的高度里包含字体的外部标头(通常外部标头不被包含在正文行的高度里) |
DT_HIDEPREFIX |
1. 忽略正文中的前缀字符(&),并且前缀字符后面的字母不会出现下划线,其它前缀字符的调用方式不受影响 |
DT_INTERNAL |
用系统字体来计算正文尺寸 |
DT_LEFT |
正文左对齐 |
DT_MODIFYSTRING |
1. 允许系统修改给定的字符串来匹配显示的正文 |
DT_NOCLIP |
无裁剪绘制,使用 DT_NOCLIP 可以提高 DrawText 的效率 |
DT_NOFULLWIDTHCHARBREAK |
1. 在宽字符的字符串中防止行断开,因此折行规则相当于单字符的字符串 |
DT_NOPREFIX |
1. 关闭前缀字符的处理(通常 DrawText 解释 & 为给其后的字符加下划线,解释 && 为显示单个 &) |
DT_PATH_ELLIPSIS |
1. 对于过长的正文,自动替换字符串中间的字符为省略号(...),以确保结果能在合适的矩形内显示 |
DT_PREFIXONLY |
1. 仅仅在(&)前缀字符的位置下绘制一个下划线,但不绘制字符串中的任何其他字符 |
DT_RIGHT |
正文右对齐 |
DT_RTLREADING |
当设备环境的字体是希伯来文或阿拉伯文字体时,为双向正文安排从右到左的阅读顺序 |
DT_SINGLELINE |
显示正文的同一行,回车和换行符都不能换行 |
DT_TABSTOP |
1. 设置制表符,参数 uFormat 的 8~15 位(低位字中的高位字节)指定每个制表符的字符数,每个制表符的缺省字符数是 8 |
DT_TOP |
正文顶端对齐 |
DT_VCENTER |
使正文在矩形中垂直居中,当且仅当设置了 DT_SINGLELINE 标志才有效 |
DT_WORDBREAK |
1. 当一行中的字符将会延伸到由 lpRect 指定的矩形的边框时,此行自动地在单词之间断开 |
DT_WORD_ELLIPSIS |
截短不符合矩形的正文,并增加省略号(与 DT_END_ELLIPSIS 类似) |
返回值:
1. 如果函数调用成功,返回值是正文的高度(逻辑单位);
2. 如果指定了 DT_VCENTER 或 DT_BOTTOM,返回值是 lpRect -> top 到绘制的正文的底部的偏移值;
3. 如果函数调用失败,返回值是 0。
备注:
1. 函数 DrawText 用设备环境中的字体选择、正文颜色和背景颜色来写正文。
2. DrawText 裁剪正文,使之不会出现在指定矩形的外面,除非指定了 DT_NOCLIP。
3. 除非使用 DT_SINGLELINE 格式化,否则其余的格式都认为正文有多行。
4. 如果选择的字体对指定的矩形而言太大,DrawText 并不会试图去换成一种小字体。
5. 设备环境的正文对齐方式必须包括 TA_LEFT, TA_TOP 和 TA_NOUPDATECP 标志。
15:EndPaint
函数原型:
EndPaint 函数标记指定窗口的绘画过程结束。
这个函数在每次调用 BeginPaint 函数之后被调用(释放设备描述表),但仅仅在绘画完成以后。
API 函数原型:
BOOL EndPaint(
_In_ HWNDhWnd,
_In_ constPAINTSTRUCT *lpPaint
);
参数解析:
参数 |
含义 |
hWnd |
已经被重新绘制的窗口句柄 |
lpPaint |
指向 PAINTSTRUCT结构的指针,用于存放绘画相关的信息(该指针在调用 BeginPaint 时被赋值) |
返回值:
该函数返回值始终是非 0。
16:PostQuitMessage
函数原型:
PostQuitMessage 函数向系统表明有个线程有终止(退出)请求。这个函数通常用来响应WM_DESTROY 消息。
API 函数原型:
VOID WINAPI PostQuitMessage(
_In_ intnExitCode
);
参数解析:
参数 |
含义 |
nExitCode |
指定应用程序的退出代码,此值被用作 WM_QUIT 消息的 wParam 参数 |
返回值: 该函数没有返回值。
备注:
1. PostQuitMessage 函数的功能是发送一个 WM_QUIT 消息给线程的消息队列并立即返回。
2. 当线程从消息队列里取得 WM_QUIT 消息时,应当退出消息循环并将返回系统,返回给系统的退出值必须是消息WM_QUIT 的 wParam 参数(所以 WinMain 函数的返回值是 msg.wParam)。
17:DefWindowProc
函数功能:
DefWindowProc 函数调用缺省的窗口过程来处理那些窗口过程没有处理的任何消息,该函数是为了确保每个消息都被处理。
DefWindowProc函数传入和窗口过程同样的参数。
API 函数原型:
LRESULT WINAPI DefWindowProc(
_In_ HWNDhWnd,
_In_ UINTMsg,
_In_ WPARAMwParam,
_In_ LPARAMlParam
);
参数解析:
参数 |
含义 |
hWnd |
指定接收消息的窗口句柄 |
Msg |
1. 消息的标识符,由于数值不便于记忆,所以 Windows 将消息对应的数值定义为 WM_XXX 宏的形式 |
wParam |
指定消息的附加消息,确切的含义取决于消息成员的值 |
lParam |
指定消息的附加消息,确切的含义取决于消息成员的值 |
返回值:
1. 返回值就是消息处理结果,它取决于发送的消息。
18: DestroyWindow
函数功能:
DestroyWindow 用于销毁一个指定的窗口,该函数通过发送 WM_DESTROY 消息和 WM_NCDESTROY 消息使窗口无效并移除其键盘焦点。
DestroyWindow 函数还销毁窗口的菜单,清空线程的消息队列,销毁与窗口过程相关的定时器,解除窗口对剪贴板的拥有权,打断剪贴板器的查看链。
如果指定的窗口拥有子窗口或拥有其它窗口,该函数将自动先销毁其子窗口或所拥有的窗口,然后再销毁自身。
API 函数原型:
BOOL WINAPI DestroyWindow(
_In_ HWNDhWnd
);
参数解析:
参数 |
含义 |
hWnd |
指定将被销毁的窗口句柄 |
返回值:
1. 如果函数成功执行,返回值为非 0;
2. 如果函数执行失败,返回值为 0。
备注:
1. 一个线程不能使用本函数销毁别的线程创建的窗口。
2. 如果这个窗口是一个不具有 WS_EX_NOPARENTNOTIFY 样式的子窗口,则销毁窗口时将发WM_PARENTNOTIFY 消息给其父窗口。
19:TextOut
函数功能:
TextOut 函数使用当前选择的字体、背景颜色和文本颜色,将一个字符串绘画于窗口的指定位置。
API 函数原型:
注释:_In_ 说明该参数是输入的,_opt_ 说明该参数是可选参数。
BOOL TextOut(
_In_ HDChdc,
_In_ intnXStart,
_In_ intnYStart,
_In_ LPCTSTRlpString,
_In_ intcchString
);
参数解析:
参数 |
含义 |
hdc |
设备环境句柄 |
nXStart |
指定用于字符串对齐的基准点的逻辑 x 坐标(有关基准点请看下边备注) |
nYStart |
指定用于字符串对齐的基准点的逻辑 y 坐标 |
lpString |
1. 指向将被绘制字符串的指针 |
cchString |
lpString 字符串的长度(有多少个字符) |
返回值:
1. 如果函数调用成功,返回值为非 0;
2. 如果函数调用失败,返回值为 0。
备注:字符串对齐的基准点取决于当前的文本对齐模式。应用程序可以通过调用 GetTextAlign 获得当前的文本对齐模式,通过调用SetTextAlign 修改该模式。
20:GetTextAlign
GetTextAlign 函数获得指定的设备环境下的文字对齐方式的设置。
API 函数原型:
注释:_In_ 说明该参数是输入的,_opt_ 说明该参数是可选参数。
UINT GetTextAlign(
_In_ HDChdc
);
参数解析:
参数 |
含义 |
hdc |
指定设备环境句柄 |
返回值:
1. 如果函数调用失败,返回值是 GDI_ERROR;
2. 如果函数调用成功,返回值是文字对齐标志的状态。
该返回值是下列值的组合:
值 |
含义 |
TA_BASELINE |
基准点在正文的基线上 |
TA_BOTTOM |
基准点在限定矩形的底边上(限定矩形的含义请看下边备注) |
TA_TOP |
基准点在限定矩形的顶边上 |
TA_CENTER |
基准点在限定矩形的中心水平对齐位置 |
TA_LEFT |
基准点在限定矩形的左边上 |
TA_RIGHT |
基准点在限定矩形的右边上 |
TA_RTLREADING |
1. 适用于中东 Windows 版本:正文从右到左的阅读顺序排列,与缺省的从左到右正好相反 |
TA_NOUPDATECP |
每次输出调用后当前状态不改变 |
TA_UPDATECP |
每次输出调用后当前状态改变 |
若当前字体有一条缺省的垂直基线(如Kanji),下列值用于取代 TA_BASELINE 和 TA_CENTER:
值 |
含义 |
VTA_BASELINE |
基准点在正文的基线上 |
VTA_CENTER |
基准点与限定矩形的中心垂直对齐 |
备注:
1. 默认值是 TA_LEFT, TA_TOP 和 TA_NOUPDATECP
2. 限定矩形是指能将正文字符串的所有字符单元限定于其中的矩形
3. 限定矩形的尺寸可通过调用 GetTextExtentPoint32 来获得
4. 文字对齐标志决定 TextOut 和 ExtTextOut 如何将正文字符串与基准点对齐
5. 文字对齐标志不必是单个的标志位,可以等于0
6. 标志必须按相关的组来检查,如下:
TA_LEFT, TA_RIGHT, andTA_CENTER
TA_BOTTOM, TA_TOP, and TA_BASELINE
TA_NOUPDATECP and TA_UPDATECP
如果当前字体有缺省的垂直基线,相关的标志如下所示:
TA_LEFT, TA_RIGHT, andVTA_BASELINE
TA_BOTTOM, TA_TOP, and VTA_CENTER
TA_NOUPDATECP and TA_UPDATECP
7. 要验证一个特定的标志在返回值中被设置,应用程序必须执行以下步骤:
(例子:如何设置文本对齐模式)
对该标志及其相关标志实施位OR操作;
对结果和返回值实施位AND操作;
检查结果值和标志是否相等。
21:SetTextAlign
函数功能:
SetTextAlign 函数为指定设备环境设置文字的对齐标志。
API 函数原型:
UINT SetTextAlign(
_In_ HDChdc,
_In_ UINTfMode
);
参数解析:
参数 |
含义 |
hdc |
指定设备环境句柄 |
fMode |
1. 文本对齐标志 |
使用下面的列表中的掩码指定文本对齐方式:
值 |
含义 |
TA_BASELINE |
基准点在正文的基线上 |
TA_BOTTOM |
基准点在限定矩形的底边上(限定矩形的含义请看下边备注) |
TA_TOP |