2017-07-28 126 views
0

this article,允许降只有在目标,我们必须MFC编辑控件 - WM_DROPFILES消息寄存器拖放

使用SubclassDlgItem()重新路由一个消息对话框对象这样所有的处理都可以在那里完成。

DanRollins先生(文章作者)还提供了一个示例

class CEditDropNotif : public CEdit 
{ 
    virtual BOOL PreTranslateMessage(MSG* pMsg) { 
     if (pMsg->message == WM_DROPFILES) { 
      GetParent()->SendMessage(WM_DROPFILES, pMsg->wParam, pMsg->lParam); 
      return TRUE; // eat it 
     } 
     return FALSE; // allow default processing 
    } 
}; 
BOOL CMyDlg::OnInitDialog() 
{ 
... 
    static CEditDropNotif cEd; // must persist (usually a dlg member) 
    cEd.SubclassDlgItem(IDC_EDIT1, this); 
    ::DragAcceptFiles(cEd.m_hWnd, true); // the editbox, not the dialog 
... 

但我不明白为什么编辑控件(CEdit的)具有接受文件在属性窗口( Visual Studio Resource视图),但无法为自己注册WM_DROPFILES消息,而无需创建继承类(或者它可以但我还不知道)。

我看到,我们可以通过下面的代码

BEGIN_MESSAGE_MAP(CSimpleDlg, CDialogEx) 
... 
ON_BN_CLICKED(IDC_BTN_01, &CSimpleDlg::OnBnClickedBtn01) 
END_MESSAGE_MAP() 

为的按钮点击消息有没有办法,我可以做拖放事件类似,像

ON_DRAW_DROP(IDC_TXT_01, &CSimpleDlg::OnDragDrop01)//Is exist? 

回答

0

答案: 不。 ON_BN_CLICKED宏映射成员函数处理BN_CLICKED通知发送通过WM_COMMAND消息。通知发送给控件的父级(虽然MFC也有一个“反射”机制,将通知转发给控件)。 WM_DROPFILES是一般Windows消息,不是通知,所以就是这样:如果你想处理它,那么你必须从CEdit派生。

参见: