问题描述:
1 我建了个MyStyleLict,继承自CClitCtrl
2 在父窗口的DoDataExchange关联了一个List资源,DDX_Control(pDX,IDC_LIST,m_list);需求:
如果鼠标在这个List的范围外单击鼠标左键,list能收到这个消息么?
如果能,该如何做到?
1 我建了个MyStyleLict,继承自CClitCtrl
2 在父窗口的DoDataExchange关联了一个List资源,DDX_Control(pDX,IDC_LIST,m_list);需求:
如果鼠标在这个List的范围外单击鼠标左键,list能收到这个消息么?
如果能,该如何做到?
HHOOK SetWindowsHookEx(
int idHook, // hook type
HOOKPROC lpfn, // hook procedure
HINSTANCE hMod, // handle to application instance
DWORD dwThreadId // thread identifier
);
你只想监视鼠标消息,idHook可以为WH_MOUSE,这种类型的hook回调函数可以在程序中直接定义也可以放到另外一个DLL中,你只想响应这个程序中的List 之外的的鼠标消息,那放在程序中就行了。返回的hook句柄最好放到全局变量中方便在回调函数中使用。
2.定义hook回调函数:
LRESULT CALLBACK MouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
);
因为你只对鼠标的动作感兴趣函数里可以这样
if(nCode <0 || nCode == HC_ACTION)
return CallNextHookEx(hhook, nCode, wParam, lParam);
wParam就有鼠标消息的类型,你按照需要使用
lParam中有主窗口的句柄,你可以把收到的消息发送给主窗口让主窗口处理
3.自定义一个消息响应hook发送来的消息:
对list的操作可以都在这个消息响应函数中完成。