如果一个对话框注册了它的一些控件作为拖放目标,那么用于这些控件的拖放消息是否会以一种对话框可以注册消息处理程序来通知/拦截这些消息的方式通过对话框的消息处理?
与这个问题类似,我希望在某些情况下,在单个拖放处理程序被调用之前,在更高级别捕获拖放事件。但是这个问题的答案表明这是不可能的?如何在打开对话框时禁用拖放
如果一个对话框注册了它的一些控件作为拖放目标,那么用于这些控件的拖放消息是否会通过对话框的消息处理,从而使对话框可以注册一个消息处理程序来通知/拦截这些消息?
如果控件使用DragAcceptFiles()
,则WM_DROPFILES
消息将直接转到单个控件的窗口过程,而不是转到对话框的窗口过程。如果你想拦截消息,你将不得不使用SetWindowLongPtr()
或SetWindowSubClass()
子类化单个控件,或者使用来自SetWindowsHookEx()
的消息钩子。
如果控件使用RegisterDragDrop()
,拖放操作将不经过任何窗口过程,因为OLE拖放不使用窗口消息。
与这个问题类似,我希望在某些情况下,在调用单个拖放处理程序之前,在更高级别捕获拖放事件。但是这个问题的答案表明这是不可能的?
这只可能与DragAcceptFiles()
和子类化/挂钩。