blt是不是只能copy矩形呀,如果想copy多边形(每个角都是直角),那该怎么做呢?

解决方案 »

  1.   

    掩码. 要生成掩码图,然后 Blt(..., SRCAND); Blt(...,SRCPAINT);
      

  2.   

    先用SelectClipRgn指定不规则区域,然后再blt到这个窗口上
    这个clip region可以限定被覆盖的窗口的范围
      

  3.   

    给你一段代码,让你参考一个, 节选自我写的一个软件:
    // 创建掩码图
    CClientDC  dc(this);
    CDC dcmem;
    dcmem.CreateCompatibleDC(&dc);
    CBitmap  bmp;
    CSize  szbmp = GetPicSize();
    bmp.CreateCompatibleBitmap(&dc, szbmp.cx, szbmp.cy); CBitmap* pob = dcmem.SelectObject(&bmp); dcmem.FillSolidRect(0,0,szbmp.cx, szbmp.cy, 0xffffff);

    dcmem.SelectStockObject(NULL_PEN);
    dcmem.SelectStockObject(BLACK_BRUSH); // 在白色掩码图上绘制黑色剪切区域
    switch(m_iOpMode)
    {
    case 1:
    dcmem.Rectangle(&m_rcCut);
    break; case 2:
    dcmem.Ellipse(&m_rcCut);
    break;
    case 3:
    //dcmem.SetPolyFillMode(WINDING);
    dcmem.Polygon(m_apt.GetData(), m_apt.GetSize());
    break;
    } CDC dcbmp;
    dcbmp.CreateCompatibleDC(&dc);
    CBitmap* odbmp = dcbmp.SelectObject(&m_bmp); // 将掩码位图与原图像进行或运算.
    dcbmp.BitBlt(0,0,szbmp.cx,szbmp.cy, &dcmem, 0,0,SRCPAINT); dcbmp.SelectObject(odbmp); Invalidate(); dcmem.SelectObject(pob);