WindowsAPI

WindowsAPI 封装在 GDI kernel user

Windows有三大核心部件,它们分别是kernel、user和GDI。我们所调用的大部分API函数都是封装在这三个子系统中的:kernel负责内存管理、文件输入输出及任务管理等,user主要负责所有的窗口管理,也就是用户界面,还有GDI就是图形设备接口的缩写,负责在屏幕或打印机上绘制文本和图形。

设备环境

设备环境(Device Context)也叫设备上下文或设备描述表,它到底是一个什么东西呢?实际上它是GDI内部维护的一个数据结构,它与特定的显示设备或打印设备相关联。这个数据结构里边存放在着一些属性,决定着需要打印的文本的颜色、文本的背景色、以及对本对齐的基准点等等。
其他0--------------------------------------------
InvalidateRect(); // 指定重绘一块矩形区域,可以指定整个窗口为无效区域
<> MAX(); // 比较
<> MIN(); // 比较
MessageBeep(0); // 登的一声
获取系统信息-----------------------------------
GetSystemMetrics(nIndex); // 函数返回windows中各种图形项的尺寸信息, 以像素为单位(甚至滚动条的尺寸...)
GetDeviceCaps() // 函数用于获得指定设备的一些特定信息
GetTextMetrics(); // 文本尺寸的测量, 将当前字体的信息填充到指定缓冲区, TEXTMETRIC 结构, 可以计算出文本的行距、间距等信息
字符串函数--------------------------------------
wprintf(stdout, TEXT("%lc"), wc); %lc:宽字符, 实际编程中不要使用该函数, 使用 StringCchPrintf() 或 StringCbPrint()
lstrlen(); // 计算宽字符字符串字符个数, 需要字符串结尾是'\0'
lstrcpy(); // 拷贝
lstrcat(); // 拼接
安全的字符串处理函数(char 和 wchar_t 都可以用):
"strsafe.h" StringCchPrintf(); // wprintf
"strsafe.h" StringCchLength(); // lstrlen
"strsafe.h" StringCchCopy(); // lstrcpy
"strsafe.h" StringCchCat(); // lstrcat
绘图/文本5---------------------------------------
HDC : 设备环境据句柄
PAINTSTRUCT : 这个结构中的字段 hdc 和 BeginPaint 函数返回的设备环境句柄的值相同。PAINTSTRUCT 结构还包含了一个名为 rcPaint 的矩形结构,该结构定义了一个包围窗户区无效范围的矩形。使用从 BeginPaint 函数获取的设备环境句柄,就只能在这个矩区域内绘图。调用 BeginPaint 函数将使这个区域有效。
TEXTMETRIC : 当前文本的信息, 默认为像素
HDC BeginPaint(hwnd, &ps); //获取窗口设备环境句柄 DC , 只在 WM_PAINT 中使用, 客户区 DC
HDC EndPaint(hwnd, &ps); // 获取窗口设备环境句柄 DC , 只在 WM_PAINT 中使用
GetDC(); // 获取客户区 HDC
GetWindowDC(); // 获取整个窗口的 DC, 包括非客户区
ReleaseDC(); // 释放 GetWindowDC(), GetDC()
DrawText(TEXT("Hello Word!"), -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); // 绘制文本, 无法指定文本d的确切位置
BOOL TextOut(hdc, 400, 300, TEXT("test"), 4); // 显示文本最重要的函数,可以指定显示文本的位置, 默认左上角对齐,可以通过GetTextAlign()和SetTextAlign()修改
SetTextAlign(hdc, GetTextAlign(hdc) | TA_RIGHT); // 获得和设置指定一个设备环境的文本对齐模式,限定矩形是指能将正文字符串的所有字符单元限定于其中的矩形
GetTextMetrics(); // 文本尺寸的测量, 将当前字体的信息填充到指定缓冲区, TEXTMETRIC 结构, 可以计算出文本的行距、间距等信息
InvalidateRect(); // 重绘一片矩形区域或整个窗口, 发送的是队列消息
SetPixel(); // 绘制一个x像素点为指定颜色
GetPixel(); // 获得一个像素点的颜色
SetPixelV(); // 比SetPixel函数快, 返回bool类型
COLORREF // 表示颜色的类型 4个字节
RGB(); // 创建一个 COLORREF 类型的变量
GetRValue() // 从 COLORREF 获取红色
GetGValue() // 从 COLORREF 获取绿色
GetBValue() // 从 COLORREF 获取蓝色
MoveToEx() // 指定绘图的起点, 影响所有的绘图函数, 也可以获得之前的位置坐标, 默认起点是(0, 0)
LineTo() // 从绘图起点画一条直线到终点, 将起点坐标重置位终点坐标
GetCurrentPositionEx(); // 获得当前位置的坐标, 存放在POINT 的指针中
POINT // 存放 x, y 坐标的类型
Polyline(); // 画折线
PolylineTo(); // 画折线, 会修改当前位置
PolyPolyline(); // 同时绘制多条折线
PolyBezier(); // 绘制贝塞尔曲线
PolyBezierTo(); // 绘制贝塞尔q曲线, 会改变当前位置
既绘制边框又填充内部
Rectangle(); // 矩形
Ellipse(); // 椭圆
RoundRect(); // 圆角矩形
Arc(); // 圆弧, 不是封闭图形
Chord(); // 圆弧和弦的封闭区域
Pie(); // 扇形封闭区域
Polygon(); //多边形
PolyPolygon(); // 多个多边形
HBRUSH : 画刷的句柄
HPEN : 画笔的句柄
SelectObject(hdc, GetStockObject(BLACK_BRUSH)); // 设置画笔/画刷的颜色
GetStockObject() // 获得Windows预设的画笔/画刷/字体/区域等句柄
CreatePen(); // 使用指定的颜色、样式、宽度等创建画笔,默认向两边扩展, 可以设置向内扩展
CreatePenIndirect(); // 与 CreatePen() 创建的画笔相同, LOGPEN 结构, 一次可以创建多个画笔
DeleteObject(); //删除画笔、画刷、字体、位图、区域、调色板句柄, 由 GetStockObject() 返回的Windows的默认不可以删除,正在使用的画笔不可以删除, 只有自定义的才可以删除
GetObject(); // 获取指定的画笔等句柄的信息
GetCurrentObject(); // 获取被选入指定环境设备中的指定对象类型的句柄
SetBkColor(); // 设置背景颜色, 模式应当为不透明, 用来填充CreatePen非实线画笔的空隙、阴影画刷和字符的背景颜色, 填充TextOut输出字符的背景颜色, 不会填充ExtCreatePen() 函数创建的画笔
SetBkMode(); // 设置背景模式:透明和不透明
GetBkMode(); // 获取背景模式
SetROP2(); // 默认显示的是画笔的颜色
GetROP2();
CreateSolidBrush(); // 创建一个实心画刷
CreateHatchBrush(); // 创建一个阴影画刷
CreateBrushIndirect(); // 创建一个指定的画刷
消息5---------------------------------------------
GetMessage(&msg, NULL, 0, 0); // 获取一个消息放入消息队列中, 消息是WM_QUIT时,返回0
DispatchMessage(&msg); // 将消息发给操作系统,操作系统调用回调函数
TranslateMessage(&msg); // 将消息内容翻译成该有的样子
DefWindowPorc(hwnd, message, wParam, lParam); // 将其他消息默认处理
PostQuitMessage(0); // 发送WM_QUIT消息
获取HDC3-----------------------------------------
GetDC(); // 获取客户区 HDC
GetWindowDC(); // 获取整个窗口的 DC, 包括非客户区
ReleaseDC(); // 释放 GetWindowDC(), GetDC()的 DC
BeginPaint(); // 获取客户区 DC , 只在 WM_PAINT 中使用
EndPaint(hwnd, &ps); // 释放窗口设备环境句柄 HDC , 只在 WM_PAINT 中使用
CreateDC(TEXT(“DISPLAY”), NULL, NULL, NULL); // (获取整个屏幕的设备环境句柄) 更通用的获取设备环境句柄的函数
CreateIC(); //获取一些关于设备环境的信息, 不需要绘制, 获取一个"信息上下文"的句柄
CreateCompatibleDC(hdc); // 内存设备环境, 创建一个与指定设备兼容的内存设备环境 DC
DeleteDC(); //
CreateMetaFile(); // 图元文件
CloseMetaFile(); //
DeleteMetaFile(); //
窗口6----------------------------------------------
int WINAPI MessageBox(); // 弹窗
DestoryWindow(); //销毁窗口的句柄, 发送 WM_DESTROY 消息
HWND CreateWindow(); // 创建窗口,获取窗口句柄, 发送一系列非队列消息
RegisterClass(); // 注册窗口类
ShowWindow(); // 显示窗口, 发送一系列非队列消息
UpdateWindow(); // 更新窗口, 发送一系列非队列消息, 其中之一是非队列消息的重绘消息, 如果窗口更新的区域不为空,UpdateWindow 函数通过发送一个 WM_PAINT 消息来更新指定窗口的客户区。如果更新区域为空,则不发送消息。
获取消息信息2------------------------------------
int GET_X_LPARAM(LPARAM lParam); // 通过lParam获取相关消息触发的坐标
int GET_Y_LPARAM(LPARAM lParam); // 通过lParam获取相关消息触发的坐标
注:此时不要再使用 LOWORD 和 HIWORD 去获取鼠标的坐标了,因为在多显示器的情况下会得到错误的坐标。
LOWORD(); // 获取低16位的信息
HIWORD(); // 获取高16位的信息
客户区5--------------------------------------------
GetClientRect(hwnd, &rect); // 获取客户区的矩形大小
GetDC(); // 获取客户区 DC
ReleaseDC(); // 释放 GetWindowDC(), GetDC()
BeginPaint(); // 获取客户区 DC , 只在 WM_PAINT 中使用
EndPaint(hwnd, &ps); //获取窗口设备环境句柄 HDC , 只在 WM_PAINT 中使用
GetClientRect(); // 获取客户区矩形区域, 效率低, 可以响应 WM_SIZE 获得客户区尺寸
非客户区0-----------------------------------------
客户区和非客户区2-------------------------------
GetWindowDC(); // 获取整个窗口的 HDC, 包括非客户区
ReleaseDC(); // 释放 GetWindowDC(), GetDC()
GetWindowsRect(); // 获取整个窗口的矩形区域
滚动条相关函数-----------------------------------
SetScrollRange() // 设置滚动条范围
SetScrollPos() // 设置滑块的位置
GetScrollRange() // 获得滚动条范围
GetScrollPos() // 获得滑块的位置
尽量使用新的滚动条函数
ShowScrollBar() //
SCROLLINFO //
GetScrollInfo() //
SetScrollInfo() //
ScrollWindow() // 函数滚动指定窗口的客户区内容, 可以指定滚动区域, 只滚动显示的内容, 会出现失效区域, 此时可以通过