读书人

请问一个关于OnPaint()中绘图的有关问

发布时间: 2012-03-18 13:55:39 作者: rapoo

请教一个关于OnPaint()中绘图的问题.
void CMapEditorDlg::OnPaint()
{
if (IsIconic())
{
...
}
else
{
CRect rect;
m_EditMap-> GetClientRect(&rect);
CPaintDC dc(GetDlgItem(IDC_MAP)); // device context for painting
CDC MemDC;
MemDC.CreateCompatibleDC(NULL);
MemDC.FillRect(&rect,&m_Bk);
//gameMap.DrawMap(&MemDC.m_hDC,0,0,rect.Width(),rect.Height());
MemDC.TextOut(100,100, "zzzz ",4);
dc.BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
DeleteDC(MemDC);
CDialog::OnPaint();
}
}

OnPaint()函数体如上,IDC_MAP为一个STATIC控件,我要在这个控件上绘图,想先在内存DC MemDC中把图形画好,然后直接贴到dc上,可是运行后却什么都没画出来.
被注释的一个函数gameMap.DrawMap(...);是我定义的一个类函数,用来在指定的HDC上绘位图,把它的注释去掉发现它却可以正常显示.把MemDC.FillRect(&rect,&m_Bk);
中的MemDC改为dc发现也可以正常绘制...请问这到底是什么原因?
是因为我没有指定MemDC的什么信息么??
本人初学MFC希望高手指教!!!!!

[解决办法]
CPaintDC dc1(this); // device context for painting
 dcMemory.CreateCompatibleDC(&dc1);
 CBitmap bmp;//这里的Bitmap是必须的,否则当心弄出一个大黑块哦。
 bmp.CreateCompatibleBitmap(&dc1,rectClient.Width(),rectClient.Height());
 dcMemory.SelectObject(&bmp);

 //接下来你想怎么画就怎么画吧。
 //dcMemory.FillRect(rectClient,&brush);

 dc1.BitBlt(0,0,rectClient.Width(),rectClient.Height(),&dcMemory,0,0,SRCCOPY);
 dcMemory.DeleteDC();

读书人网 >VC/MFC

热点推荐