关于CDC::CreateCompatibleDC(CDC* pDC) 的问题

rafaelcn 2004-08-16 09:16:25
我的函数
void CMyBoard:rawTitle(CDC* pDC,CString strMsg,CRect &tmpRect)
{
CDC memDC;
BOOL bReturn;
bReturn=memDC.CreateCompatibleDC(pDC);
if (!bReturn)
{
return;
}
memDC.SetBkColor(RGB(0,0,0));
memDC.SelectObject(m_TitleFont);
memDC.SetTextColor(RGB(230,130,35));
memDC.DrawText(strMsg,tmpRect,DT_CENTER|DT_VCENTER);

}

这个函数这样写输出不了文本,但是如果把后边的调用方法改为
pDC->SetBkColor(RGB(0,0,0));
pDC->SelectObject(m_TitleFont);
pDC->SetTextColor(RGB(230,130,35));
pDC->DrawText(strMsg,tmpRect,DT_CENTER|DT_VCENTER);

的话就没问题,为什么?
...全文
266 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
rafaelcn 2004-08-16
  • 打赏
  • 举报
回复
发现错在哪里了,CDC::SelectObject 是指向被替换掉那个对象的指针,搞定
rafaelcn 2004-08-16
  • 打赏
  • 举报
回复
改成了这样,还是不行
CDC memDC;
CBitmap tmpBmp;
CBitmap* pBmp=NULL;
BOOL bReturn;
memDC.CreateCompatibleDC(pDC);
tmpBmp.CreateCompatibleBitmap(pDC,tmpRect.Width(),tmpRect.Height());
pBmp=(CBitmap*)memDC.SelectObject(&tmpBmp);
memDC.SelectObject(pBmp);
memDC.SetBkColor(RGB(0,0,0));
memDC.SelectObject(m_TitleFont);
memDC.SetTextColor(RGB(230,130,35));
memDC.DrawText(strMsg,tmpRect,DT_CENTER|DT_VCENTER);
pDC->BitBlt(0,0,tmpRect.Width(),tmpRect.Height(),&memDC,0,0,SRCCOPY);
eliner 2004-08-16
  • 打赏
  • 举报
回复
pDC会自动选中,memDC需要手动调用
memory_xj 2004-08-16
  • 打赏
  • 举报
回复
memDC只相当于一个后台缓冲区,而pDC是前台,memDC是显示下出的,你需要用pDC->StrectchBlt(....)函数将memDC调至前台。
只爱浓茶 2004-08-16
  • 打赏
  • 举报
回复
我想试试到底这个内存设备和屏幕设备到底有什么不同,2个怎么互相转换而已
Kudeet 2004-08-16
  • 打赏
  • 举报
回复
pDC本来就是一个和上下设备相关的位图指针。为什么要建立一个内存设备的呢?

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧