PatBlt()函数的名字其实是一个缩写,全称应该是“图样块传送”(PATtern BLock Transfer, 缩写后就是PatBlt),从这个名字上看,它好像只是简单的复制画刷(或叫图样),直到填充完指定的矩形之后就结束了,其实这个函数可没有这么简单,它在复制画刷之前,将根据光珊操作码(raster operation,缩写是ROP)来组合图样中的像素与目标DC中相同位置上的像素而形成最终的图像。光珊操作码(ROP)在组合的过程中起到了非常重要的作用,实质上ROP是一种位操作符,一共有256种,PatBlt()函数可以接受那些需要图样和目标位图的ROP。下面的表格列出了该函数经常用到的5个ROP:
ROP 描述 PATCOPY 拷贝图样到目标位图中 PATINVERT 用图样的像素或(即位操作OR)目标位图DSTINVERT 将目标位图的像素值取反(即非目标图的像素值) BLACKNESS 将所有的输出都设为二进制的0 WHITENESS 将所有的输出都设为二进制的1 PatBlt()有五个参数,前四个分别是要填充的区域(最左边,最右边,宽度,高度)设置背景.以前作业用过; BOOL CSampleView::OnEraseBkgnd(CDC* pDC)
{
// 设置所要求背景色的刷子
CBrush backBrush(RGB(255, 128, 128));
// 保存旧刷子
CBrush* pOldBrush = pDC->SelectObject(&backBrush);
CRect rect;
pDC->GetClipBox(&rect); // 擦除所需的区域
pDC->PatBlt(rect.left, rect.top, rect.Width(), rect.Height(), PATCOPY);
pDC->SelectObject(pOldBrush);
return TRUE;
}
另一种方法:HBRUSH dlgtest::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
switch (nCtlColor)
{
case CTLCOLOR_BTN:
case CTLCOLOR_STATIC:
{
pDC->SetBkMode(TRANSPARENT);
}
case CTLCOLOR_DLG:
{
CBrush* back_brush;
COLORREF color;
color = (COLORREF) GetSysColor(COLOR_BTNFACE);
back_brush = new CBrush(color);
return (HBRUSH) (back_brush->m_hObject);
}
}
return(CFormView::OnCtlColor(pDC, pWnd, nCtlColor));
}
还没有试过,不知道行不行. 再附上一段贪吃蛇的源码 //分数提示显示文字
char szText[30] = "Score: ";
char szNum[20]; int iNowScore = iScores*100;
itoa(iNowScore,szNum,10);
strcat(szText, szNum);
RECT rt, rect;
GetClientRect(hAppWnd, &rt);
//墙的绘制
SelectObject(hdc,hbrushWall);
PatBlt(hdc,rt.left,rt.top,rt.right,rt.bottom,PATCOPY);
//内部游戏区的白色底平面
rect.left = rt.left+WALL_WIDTH;
rect.top = rt.top + WALL_HEIGHT;
rect.right = rt.right - WALL_WIDTH;
rect.bottom = rt.bottom - WALL_HEIGHT;
FillRect(hdc, &rect, (HBRUSH) (COLOR_WINDOW+1));
//分数提示板的绘制
/* hMemoryDC = CreateCompatibleDC(NULL);
hbmp = CreateCompatibleBitmap(hdc,265,55);
SelectObject(hMemoryDC,hbrushScore);
SelectObject(hMemoryDC,hbmp);
PatBlt(hMemoryDC,0,0,256,55,PATCOPY);
BitBlt(hdc,GetSystemMetrics(SM_CXSCREEN)/3,
10,256,55,hMemoryDC,0,0,SRCCOPY);
*/
BitBlt(hdc,GetSystemMetrics(SM_CXSCREEN)/3,
10,256,55,scoreDC,0,0,SRCCOPY);
MFC PatBlt
最新推荐文章于 2023-02-16 10:30:19 发布