纯win32的做法, 和duilib没半点关系.
只是被增加文件拖拽功能的工程是 基于duilib的win32工程~
- /// 创建能接受文件拖拽的对话框
- void CMainDlg::DoTask()
- {
- CAcceptFilesDlg * pDlg = NULL;
- pDlg = new CAcceptFilesDlg(XML_FILE_NAME, WND_CLASS_NAME);
- pDlg->SetOwner(this);
- /// 创建对话框时, 指定接受文件拖拽的风格
- pDlg->Create(
- this->GetHWND(),
- WND_DISP_NAME,
- UI_WNDSTYLE_FRAME,
- WS_EX_WINDOWEDGE | WS_EX_ACCEPTFILES);
- pDlg->CenterWindow();
- HaveSubDlgOnMainDlg(TRUE);
- pDlg->ShowModal();
- HaveSubDlgOnMainDlg(FALSE);
- }
- /// ...
- LRESULT CAcceptFilesDlg::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch (uMsg)
- {
- case WM_DROPFILES:
- {
- DropFileOnDlg((HDROP)wParam);
- }
- break;
- /// ...
- default:
- break;
- }
- return __super::HandleMessage(uMsg, wParam, lParam);
- }
- void CAcceptFilesDlg::DropFileOnDlg(HDROP hDrop)
- {
- WORD wNumFilesDropped = DragQueryFile(hDrop, -1, NULL, 0);
- WORD wPathnameSize = 0;
- WCHAR * pFilePathName = NULL;
- std::wstring strFirstFile = L"";
- struct _stat64i32 info;
- // there may be many, but we'll only use the first
- if (wNumFilesDropped > 0)
- {
- wPathnameSize = DragQueryFile(hDrop, 0, NULL, 0);
- wPathnameSize++;
- pFilePathName = new WCHAR[wPathnameSize];
- if (NULL == pFilePathName)
- {
- _ASSERT(0);
- DragFinish(hDrop);
- return;
- }
- ::ZeroMemory(pFilePathName, wPathnameSize);
- DragQueryFile(hDrop, 0, pFilePathName, wPathnameSize);
- strFirstFile = pFilePathName;
- SAFE_DELETE(pFilePathName);
- }
- DragFinish(hDrop);
- if ((strFirstFile.size() > 0)
- && (0 == _wstat(strFirstFile.c_str(), &info))
- && ((info.st_mode & _S_IFREG) > 0)
- && (info.st_size > 0))
- {
- m_pLabelFilePathName->SetText(strFirstFile.c_str());
- }
- }