16,472
社区成员
发帖
与我相关
我的任务
分享
dc.IntersectClipRect();
dc.ExcludeClipRect();
用这两个函数锁定对应的块分别画图,就可以相互不会越界了//以9楼的样子为例.
//假设你的窗口是 宽=1000,高=800;
// 上窗口: 宽=1000,高=80;
// 左窗口: 宽=600, 高=720;
//右上窗口: 宽=400,高=360;
//右下窗口: 宽=400,高=360;
//那么:
void CXXXX::OnPain()
{
CPaintDC dc(this);
CDC xDC;
xDC.CreateCompatibleDC(&dc); //双缓冲
CBitmap xTOP,xLEFT,xRU,xRD;//四个图
xTOP.CreateCompatibleBitmap(&dc,1000,80);
xLEFT.CreateCompatibleBitmap(&dc,600,720);
xRU.CreateCompatibleBitmap(&dc,400,360);
xRD.CreateCompatibleBitmap(&dc,400,360);
xDC.SelectObject(&xTOP); //画第一个图
OnDrawTop(&xDC); //自定义画标题的函数
dc.BitBlt(0,0,1000,80,&xDC,0,0,SRCCOPY);//把画好的图贴到窗口
xDC.SelectObject(&xLEFT); //画第二个图
OnDrawLeft(&xDC); //自定义画抛物线的函数
dc.BitBlt(0,80,600,720,&xDC,0,0,SRCCOPY);//把画好的图贴到窗口
xDC.SelectObject(&xRU); //画第三个图
OnDrawRU(&xDC); //自定义画正弦曲线的函数
dc.BitBlt(600,80,400,360,&xDC,0,0,SRCCOPY);//把画好的图贴到窗口
xDC.SelectObject(&xRD); //画第四个图
OnDrawRD(&xDC); //自定义画普通曲线的函数
dc.BitBlt(600,80,400,360,&xDC,0,0,SRCCOPY);//把画好的图贴到窗口
xTOP.DeleteObject();
xLEFT.DeleteObject();
xRU.DeleteObject();
xRD.DeleteObject();
xDC.DeleteDC();
}
void CXXXX::OnDrawTop(CDC *pDC)
{
pDC->......//画吧,想画啥就画啥
}
void CXXXX::OnDrawLeft(CDC *pDC)
{
pDC->......//画吧,想画啥就画啥
}
void CXXXX::OnDrawRU(CDC *pDC)
{
pDC->......//画吧,想画啥就画啥
}
void CXXXX::OnDrawRD(CDC *pDC)
{
pDC->......//画吧,想画啥就画啥
}