gdi对象,在同一时刻只能使用同一类gdi对象(如画刷)
画刷
如果没有设置画刷,体统提供了一只白色的画刷,画了一个区域,这个区域是有描边。
在使用画刷画区域的时候,如果没有做任何gdi对象的设定,系统默认使用白色的画刷填充区域,默认使用黑色的笔来描边。
case WM_LBUTTONDOWN:
{
hdc = GetDC(hWnd);
//画刷和画笔操作
//HBRUSH hb= nullptr;//画刷句柄
////hb = (HBRUSH)GetStockObject(BLACK_BRUSH);//得到系统预设的画刷,黑边白底
////Rectangle(hdc, 100, 100, 200, 200);
//hb = CreateSolidBrush(0xff);//创建一个纯色的画刷
////hb = CreateHatchBrush(HS_BDIAGONAL, 0xff);//创建一个风格画刷
//SelectObject(hdc, hb);
//HPEN hp = CreatePen(PS_SOLID, 2, 0xff);//把边框的颜色给填上
//SelectObject(hdc, hp);
//Rectangle(hdc, 100, 100, 200, 200);//填充矩形
//Pie(hdc, 300, 300, 500, 500, 0, 0, 400, 400);//画饼图
//Chord(hdc, 100, 100, 600, 400, 0, 0, 350, 400);
//DeleteObject(hb);
//DeleteObject(hp);
//画刷操作2
HBRUSH hb2 = CreateHatchBrush(HS_BDIAGONAL, 0xff0000);
HPEN hp1 = CreatePen(PS_SOLID, 2, 0xff0000);
SelectObject(hdc, hb2);
SelectObject(hdc, hp1);
Ellipse(hdc, 200, 200, 600, 400);//填充圆
DeleteObject(hb2);
DeleteObject(hp1);
//位图操作
HBRUSH hb1 = nullptr;
HBITMAP hbit = (HBITMAP)LoadImage(hInst, _T("2.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
hb1 = CreatePatternBrush(hbit);//创建位图画刷
SelectObject(hdc, hb1);
Rectangle(hdc, 100, 100, 400, 400);//填充矩形
DeleteObject(hb1);
DeleteObject(hbit);
ReleaseDC(hWnd, hdc);
}
break;
字体
case WM_LBUTTONDOWN:
{//字体
hdc = GetDC(hWnd);
HFONT hfont = nullptr;
//hfont = (HFONT)GetStockObject(OEM_FIXED_FONT);检索句柄股票画笔,笔刷,字体,或调色板之一
hfont = CreateFont(40,//字体的高度
0,//字体的宽度
0,//文字的倾斜角度
0,//基线的倾斜程度
0,//笔画的粗细,400以下为细体,700以上为粗体
true,//斜体
true,//下划线
true,//水平线
ANSI_CHARSET,//字符集
0, 0, 0, 0,
_T("楷体"));//字样名
SelectObject(hdc, hfont);
//锚点 默认为左上角
for (int i = -1; i < 2; ++i)
{
for (int j = -1; j < 2; ++j)
{
SetPixel(hdc, 300+i, 200+j, 0xff);
}
}
HBRUSH hr = CreateSolidBrush(0xff0000);
SelectObject(hdc, hr);
Rectangle(hdc, 0, 0, 1000, 600);
DeleteObject(hr);
//hdc上面的所有文字显示都会以右下角为锚点
SetTextAlign(hdc, TA_BOTTOM | TA_RIGHT);//修改文字对齐方式
SetTextColor(hdc, 0xff);//修改文字颜色
//SetBkColor(hdc, 0xff0000);//设置文字的背景色
SetBkMode(hdc, TRANSPARENT);//OPAQUE 默认模式,用自身背景色来填充整个背景
TextOut(hdc, 300, 200, _T("hello"),_tcslen(_T("hello")));
//DrawText();//在区域中显示文字
DeleteObject(hfont);
ReleaseDC(hWnd, hdc);
}
break;
位图:
gdi里面只支持位图(.bmp),jpg,png格式可以用格式化工厂进行修改成bmp格式使用
case WM_LBUTTONDOWN:
{
hdc = GetDC(hWnd);
HDC bitDc = CreateCompatibleDC(hdc);//该函数创建一个与应用程序的当前显示器兼容的内存设备上下文环境
HBITMAP hbit = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP1));//加载LoadBitmap资源(需要先设定好资源)
SelectObject(bitDc, hbit);
BitBlt(hdc, 50, 50, 1024, 768, bitDc, 0, 0,SRCCOPY);//,将一幅位图从一个设备场景复制到另一个
DeleteObject(hbit);
DeleteDC(bitDc);
ReleaseDC(hWnd, hdc);
}
break;