MFC 指针变量

我是MFC初学者。我自己凭SDK的一点点知识“凑”粗了一段MFC显示位图的代码:voidmf(){HBITMAPbmp;bmp=(HBITMAP)LoadImage(NU... 我是MFC初学者。
我自己凭SDK的一点点知识“凑”粗了一段MFC显示位图的代码:
void mf()
{
HBITMAP bmp;
bmp=(HBITMAP)LoadImage(NULL,"1.bmp",IMAGE_BITMAP,NULL,NULL,LR_CREATEDIBSECTION|LR_DEFAULTSIZE|LR_LOADFROMFILE);
CDC *pDC;
CDC dc;
pDC=GetDC();
dc.CreateCompatibleDC(pDC);
dc.SelectObject(bmp);
pDC->BitBlt(0,0,400,400,&dc,0,0,SRCCOPY);
ReleaseDC(pDC);
}
我在SDK中显示位图没有接触过指针,现在我不明白:
1.为什么定义CDC dc,而CDC* pDC,后者为什么要是指针?仅仅因为*Cwnd::GetDC(void)得用指针类型?
2.指针有什么好处?
3.ReleaseDC()为什么只释放pDC?dc不需要吗?
展开
 我来答
百度网友1b4cc0f
2010-08-29 · TA获得超过1万个赞
知道大有可为答主
回答量:4241
采纳率:42%
帮助的人:1897万
展开全部
1、是。
CWnd::GetDC 返回CDC*,
因为mfc要把用到的windows对象放入模块线程状态的某个CHandleMap里,以防这些对象在线程切换、C++对象析构时丢失,
这里是放进m_pmapHDC,它是每线程一个,返回指针比较节约。

2、同上。
windows不认识C++对象,C++对象析构时也不会自动释放windows对象,
exe、dll、线程、com之间切换时都应考虑模块状态。

3、dc的作用域限于mf函数,它在mf函数栈上生成,退出mf函数时随着mf函数栈销毁而自动析构。
再看mfc源码,
CDC::~CDC()
{
if (m_hDC != NULL)
::DeleteDC(Detach());
}
对于create的dc会自动删除。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
什么问都想问
2010-09-10 · TA获得超过5077个赞
知道小有建树答主
回答量:880
采纳率:0%
帮助的人:1616万
展开全部
不知道你说的是不是这个函数;
CTime::GetLocalTm()
如果你说的是这个函数的话,可以做如下解释,因为这是一个静态函数,所以按照类的规则他只能调用 static 成员变量。所以 我们可以设想MFC 在定义 CTime的时候定义了一个 static的变量,按照C++规定,静态变量在类第一次被引用时创建,且不会被立即销毁。
因为他是一个静态变量,所以不管用 delete 还是 free 去释放都会失败。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
woshinia777
2010-08-29 · TA获得超过915个赞
知道小有建树答主
回答量:495
采纳率:0%
帮助的人:346万
展开全部
1,CDC是设备上下文,你可以理解为一个“画板”,定义为指针式为了GetDC接收数据。
2,指针的好处在于调用和被调用用时传递过程比较简洁,占用资源少。并可以new一个变量放入堆内存中,不在局部函数中被析构。
3,“The ReleaseDC method releases the hDC previously obtained with GetDC”msdn上的原话,只有getDC的变量才需要ReleaseDC。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
amote258
2010-08-29 · TA获得超过1964个赞
知道小有建树答主
回答量:1101
采纳率:0%
帮助的人:941万
展开全部
你说的没错,定义CDC* pDC 指针的目的就是因为 GetDC();
GetDC()的目的是得到 设备上下文对象 ,而这个设备对象是已经存在了的,没有必要定义一个新的设备 例如 CDC DC
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
盐蒂毕4174
2010-08-31
知道答主
回答量:52
采纳率:0%
帮助的人:0
展开全部
你自己把答案都说了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式