代码:
VOID CLXTomDlg::OnDraw()
{
int i;
srand((long)time(NULL));
// CRgn rgn1, rgn2,rgn3;
CPaintDC dc(this); // device context for painting
//两种颜色的画笔
CPen pen_red(PS_SOLID,1,RGB(255,0,0));
CPen pen_black(PS_SOLID,1,RGB(0,0,0));
//获取绘制坐标的控件
CWnd* pWnd = GetDlgItem(IDC_STATIC_INFRAREDMAP);
CDC* pDC = pWnd->GetDC();
CWnd* pWnd_radar = GetDlgItem(IDC_STATIC_RADARMAP);
CDC* pDC_radar = pWnd_radar->GetDC();
CWnd* pWnd_mixture = GetDlgItem(IDC_STATIC_MIXTURE);
CDC* pDC_mixture = pWnd_mixture->GetDC();
CRect picRect_infrared;
GetDlgItem(IDC_STATIC_INFRAREDMAP)->GetWindowRect(&picRect_infrared);
CRect picRect_radar;
GetDlgItem(IDC_STATIC_RADARMAP)->GetWindowRect(&picRect_radar);
CRect picRect_mixture;
GetDlgItem(IDC_STATIC_MIXTURE)->GetWindowRect(&picRect_mixture);
////////////红外/////////////////////////////////////
tagPOINT pt[8]={{95,84},{125,101},{157,124},{173,155},{84,125},{101,125},{104,147},{135,123}};
for(i=0;i<8;i++)
{
pt[i].x=pt[i].x+rand()%50+10;
pt[i].x=pt[i].y+rand()%50+10;
}
CDC dcMem;
CBitmap bm;
GetClientRect(&picRect_infrared);
// rgn1.CreateRectRgnIndirect(picRect_infrared);
// InvalidateRect(&picRect_infrared);
// Step 1:为屏幕DC创建兼容的内存DC :CreateCompatibleDC()
dcMem.CreateCompatibleDC(pDC);
// Step 2:创建位图:CreateCompatibleBitmap()
bm.CreateCompatibleBitmap(pDC,picRect_infrared.Width(),picRect_infrared.Height());
dcMem.SelectObject(&bm);
// Step 3:把位图选入设备环境:SelectObject(),可以理解为选择画布
dcMem.FillSolidRect(picRect_infrared,pDC->GetBkColor());
//更改画笔颜色
dcMem.SelectObject(pen_red);
// 画图
for( i=0;i<8;i++)
{
dcMem.Ellipse(pt[i].x-10,pt[i].y-10,pt[i].x+10,pt[i].y+10);
}
//pDC->BitBlt(picRect_infrared.left,picRect_infrared.top,picRect_infrared.Width(),picRect_infrared.Height(),&dcMem,0,0,SRCCOPY);
//
tagPOINT pt1[8]={{95,84},{125,101},{157,124},{173,155},{84,125},{101,125},{104,147},{135,123}};
for(i=0;i<8;i++)
{
pt1[i].x=pt1[i].x+rand()%50+10;
pt1[i].x=pt1[i].y+rand()%50+10;
}
////////////雷达/////////////////////////////////////
CDC dcMem_radar;
CBitmap bm_radar;
GetClientRect(&picRect_radar);
// rgn2.CreateRectRgnIndirect(picRect_radar);
//InvalidateRect(&picRect_radar);
// Step 1:为屏幕DC创建兼容的内存DC :CreateCompatibleDC()
dcMem_radar.CreateCompatibleDC(pDC_radar);
// Step 2:创建位图:CreateCompatibleBitmap()
bm_radar.CreateCompatibleBitmap(pDC_radar,picRect_radar.Width(),picRect_radar.Height());
dcMem_radar.SelectObject(&bm_radar);
// Step 3:把位图选入设备环境:SelectObject(),可以理解为选择画布
dcMem_radar.FillSolidRect(picRect_radar,pDC_radar->GetBkColor());
//更改画笔颜色
dcMem_radar.SelectObject(pen_black);
// 画图
for( i=0;i<8;i++)
{
dcMem_radar.Ellipse(pt1[i].x-10,pt1[i].y-10,pt1[i].x+10,pt1[i].y+10);
}
////////////红外—雷达/////////////////////////////////////
CDC dcMem_mixture;
CBitmap bm_mixture;
GetClientRect(&picRect_mixture);
// rgn3.CreateRectRgnIndirect(picRect_mixture);
// InvalidateRect(&picRect_mixture);
// Step 1:为屏幕DC创建兼容的内存DC :CreateCompatibleDC()
dcMem_mixture.CreateCompatibleDC(pDC_mixture);
// Step 2:创建位图:CreateCompatibleBitmap()
bm_mixture.CreateCompatibleBitmap(pDC_mixture,picRect_mixture.Width(),picRect_mixture.Height());
dcMem_mixture.SelectObject(&bm_mixture);
// Step 3:把位图选入设备环境:SelectObject(),可以理解为选择画布
dcMem_mixture.FillSolidRect(picRect_mixture,pDC_mixture->GetBkColor());
//更改画笔颜色
dcMem_mixture.SelectObject(pen_black);
// 红笔画图
for( i=0;i<8;i++)
{
dcMem_mixture.Ellipse(pt1[i].x-10,pt1[i].y-10,pt1[i].x+10,pt1[i].y+10);
}
dcMem_mixture.SelectObject(pen_red);
// 黑笔画图
for( i=0;i<8;i++)
{
dcMem_mixture.Ellipse(pt[i].x-10,pt[i].y-10,pt[i].x+10,pt[i].y+10);
}
// Step 4:把绘制好的图形“拷贝”到屏幕上:BitBlt()
pDC->BitBlt(picRect_infrared.left,picRect_infrared.top,picRect_infrared.Width(),picRect_infrared.Height(),&dcMem,0,0,SRCCOPY);
pDC_radar->BitBlt(picRect_radar.left,picRect_radar.top,picRect_radar.Width(),picRect_radar.Height(),&dcMem_radar,0,0,SRCCOPY);
pDC_mixture->BitBlt(picRect_mixture.left,picRect_mixture.top,picRect_mixture.Width(),picRect_mixture.Height(),&dcMem_mixture,0,0,SRCCOPY);
dcMem.DeleteDC();
bm.DeleteObject();
dcMem_radar.DeleteDC();
bm_radar.DeleteObject();
dcMem_mixture.DeleteDC();
bm_mixture.DeleteObject();
//CRect rectClient;
// CRgn rgn1, rgn2,rgn3;
// GetClientRect();
// rgn1.CreateRectRgnIndirect();
// rgn2.CreateRectRgnIndirect();
// rgn1.CombineRgn(&rgn1, &rgn2, RGN_XOR);
// rgn1.CombineRgn(&rgn1, &rgn3, RGN_XOR);
// InvalidateRgn(&rgn1, TRUE);
//UpdateWindow();
}
void CLXTomDlg::OnPaint()
{
// SetRedraw(FALSE);
OnDraw();
//SetRedraw(TRUE);
CDialog::OnPaint();
}
BOOL CLXTomDlg::OnEraseBkgnd(CDC* pDC)
{
// return CDialog::OnEraseBkgnd(pDC);
return true;
}
2014年02月25日 07点02分
4