MFC PatBlt

来源:互联网 发布:javascript alert 1 编辑:程序博客网 时间:2024/06/06 02:43

PatBlt函数

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);
0 0
原创粉丝点击