请教: MouseOver()的算法 现在有的数据就是鼠标的位置:POINT point;屏幕上有100个40*40的方块,希望在鼠标进出方块区域时,都能给出相应的信息,并留出做其他动作的地方。谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不知道你对时间要求高不高如果不高,可以用SetTimer试一试如果一般,可以用HOOK技术如果很高,可以用QueryPerformanceCounter+多线程如果非常高,可以用RING0下的编程(进入RING0的方法在网上很多) * 在窗体上存在40*40的“方块”干什么?是做类似于“扫雷”游戏的程序吗?(即父窗体上存在40*40的子窗体、也可以说是按钮),如果是解决这种情况的问题,建议你就在父窗类上创建40*40个子窗体.它们具有了Windows窗体的全部属性与独立的消息处理,完全可以满足以上你跟踪“鼠标消息”的需要。* 什么窗建这么多窗体是一种资源浪费?事情本来就是这么解决的,其实根本构成不了什么浪费,你应该在父窗体的WM_CREATE时机,使用CreateWindowEx(...)创建相应风格的子窗体,之后在子窗体的WM_PAINT事件中使用类似RectVisible(HDC, LPRECT)这样的函数来绘制自定义的多态外观,并在其相应的事件中做响应。* 如果最终你还是抛弃了我上述的建议,一味追寻于前窗上用绘线方法绘出的“网络格子”中处理上述“复杂”的事件并做出响应,那么再建议你使用坐标分割的办法,在绘制完成后就记录各个“格子”针对于窗体的相对坐标,然后依据鼠标在不同位置来认定是哪个“格子”,消息处理上只好使用一个标识量,来确认当前鼠标下的“格子”是不是它自己就可以了。* 最后建议你还是使用第一个方法较妥当,因为在你处理各个“格子”的鼠标事件中将不那么繁锁。:-) 不用那么复杂,利用wm_mousemove消息和ReleaseCapture(),SetCapture()就够用了!! 没错,我就是在坐一个类似于扫雷的东西,我希望在扫雷中加入mouseover()功能,当鼠标移到一个方格上时能够在颜色上有所表示,当鼠标移出时又能恢复原样。 没错,我就是在坐一个类似于扫雷的东西,我希望在扫雷中加入mouseover()功能,当鼠标移到一个方格上时能够在颜色上有所表示,当鼠标移出时又能恢复原样。 原来是扫雷族的呀,那用50ms的SetTimer肯定够了SetCapture的方法比较霸道 SetTimer怎么用?BluePenguin(蓝色企鹅) 能指点一下吗? BluePenguin(蓝色企鹅) 能指点一下SetTimer怎么用吗? 在初始化中SetTimer(1,50);假设整个扫雷区为CRect r,每个雷的规格为a*b(其中r是以客户区域坐标为基准)然后在OnTimer中加入类似如下的代码if (nIDEvent == 1){ POINT point; DWORD x=-1,y=-1;//鼠标于坐标为(x,y)的地雷上 ::GetCursorPos(&point); ScreenToClient(&point); if (r.PtInRect(point)) { x=(point.x-r.left)/a; y=(point.y-r.top)/b; //下面你就可以用x,y来实现你所需要的功能了 //.... }} spin control控件怎么使用? 视图窗口显示不出内容? 怎么样由程序向CRichEditView的派生视图类中输出数据 如何使用VC的HtmlView下载非html文档(如zip)? 请问高手:我打开原来我的VC工程,怎么看不见ClassView,但是其他的都能看见的??? 一个小白问题,高手赐教 救我一命,给您300分! 怎么样创建数据库应用程序? UCHAR,WCHAR,TCHAR,CHAR, wchar_t,char的问题 为什么我编译时总是 请教:怎么用NuMega SoftICE来调试啊? !!!类厂有什么作用???
如果不高,可以用SetTimer试一试
如果一般,可以用HOOK技术
如果很高,可以用QueryPerformanceCounter+多线程
如果非常高,可以用RING0下的编程(进入RING0的方法在网上很多)
* 什么窗建这么多窗体是一种资源浪费?事情本来就是这么解决的,其实根本构成不了什么浪费,你应该在父窗体的WM_CREATE时机,使用CreateWindowEx(...)创建相应风格的子窗体,之后在子窗体的WM_PAINT事件中使用类似RectVisible(HDC, LPRECT)这样的函数来绘制自定义的多态外观,并在其相应的事件中做响应。
* 如果最终你还是抛弃了我上述的建议,一味追寻于前窗上用绘线方法绘出的“网络格子”中处理上述“复杂”的事件并做出响应,那么再建议你使用坐标分割的办法,在绘制完成后就记录各个“格子”针对于窗体的相对坐标,然后依据鼠标在不同位置来认定是哪个“格子”,消息处理上只好使用一个标识量,来确认当前鼠标下的“格子”是不是它自己就可以了。
* 最后建议你还是使用第一个方法较妥当,因为在你处理各个“格子”的鼠标事件中将不那么繁锁。:-)
SetCapture的方法比较霸道
SetTimer(1,50);
假设整个扫雷区为CRect r,每个雷的规格为a*b(其中r是以客户区域坐标为基准)
然后在OnTimer中加入类似如下的代码
if (nIDEvent == 1)
{
POINT point;
DWORD x=-1,y=-1;//鼠标于坐标为(x,y)的地雷上 ::GetCursorPos(&point);
ScreenToClient(&point);
if (r.PtInRect(point))
{
x=(point.x-r.left)/a;
y=(point.y-r.top)/b;
//下面你就可以用x,y来实现你所需要的功能了
//....
}
}