如何使您的应用程序成为 WTL 中的拖放文件目标






3.86/5 (9投票s)
一个派生类,
引言
我所说的拖放文件目标是指能够处理拖放到其上的文件名应用程序。
要将你的应用程序修改为拖放文件目标,你只需要使用扩展窗口样式 WS_EX_ACCEPTFILES
创建你的窗口,并处理 WM_DROPFILES
消息。
另一种方法是创建一个窗口,然后调用以下 API 函数
DragAcceptFiles(HWND hWnd, BOOL bAccept)该函数根据
bAccept
参数的值,开启或关闭 WS_EX_ACCEPTFILES
样式。显而易见的方法是创建一个类来封装上述逻辑。因此,我提供了一个类 CDropFileTarget
,它正是这样做的。
使用代码
使用 CDropFileTarget
类非常简单。只需按照以下步骤操作
- 将
CDropFileTarget
添加到继承链中class CMainDlg : public CDialogImpl<CMainDlg>, public CUpdateUI<CMainDlg>, public CMessageFilter, public CIdleHandler, public CDropFileTarget<CMainDlg>
- 将
CHAIN_MSG_MAP
语句添加到你类的消息映射中BEGIN_MSG_MAP(CMainDlg) MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) COMMAND_ID_HANDLER(ID_APP_ABOUT, OnAppAbout) COMMAND_ID_HANDLER(IDOK, OnOK) COMMAND_ID_HANDLER(IDCANCEL, OnCancel) CHAIN_MSG_MAP(CDropFileTarget<CMainDlg>) END_MSG_MAP()
- 在
OnInitDialog()
函数中,将你的类注册为拖放文件目标LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/) { ... RegisterDropTarget(); ... }
- 添加以下公共函数来处理拖放的文件
void ProcessFile(LPCTSTR lpszPath) { // Add your logic }
结论
这个类非常简单,可能无法满足你所有的需求,但如果你只需要允许你的窗口接受拖放的文件并处理它们,那么这个类就适合你。
免责声明
本软件及其附带的文件按“原样”分发,不提供任何形式的保证,无论是明示的还是暗示的。对于可能造成的任何损害,概不负责。用户必须承担使用本软件的全部风险。