⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subject_52821.htm

📁 vc
💻 HTM
字号:
<p>
序号:52821 发表者:菜鸟人飞 发表日期:2003-09-15 09:33:59
<br>主题:判断鼠标左键是否在某个区域内问题!
<br>内容:VC技术内幕第四版&nbsp;&nbsp;56页:<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;例程是用如下代码来实现判断当鼠标左键按下时,来判断其指针是否落在指定的矩形区域内,但编译时却出现如下的报错,请指教!<BR><BR>代码:<BR>&nbsp;&nbsp;&nbsp;&nbsp;void CXiaxianView::OnLButtonDown(UINT nFlags, CPoint point) <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Add your message handler code here and/or call default<BR>&nbsp;&nbsp;&nbsp;&nbsp;CRect rect=m_rect;<BR>&nbsp;&nbsp;&nbsp;&nbsp;CClientDC dc(this);<BR>&nbsp;&nbsp;&nbsp;&nbsp;dc.SetMapMode(MM_LOENGLISH);<BR>&nbsp;&nbsp;&nbsp;&nbsp;dc.LPtoDP(rect);<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(rect.PtInRect(point)){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE(&#34;mouse cursor is inside the rectangle.\n&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;CView::OnLButtonDown(nFlags, point);<BR>}<BR><BR><BR><BR><BR>错误:<BR>&nbsp;&nbsp;&nbsp;&nbsp;--------------------Configuration: xiaxian - Win32 Debug--------------------<BR>Compiling...<BR>xiaxianView.cpp<BR>D:\个人资料\实验\按钮下陷的实现\xiaxian\xiaxianView.cpp(115) : error C2065: 'm_rect' : undeclared identifier<BR>D:\个人资料\实验\按钮下陷的实现\xiaxian\xiaxianView.cpp(115) : error C2440: 'initializing' : cannot convert from 'int' to 'class CRect'<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;No constructor could take the source type, or constructor overload resolution was ambiguous<BR>Error executing cl.exe.<BR><BR>xiaxian.exe - 2 error(s), 0 warning(s)<BR><BR><BR>&nbsp;&nbsp;&nbsp;&nbsp; <BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;当将CRect rect=m_rect这一句改为CRect rect时,编译链接均能通过。但在运行的时候在视图内一点击鼠标左键即报错!
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:a dog 回复日期:2003-09-15 09:43:29
<br>内容:m_rect是如何定义的,是私有成员还是publik成员?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:苗秦 回复日期:2003-09-15 09:53:51
<br>内容:m_rect 肯定是没有定义或者定义错误,检查m_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>
回复者:菜鸟人飞 回复日期:2003-09-15 09:57:29
<br>内容:已定义,public!<BR>但我不知道m_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>
回复者:a dog 回复日期:2003-09-15 10:01:09
<br>内容:m_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>
回复者:菜鸟人飞 回复日期:2003-09-15 10:26:37
<br>内容: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>
回复者:a dog 回复日期:2003-09-15 10:33:38
<br>内容:将CRect rect=m_rect这一句改为CRect 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>
回复者:菜鸟人飞 回复日期:2003-09-15 10:51:04
<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>
回复者:a dog 回复日期:2003-09-15 11:12:32
<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>
回复者:菜鸟人飞 回复日期:2003-09-15 11:24:31
<br>内容:我就是不知在这儿的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>
回复者:a dog 回复日期:2003-09-15 11:31:01
<br>内容:CRect rect(l,t,r,b)<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>
回复者:菜鸟人飞 回复日期:2003-09-15 11:37:28
<br>内容:l,t,r,b这四个参数分别用设备坐标的值来表示吗?<BR><BR>还有就是用上面的m_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>
回复者:a dog 回复日期:2003-09-15 12:31:28
<br>内容:l,t,r,b这四个参数应该是逻辑坐标吧。<BR>就算用m_rect它本身也需要初始化呀?<BR>你没有MSNN啊,自己可以查呀。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:菜鸟人飞 回复日期:2003-09-15 13:25:08
<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>
回复者:菜鸟人飞 回复日期:2003-09-16 11:25:53
<br>内容:不行呵,我在用CRECT rect 或者在前面定义m_rect来赋值,都不行呢,编译链接均能通过,便鼠标在工作区点击时没反应,请问要想将整个工作区全都定义在我的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>
回复者:a dog 回复日期:2003-09-16 11:33:19
<br>内容:没反应是因为你没点到区域内呀。用<BR>void GetClientRect(<BR>&nbsp;&nbsp; LPRECT lpRect <BR>) const;<BR>像这样:<BR>CRect rect;<BR>GetClientRect(&amp;rect);<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>
回复者:菜鸟人飞 回复日期:2003-09-16 11:47:16
<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>
回复者:a dog 回复日期:2003-09-16 11:51:13
<br>内容:是不用定义呀,本来就VIEW类的成员函数,在视中拿来就用呀。<BR>&nbsp;&nbsp; void CXiaxianView::OnLButtonDown(UINT nFlags, CPoint point) <BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;// TODO: Add your message handler code here and/or call default<BR>&nbsp;&nbsp;&nbsp;&nbsp;CRect rect;<BR>&nbsp;&nbsp;&nbsp;&nbsp;GetClientRect(&amp;rect);<BR>&nbsp;&nbsp;&nbsp;&nbsp;CClientDC dc(this);<BR>&nbsp;&nbsp;&nbsp;&nbsp;dc.SetMapMode(MM_LOENGLISH);<BR>&nbsp;&nbsp;&nbsp;&nbsp;dc.LPtoDP(rect);<BR>&nbsp;&nbsp;&nbsp;&nbsp;if(rect.PtInRect(point)){<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TRACE(&#34;mouse cursor is inside the rectangle.\n&#34;);<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;CView::OnLButtonDown(nFlags, point);<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>
回复者:菜鸟人飞 回复日期:2003-09-16 12:20:16
<br>内容:对不起,我没注意到,你上面给出的只是其原形而已,现在麻烦请再讲一下,就是你上面的代码中是如何确定区域的呢,我好像没看到呢?我是否前面还需要对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>
回复者:a dog 回复日期:2003-09-16 12:33:55
<br>内容:不需要再初始化了。你看GetClientRect(&amp;rect);<BR>它的参数是一个指针,这个函数会填充rect的l,t,r,b各个域。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:菜鸟人飞 回复日期:2003-09-16 12:40:34
<br>内容:谢谢,但是它怎么知道我l,t,r,b各个域的坐标是多少呢?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:a dog 回复日期:2003-09-16 12:42:46
<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>
回复者:菜鸟人飞 回复日期:2003-09-16 12:48:09
<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>
回复者:a dog 回复日期:2003-09-16 12:51:08
<br>内容:圆用CRect就不行了,这胩只能是矩形,圆要用CRgn类才行啊。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:a dog 回复日期:2003-09-16 12:53:19
<br>内容:还要用这个函数判断,点是不是在区域内。<BR>BOOL PtInRegion(<BR>&nbsp;&nbsp; int x,<BR>&nbsp;&nbsp; int y <BR>) const;<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>
回复者:菜鸟人飞 回复日期:2003-09-16 12:54:13
<br>内容:我基本懂你的意思了。<BR>再引申一下,如是一个椭圆应该也有CRgn吧,但如是不规则的图形呢,这儿可以实现吗?
<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>回复者:a dog 回复日期:2003-09-16 12:55:54
<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>
回复者:菜鸟人飞 回复日期:2003-09-16 12:57:41
<br>内容:哦,谢谢!回去试试,给钱先!<BR>有QQ吗,交个朋友,希望得到你更多的帮助!<BR>QQ:16114816
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:a dog 回复日期:2003-09-16 12:58:58
<br>内容:CreateEllipticRgn椭圆<BR>CreatePolygonRgn不规则的图形<BR><BR>你查一下MSDN就都知道了。
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:a dog 回复日期:2003-09-16 13:00:06
<br>内容:我没有QQ。<BR>sorry!
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
回复者:菜鸟人飞 回复日期:2003-09-16 13:05:14
<br>内容:没事,再谢!
<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 + -