请高手指点MFC中如何实现这种效果,高分悬赏!

当鼠标放在A2矩形框内但不在数字上时,整个框加红色边框

当鼠标放在A2的某个数字上时,该数字加红色边框。
菜鸟求助,高手解答,高分!

首先说,这个“数独”程序的完整代码和界面并不好做,如果真的是初学,会遇到非常多的困难。
完整界面上,这个界面能省事的地方不多,几乎大部分都要自己画出来,并且还需要结合算法,进行模块化设计,大块和小块都需要做的很灵活,而且要结合数独算法。
单说红框,很简单,OnMouseMove函数中,获取鼠标坐标,将这个坐标CPoint和图上所有的模块化区域CRect进行对比(函数PtInRect),返值为真即标记Rect返回,通过这个rect判断所在区域,并通过DC的Rectangle画线就可以了。追问

谢谢!我不会画图,有没有不画图的方法呢?

追答

如果不会画图。。放弃这个界面的想法吧。
这个界面上,太多东西必须通过DC操作来实现了,画图操作是基础啊。。。
VC界面编程,稍微和MFC界面不同,都必须通过DC操作来进行的,没有可以绕过的办法。

追问

建了个基于对话框的进行测试,硬着头皮用绘图的方式简单画了下,数字是用TextOut输出的,如图,倒是能实现第一种效果,但第二种效果怎么实现呢?就是鼠标放在小数字上生成小红方框,同时取消大红方框,还得对鼠标左击右击做不同响应,望大侠赐教!

追答

最好的办法,其实是在界面上动态做27*27个静态框二维数组,这样输出位置和画框的位置就非常好确定了。
另外,也可以建立一个27*27的CRect二维数组+一个9*9的二维数组,然后通过最外面的框子获取坐标后,对所有的CRect计算并赋值。这样无论是数字输出位置还是画框的位置,都可以通过一个数组循环来实现了。
对于消除红框,最好的办法是通过dc.SetROP2的异或模式再画一遍就可以了,也可以通过标记位,然后InvalidateRect区域重绘。
鼠标左右键响应没什么问题吧,这个和其它的不冲突。

追问

谢谢你的回答,虽然还不能完全理解,但一步一步正在实现,目前已完成主框架、自定义按钮和大数字输入等部分。

如图,全部采用画图的方式,按照你提供的思路做的,虽然离完成全部功能还很远,但至少我有了正确的方向,真心感谢!

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-03-26
就单独一个框而言,只需要对WM_MOUSEMOVE消息进行响应,然后根据鼠标位置来进行操作即可。
第2个回答  2013-03-26
关注。。。。。。

请高手指点MFC中如何实现这种效果,高分悬赏!
单说红框,很简单,OnMouseMove函数中,获取鼠标坐标,将这个坐标CPoint和图上所有的模块化区域CRect进行对比(函数PtInRect),返值为真即标记Rect返回,通过这个rect判断所在区域,并通过DC的Rectangle画线就可以了。

c“一百分高分悬赏,答对还有追加”(请问MATLAB高手一个如何实现一个迭加...
你的函数参数要求是数值,但命令行输入的时候给函数传递的是一个向量0:50。 所以函数内部在for循环那里,for k=0:m里面的m代入的是向量, 那么matlab自动取矩阵的第一个元素,你这里是0, 所以就变成for k=0:0,等于没循环。 因此最后结果只有s=0 解决办法, 一种可以在命令行输入for循环求y。 >>m=0:50; >...

MFC关于Radio Button控件的问题 高分悬赏!!敬请指点
要使单选按钮处于未选定状态,只需要将SetCheck函数的参数设为0即可。要显示某控件,只需要将ShowWindow函数的参数设为true即可。你的另一个要求:选择TypeA单选按钮时,显示A分栏,隐藏B分栏 大概实现如下:先为TypeA单选按钮添加BN_CLICKED消息响应函数,在VC6.0的添加类向导中的选择对话框类,然后在...

寻找功夫小子高手指点二键鬼步,悬赏高分
以横鬼为例,左右上的这种,其实左是多余按键,只需要按右上,按完右后像左右鬼那种间隔按上。 其他的类似 。每种鬼都可以2键,难度比普通按法大的多,但出鬼速度快

高分悬赏请高手指教大话2法宠怎么练?
个人建议还是全法的吧,将杀伤力推向极致,炼妖就打个物混75就行,你也别指望帮战啥的带着它,就是为了拉风和砍怪用。至于内丹呢,带两个个伏法丹和一个浩然(因为法长的缘故,浩然浩不太多,我的浩3万2)或者两个伏法丹一个暗度。保证没把都看到就行了。这一练法的优点,杀伤力高,而且抗混...

...高手指点下如何修改好,又不留下痕迹!高分悬赏!!!可行的话再加分...
手写?那重新抄一份,把多写的话去掉啊!电脑就更方便了,删除重新打印

高分悬赏:Foxmail使用QQ创建账号时候报错“:ssl连接错误, errorCode...
我也碰到了同样的苦恼。网上找了很久解决方案。但是都不行。最后偶然的机会解决了,解决方式不要太简单。更新软件就可以了。 竟然是个软件bug,太过分。更新后的版本 7.2.16.188

高分悬赏高手指点我本月初出现血精现象昨天遗精又是血精到医院检查结果...
1. 您出现的血精现象可能与前列腺炎和肾炎有关。2. 针对这种情况,医生建议您服用抗生素,如头孢、环丙沙星或红霉素,以消炎并考虑使用止血药物,如安络血、止血敏或维生素K。3. 如果您感到囊肿疼痛,可以加服阿托品。4. 在治疗期间,请确保充分休息,多喝水,尽量减少体力活动。5. 请注意保暖,避免...

...男孩请高手指点八字财运,官运,子女及父母,感谢啊!!!
『宜佩带的饰物』:红檀木千手观音戒指(或作为护符随身携带)『适合乔迁居住的楼层及朝向』:6、11、东北朝向、朝南 『适宜相伴的配偶星座(上升星座)及属相』:狮子座、处女座、水瓶座、属虎、属兔等 『本命年是否可穿红色』:可以,能起到辟邪开运之效,比如红色底裤和袜子等 『八字喜用神』:...

电脑严重故障,高手们进来帮帮忙,高分送上,问题能解决,追加悬赏
1、在其他电脑上使用出现故障的硬盘,作为启动盘,看看是否能启动?假如能启动,说明不是硬盘问题,可以用替换硬件的方法考虑其他的问题了。不能启动,说明是硬盘问题,可以像上面楼上们说的,下载或者是购买一个可以修复硬盘分区表的或者说是修复硬盘启动信息的工具光盘。假如硬盘能正常启动,其他硬件:如...

相似回答
大家正在搜