创建兼容DC失败

GAMELOFT9 2014-04-15 11:54:17
对话框应用程序,通过响应WM_CTLCOLOR消息,在OnCtlColor函数中,将背景图片重绘到控件上来实现控件透明,但是会导致重影。通过搜索,找到了一个解决方案:即利用双缓冲机制,使用兼容DC来进行绘图。
但是问题来了,运行时报如下错误:
the variable 'memo_dc' is being used without being initialized.
大概意思是,兼容DC未经过初始化便使用了。

关键代码如下:

// TODO: 在此更改 DC 的任何特性
CBitmap m_bitmap;
pDC->SetBkMode(TRANSPARENT);//设置控件为透明
m_bitmap.LoadBitmap(IDB_BTP_BK);//加载背景图片

CRect rc;//保存控件区域
pWnd->GetWindowRect(&rc);
ScreenToClient(&rc);

CDC* memo_dc;//兼容DC
CDC* gdc;
gdc = GetDC();
memo_dc->CreateCompatibleDC(gdc);
memo_dc->SelectObject(m_bitmap);
pDC->BitBlt(0,0,rc.Width(),rc.Height(),memo_dc,rc.left,rc.top,SRCCOPY); //把背景图片画到控件上

//释放和删除DC
ReleaseDC(gdc);
memo_dc->DeleteDC();
m_bitmap.DeleteObject();
hbr = (HBRUSH) ::GetStockObject(NULL_BRUSH);//获取特定的颜色的画刷,null_brush is used to draw nothing
return hbr;

调试时发现gdc是有值的,而memo_dc却没有值,很奇怪。请各位大神帮忙分析一下,感激不尽!
...全文
148 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2014-04-15
  • 打赏
  • 举报
回复
CDC* memo_dc;使用指针必须使用new CDC,否则是个野人指针
fdsdfdsf 2014-04-15
  • 打赏
  • 举报
回复
声明了一个指针,没创建对象,就想使用,太搞笑了。
GAMELOFT9 2014-04-15
  • 打赏
  • 举报
回复
两位说的很对,我也是中午睡觉时突然发现的,唉~~~~~,脑子进水了。直接去掉指针,CDC memo_dc即可,后面的->改为.就行了。

15,978

社区成员

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

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