CRect rcCli;
GetClientRect(&rcCli);
CRect rc(10,10,50,50);
CPaintDC dc(this); CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap mp;
mp.CreateCompatibleBitmap(&dc, rc.Width(), rc.Height());
memDC.SelectObject(mp); CPen pen(PS_SOLID, 1, CLAYERDLG_BORDER_COLOR);
memDC.SelectObject(&pen);
CBrush brush(CLAYERDLG_BK_COLOR);
memDC.SelectObject(&brush);
CRect rcFrame(0,0,rc.Width(), rc.Height());
memDC.RoundRect(rcFrame, CPoint(2, 2));
BitBlt(dc.m_hDC, rc.left, rc.top, rc.Width(), rc.Height(), memDC.m_hDC, 0, 0, SRCCOPY);网上找了下,说用CreateRoundRectRgn和FillRgn代替RoundRect。什么意思?
把红的这句,用rgnWnd.CreateRoundRectRgn(rcCli.left, rcCli.top, rcCli.right, rcCli.bottom, 2, 2);
memDC.FillRgn(rgnWnd, brush);代替就行了?我试了下,好像还是一样边角是黑色。而且FillRgn只是填充画刷,连边框都没了。
最好是在OnPreCreate和OnSize中设置。
怎么把透明的贴上去?边角让他保持原有的背景色?memDC.FillSolidRec(rcCli, RGB(200,240,200));这样的话,背景就变成RGB(200,240,200)这个颜色了
SelectClipRgn 就可以了
我的意思是现在一个menDC上绘制一个复杂的圆角矩形,或则复杂的其他非规则图形。然后把memDC的内容贴到对话框上。怎么绘制我会,但是怎么实现绘制到memDc上后,然后贴到对话框上。双缓存。
bitblt()
到 对话框dc
CRgn rgn;
rgn.CreateRoundRectRgn(rcFrame.left,rcFrame.top,rcFrame.right,rcFrame.bottom,50, 50);/
else
{
#define R 50
#define W 300
#define H 200
#define O_X 30
#define O_Y 20
CPaintDC dc(this);
//
CDC memDC;
memDC.CreateCompatibleDC(&dc);
//
CBitmap bmp;
bmp.CreatCompatibleBitmap(&dc,W,H);
memDC.SelectObject(bmp);
CBrush brush;
brush.CreateSolidBrush(RGB(196,196,255));
memDC.SelectObject(brush);
// 蓝底
CRgn rgn;
rgn.CreateRoundRectRgn(0,0,W,H,R,R);
memDC.FillRgn(&rgn,&brush);
// 红边
CBrush brush1;
brush1.CreateSolidBrush(RGB(255,0,0));
memDC.SelectObject(brush1);
memDC.FrameRgn(&rgn,&brush1,1,1);
// 去4个角
CRgn rgn1;
rgn1.CreateRoundRectRgn(O_X,O_Y,W+O_X,H+O_Y,R,R);
dc.SelectClipRgn(&rgn1);
dc.BitBlt(O_X,O_Y,W+O_X,H+O_Y,&memDC,0,0,SRCCOPY);
}