首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

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

2012-03-18 
请教一个关于OnPaint()中绘图的问题.voidCMapEditorDlg::OnPaint(){if(IsIconic()){...}else{CRectrectm_

请教一个关于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();

热点排行