您好,我没听明白,是不是添加消息后,再在
中添加 HANDLE_MSG( hwnd , WM_MOUSEMOVE, OnMouseMove );::SetCapture();HWND hTarget = WindowFromPoint( ... );
spy++中,是在一个控件中按下左键再开始响应的,我是不是要派生这个控件的类,再在这个控件里添加消息???完整代码?
SPY++同样遵循这个原理, 让你拖动图标到指定窗口, 其实就是受SetCapture的限制.
我已经告诉你方案, 至于怎么实现, 由你自己,
在离开你的客户区之前, 你要限制你的用户按住鼠标左键, 就可捕获到其他窗口的鼠标位移
int do_proc( HWND hDlg , UINT uMsg, WPARAM wParam, LPARAM lParam )
{
switch( uMsg )
{
HANDLE_DLGMSG( hDlg, WM_MOUSEMOVE, OnMouseMove ) ;
}
}
void OnMouseMove(HWND hwnd, int x, int y, UINT keyFlags)
{
if( GetCapture() != hwnd )
SetCapture(hwnd ) ;
}
class MyTrackTooltip : public TrackToolTip
{
private:
void do_text_callback( HWND h, INT id, LPNMTTDISPINFO pDispInfo )
{
POINT pt ;
GetCursorPos( &pt ) ;
HWND hwnd = WindowFromPoint( pt ) ;
std::wostringstream os ;
os << L"坐标( " << pt.x << L" : " << pt.y << L" )" << L" 窗口句柄 = " << hwnd
<< std::endl ;
StringCchCopy( pDispInfo->szText, 80, os.str().c_str() ) ;
}
} ;
非常简单的.