启动一个线程(用afxbeginthread(...)具体用法见msdn)不停的扫描mouse的位置(用getcursorpos())如果鼠标停留在窗口的某个位置一段时间后就在鼠标指针附近显示一个对非模式话框(把这个对话框设成stay on top(用CDialog::SetWindowPos(HWND_TOPMOST,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);)显示鼠标位置,移动鼠标就隐藏对话框
输入OnToolHitTest,搜索msdn有你要得内容,应该是重载OnToolHitTest
程序员大本营2000(VC)中有个"汽球状的ToolTip"控件,有源码,自已拿来看看不就得了。
一个很简单的解决办法: 1、往你的工程里加一个VC++自带的组件(project/insert to project/Visual C++ Components/Splash Screen)。 2、把它的这个函数改成如下: BOOL CSplashWnd::PreTranslateAppMessage(MSG* pMsg) { if (c_pSplashWnd == NULL) return FALSE; // If we get a keyboard or mouse message, hide the splash screen. if (pMsg->message ==WM_MOUSEMOVE) { c_pSplashWnd->MoveWindow(); return TRUE; // message handled here } return FALSE; // message not handled } 3、增加一个方法 void CSplashWnd::MoveWindow () { POINT pt; ::GetCursorPos(&pt); pt.x-=15; pt.y+=20; SetWindowPos(NULL,pt.x,pt.y,0,0,SWP_NOSIZE|SWP_NOACTIVATE); this->Invalidate (); } 4、去掉定时器(默认几秒种后窗口消失) 5、把位图IDB_SPLASH改成你认为满意的(位图大小即窗口大小) 6、 ok
参考MSDN 中TTN_NEEDTEXT 的说明,我觉得不难实现.
请附上代码,关键是如何生成"TIP的东西".用什么消息来控制.谢谢!
TO xyzboat(一叶小舟)
文章已经看过了,不过如何在客户窗口中实现,没有文章参考!希望得到你的HELP
就是当窗口客户区的鼠标不动后,弹出类似TOOLTIP的东西,里面显示当前鼠标的位置。 难道没有人帮我了?
1、往你的工程里加一个VC++自带的组件(project/insert to project/Visual C++ Components/Splash Screen)。
2、把它的这个函数改成如下:
BOOL CSplashWnd::PreTranslateAppMessage(MSG* pMsg)
{
if (c_pSplashWnd == NULL)
return FALSE;
// If we get a keyboard or mouse message, hide the splash screen.
if (pMsg->message ==WM_MOUSEMOVE)
{
c_pSplashWnd->MoveWindow();
return TRUE; // message handled here
} return FALSE; // message not handled
}
3、增加一个方法
void CSplashWnd::MoveWindow ()
{ POINT pt;
::GetCursorPos(&pt);
pt.x-=15;
pt.y+=20;
SetWindowPos(NULL,pt.x,pt.y,0,0,SWP_NOSIZE|SWP_NOACTIVATE);
this->Invalidate ();
}
4、去掉定时器(默认几秒种后窗口消失)
5、把位图IDB_SPLASH改成你认为满意的(位图大小即窗口大小)
6、 ok