OnDraw(CDC* PDC)问题

cofemate 2009-12-04 09:44:49
问下高手OnDraw(CDC* PDC)在被调时很多书上都说(CDC* PDC)这个参数已经传进来了,小弟我没明白这个参数是怎么传进来的? 看MFC中还有很多这样的函数,他们后面跟的参数都是直接可以拿到函数体中使用的(特别是一些类的对象的指针这样的参数)。 为什么OnDraw(CDC* PDC)这个函数 不先定义一个CDC类的对象 dc ,然后OnDraw(&dc)??
...全文
364 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
cofemate 2009-12-04
  • 打赏
  • 举报
回复
结贴了 :)
cofemate 2009-12-04
  • 打赏
  • 举报
回复
找到了 谢谢楼上的朋友
xylicon 2009-12-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 cofemate 的回复:]
void CView::OnPaint()
{
// standard paint routine
CPaintDC dc(this);
OnPrepareDC(&dc);
OnDraw(&dc);
}

在哪里可以找到啊?小弟愚笨,望指点
[/Quote]

\Microsoft Visual Studio\VC98\MFC\SRC\ViewCore.cpp
cofemate 2009-12-04
  • 打赏
  • 举报
回复
void CView::OnPaint()
{
// standard paint routine
CPaintDC dc(this);
OnPrepareDC(&dc);
OnDraw(&dc);
}

在哪里可以找到啊?小弟愚笨,望指点
xylicon 2009-12-04
  • 打赏
  • 举报
回复
OnDraw 是由OnPaint调用的。

void CView::OnPaint()
{
// standard paint routine
CPaintDC dc(this);
OnPrepareDC(&dc);
OnDraw(&dc);
}

OnDraw是虚函数,所以就能够在你的派生类中执行OnDraw了。
bamboo1999 2009-12-04
  • 打赏
  • 举报
回复
是mfc构造(或者说取到的)的。
调用者负责传入合法的参数。
cattycat 2009-12-04
  • 打赏
  • 举报
回复
up loaden,我也不知道回调函数在哪,这个可能得看mfc的消息机制吧, DECLARE_MASSAGE_MAP下面声明的函数On_Draw()原型,顺着这个往上找吧。
cofemate 2009-12-04
  • 打赏
  • 举报
回复
回调函数里已经构造了一个CDC对象。老邓能说具体点么?回调函数代码在什么地方我去看下
「已注销」 2009-12-04
  • 打赏
  • 举报
回复
为什么OnDraw(CDC* PDC)这个函数 不先定义一个CDC类的对象 dc ,然后OnDraw(&dc)??
==============
在消息派发的时候,回调函数里已经构造了一个CDC对象。
因为消息要发送到不同的类,而且是多次,所以传递进去一个指针。
这样就不用重复构造对象,提高效率(而且你也构造不成,因为只能在回调函数里构造,里面有构造CDC的信息)。
「已注销」 2009-12-04
  • 打赏
  • 举报
回复
因为传递进去的是一个指针。

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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