窗口的本质
HWND
HWND是全局句柄表中的索引。
GDI 图形设备接口(Graphics Device Interface)
- 设备对象(HWND)。
- DC(设备上下文、Device Contexts)。
- 图形对象。
图形对象 | 作用 |
---|---|
画笔(Pen) | 影响线条,包括颜色、粗细、虚实、箭头形状等。 |
画刷(Brushes) | 影响对形状、区域等操作,如使用的颜色、是否有阴影等。 |
字体(FONTS) | 影响文字输出的字体。 |
位图(Bitmaps) | 影响位图创建、位图操作和保存等。 |
画线
#include <iostream>
#include <Windows.h>
int main(int argc, char* argv[])
{
//1.设备对象 就是你要把东西画在什么地方
//这里使用的是记事本的窗口句柄
HWND hwnd = (HWND)0x004E07FC;
//2.DC 设备上下文对象
//把它看成一块内存, 画在内存中, 然后再打印到屏幕上
//获取设备上下文对象
HDC hdc = GetDC(hwnd);
//3.图形对象
//创建画笔对象 设置线条属性
HPEN pen = CreatePen(PS_SOLID, 5, RGB(0xFF, 0x00, 0x00));
//4.关联
//用新的画笔替换掉默认的画笔
SelectObject(hdc, pen);
//5.开始画线
//GDI32.DLL
MoveToEx(hdc, 50, 100, NULL); //开始位置
LineTo(hdc, 100, 100); //结束位置
//6.销毁对象 释放资源 注意对应关系
DeleteObject(pen); //使用CreatePen()就要使用DeleteObject()
ReleaseDC(hwnd, hdc); //使用GetDC()就要使用ReleaseDC()
std::cin.get();
return 0;
}
画矩形
#include <iostream>
#include <Windows.h>
int main(int argc, char* argv[])
{
//1.设备对象 就是你要把东西画在什么地方
//这里使用的是记事本的窗口句柄
HWND hwnd = (HWND)0x004E07FC;
//2.DC 设备上下文对象
//把它看成一块内存, 画在内存中, 然后再打印到屏幕上
//获取设备上下文对象
HDC hdc = GetDC(hwnd);
//3.图形对象
//获取默认画刷 DC_BRUSH 可以设置颜色
HBRUSH hbrush = (HBRUSH)GetStockObject(DC_BRUSH);
//4.关联
SelectObject(hdc, hbrush);
//5.开始画矩形
//设置画刷颜色
SetDCBrushColor(hdc, RGB(0xFF, 0x00, 0x00));
//画矩形
Rectangle(hdc, 0, 0, 400, 400);
//6.销毁对象 释放资源
DeleteObject(hbrush);
ReleaseDC(hwnd, hdc);
std::cin.get();
return 0;
}