📄 subject_18440.htm
字号:
<p>
序号:18440 发表者:toxin 发表日期:2002-10-21 08:44:06
<br>主题:初级菜鸟的问题
<br>内容:下列代码中:<BR>void CScrollDemoView::OnDraw(CDC* pDC)<BR>{<BR> .....<BR> pDC->SetBkMode(TRANSPARENT);<BR> <BR> DrawAddress(pDC);<BR>....<BR>}<BR>void CScrollDemoView::DrawAddress(CDC* pDC)<BR>{<BR> ....<BR> pDC->SetBkMode(TRANSPARENT);//为什么要重新设为TRANSPARENT?<BR> .....<BR>}<BR>如果不要DrawAddress中的pDC->SetBkMode(TRANSPARENT), 则为OPAQUE类型,OnDraw里的CDC对象不就是DrawAddress里的CDC对象吗?为什么?<BR>谢谢!<BR> <BR><BR><BR><BR>
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:凯凯 回复日期:2002-10-21 08:47:00
<br>内容:因为DrawAddress可能不止被OnDraw函数调用。所以自己调用SetBkMode比较保险。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:toxin 回复日期:2002-10-21 12:50:52
<br>内容:<BR>根本不是还被别的函数调用的问题,我试了几次了,你可以编个小程序看看!<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:凯凯 回复日期:2002-10-21 13:24:04
<br>内容:哦理解错了。<BR>照你所说,应该是不需要第二次设置的。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:徐景周 回复日期:2002-10-21 13:28:46
<br>内容:如果只在OnDraw中调用的话,DrawAddress中的可以去掉。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:toxin 回复日期:2002-10-21 19:27:39
<br>内容:但是去掉就是OPAQUE类型????why
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:凯凯 回复日期:2002-10-22 08:33:03
<br>内容:仔细看看你的源码,看看还有没有其他的地方改变了背景模式。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:toxin 回复日期:2002-10-22 10:17:34
<br>内容:哦!是我粗心大意。唉!<BR>还有一问:为什么<BR> CRect rect<BR> GetClientRect (&rect); //ok!<BR>正确。<BR>而:<BR>CRect* rect;<BR>GetClientRect (rect); //error?<BR>错误了<BR>这应该涉及到C++指针问题,这里传给GetClientRect不都是CRect指针吗?<BR><BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:凯凯 回复日期:2002-10-22 10:21:10
<br>内容:GetClientRect函数要的是一个引用而不是一个指针。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:凯凯 回复日期:2002-10-22 10:24:43
<br>内容:说错了,GetClientRect要的是一个指向RECT结构的指针LPRECT,你传&rect时,会自动调用到CRect的LPRECT运算符,而传进rect指针时,不会。所以就出错。类型不对。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:toxin 回复日期:2002-10-22 14:07:53
<br>内容:这就觉得奇怪了,传&rect时,为什么会自动调用到CRect的LPRECT运算符了?&在这是重载了吗,&在这应该是取址运算符吧,即按照地址值作为参数传递.<BR>能不能详细解释一下,谢谢!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:milo 回复日期:2002-10-22 21:59:45
<br>内容:我想,用<BR>CRect* rect;<BR>显然是不行的。<BR>此句只分配了sizeof(CRect*)的空间,sizeof(CRect)的空间并未分配。至少有隐藏危险。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:toxin 回复日期:2002-10-22 22:27:42
<br>内容:是有道理,CRect* rect只是定义,没有分配空间,编译错误如下:<BR>F:\my application\BkTest\BkTestView.cpp(67) : error C2664: 'DrawAddress' : cannot convert parameter 2 from 'class CRect ** ' to 'class CRect *'<BR> Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast<BR><BR>但我改成CRect* rect= new CRect;此时编译时无错,链接时却出错:<BR>BkTest.obj : error LNK2001: unresolved external symbol ___pfnBkCheck<BR>BkTestDoc.obj : error LNK2001: unresolved external symbol ___pfnBkCheck<BR>MainFrm.obj : error LNK2001: unresolved external symbol ___pfnBkCheck<BR>StdAfx.obj : error LNK2001: unresolved external symbol ___pfnBkCheck<BR>Debug/BkTest.exe : fatal error LNK1120: 1 unresolved externals<BR>不解??<BR>
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:milo 回复日期:2002-10-23 00:57:51
<br>内容:不是这里的问题啦!<BR>我用下面的代码放在OnDraw中编译链接时都正常,*rect中也能正确获得客户区大小。<BR>CRect *rect=new CRect;<BR>GetClientRect(rect);<BR>查查其他地方吧!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:toxin 回复日期:2002-10-23 13:13:29
<br>内容:哈哈!是可以,不过我是把Debug下所有文件删掉重新编译才可以的。比且此时如果改成CRect <BR>CRect rect<BR> GetClientRect (&rect); <BR>编译没错了。运行起来却出错!倒成了个bug,怪哉!这只是局部变量和自由存储区变量的改变而已吗。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -