65.9K
CodeProject 正在变化。 阅读更多。
Home

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

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.86/5 (9投票s)

2004 年 9 月 9 日

CPOL

1分钟阅读

viewsIcon

39318

downloadIcon

531

一个派生类,用于使用 WTL 创建拖放文件目标应用程序。

引言

我所说的拖放文件目标是指能够处理拖放到其上的文件名应用程序。

要将你的应用程序修改为拖放文件目标,你只需要使用扩展窗口样式 WS_EX_ACCEPTFILES 创建你的窗口,并处理 WM_DROPFILES 消息。

另一种方法是创建一个窗口,然后调用以下 API 函数

DragAcceptFiles(HWND hWnd, BOOL bAccept)
该函数根据 bAccept 参数的值,开启或关闭 WS_EX_ACCEPTFILES 样式。

显而易见的方法是创建一个类来封装上述逻辑。因此,我提供了一个类 CDropFileTarget,它正是这样做的。

使用代码

使用 CDropFileTarget 类非常简单。只需按照以下步骤操作

  1. CDropFileTarget 添加到继承链中
    class CMainDlg : public CDialogImpl<CMainDlg>,
            public CUpdateUI<CMainDlg>,
            public CMessageFilter, 
            public CIdleHandler,
            public CDropFileTarget<CMainDlg>
  2. 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()
  3. OnInitDialog() 函数中,将你的类注册为拖放文件目标
    LRESULT OnInitDialog(UINT /*uMsg*/, WPARAM /*wParam*/, 
      LPARAM /*lParam*/, BOOL& /*bHandled*/)
    {
        ...
        RegisterDropTarget();
        ...
    }
    
  4. 添加以下公共函数来处理拖放的文件
    void ProcessFile(LPCTSTR lpszPath)
    {
        // Add your logic
    }
就是这样。

结论

这个类非常简单,可能无法满足你所有的需求,但如果你只需要允许你的窗口接受拖放的文件并处理它们,那么这个类就适合你。

免责声明

本软件及其附带的文件按“原样”分发,不提供任何形式的保证,无论是明示的还是暗示的。对于可能造成的任何损害,概不负责。用户必须承担使用本软件的全部风险。

© . All rights reserved.