Winapi 对话框是否可以拦截拖动';n';是否删除传递给其控件的消息?

Winapi 对话框是否可以拦截拖动';n';是否删除传递给其控件的消息?,winapi,mfc,drag-and-drop,Winapi,Mfc,Drag And Drop,如果某个对话框将其某些控件注册为拖放目标,则拖放用于这些控件的消息是否会以对话框可以注册消息处理程序以通知/截获这些消息的方式通过对话框的消息处理过程 以类似于这个问题的方式,我希望在调用单个拖放处理程序之前,在某些情况下捕获更高级别的拖放事件。但这个问题的答案表明这是不可能的 如果某个对话框将其某些控件注册为拖放目标,则拖放用于这些控件的消息是否会以对话框可以注册消息处理程序以通知/截获这些消息的方式通过对话框的消息处理过程 如果控件使用的是DragAcceptFiles(),WM_DROPF

如果某个对话框将其某些控件注册为拖放目标,则拖放用于这些控件的消息是否会以对话框可以注册消息处理程序以通知/截获这些消息的方式通过对话框的消息处理过程

以类似于这个问题的方式,我希望在调用单个拖放处理程序之前,在某些情况下捕获更高级别的拖放事件。但这个问题的答案表明这是不可能的

如果某个对话框将其某些控件注册为拖放目标,则拖放用于这些控件的消息是否会以对话框可以注册消息处理程序以通知/截获这些消息的方式通过对话框的消息处理过程

如果控件使用的是
DragAcceptFiles()
WM_DROPFILES
消息将直接进入各个控件的窗口过程,而不是对话框的窗口过程。如果要截获消息,必须使用
SetWindowLongPtr()
SetWindowSubClass()
,或使用
setwindowshookx()中的消息钩子对各个控件进行子类化

如果控件使用的是
RegisterDragDrop()
,则拖放操作根本不会经过任何窗口过程,因为OLE拖放不使用窗口消息

以类似于这个问题的方式,我希望在调用单个拖放处理程序之前,在某些情况下捕获更高级别的拖放事件。但这个问题的答案表明这是不可能的


这只能通过
DragAcceptFiles()
和子类化/挂钩实现。

@BarmakShemirani:在内部,当对话框的HWND创建时,它只需调用
DragAcceptFiles()
,当用户将文件放置在对话框客户端区域内的任何位置时,甚至在子控件上(除非控件已分别注册为
WM_DROPFILES
),启用
WM_DROPFILES
消息进入对话框的窗口过程。Remy Lebeau抱歉,我误解了这个问题,我正在谈论一些不相关的事情,在您回复之前,我删除了该评论。我不知道OLE DnD完全绕过了消息循环,这让事情变得更清楚。