VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 327|回复: 1

VC++基础班-[16]让对话框支持拖拽功能

[复制链接]
51_avatar_middle
online_admins Syc 发表于 2018-1-24 23:19:50 | 显示全部楼层 |阅读模式
------------------------------------------ Begin ----------------------------------------
①、目录选择对话框:

TCHAR szPath[MAX_PATH] = {0};
BROWSEINFO mBroInfo = {0};
mBroInfo.hwndOwner = m_hWnd;
ITEMIDLIST *pidl = SHBrowseForFolder(&mBroInfo);
if (SHGetPathFromIDList(pidl, szPath)){
        SetDlgItemText(IDC_PATH_EDIT, szPath);
}
CoTaskMemFree(pidl);

#####################################################

②、目录选择对话框的初始化选择路径:
mBroInfo.lpfn = BrowseCallbackProc;

int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
        if(uMsg == BFFM_INITIALIZED){
                ::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)_T("D:\\Program Files\\SoftWare"));
        }
        return 0;
}

#####################################################

③、目录选择对话框的根目录设定:
LPITEMIDLIST GetItemIDListFromPath(CString strPath)
{
        if (strPath.IsEmpty())
                return NULL;

        LPSHELLFOLDER pDesktopFolder = NULL;
        HRESULT hr = SHGetDesktopFolder(&pDesktopFolder);
        if (FAILED(hr))
                return NULL;

        PWCHAR pWchar = NULL;
#ifdef _UNICODE
        pWchar = (LPTSTR)(LPCTSTR)strPath;
#else
        USES_CONVERSION;
        pWchar = A2W(strPath);
#endif

        LPITEMIDLIST pItemIDList = NULL;
        hr = pDesktopFolder->ParseDisplayName(NULL, NULL, pWchar, NULL, &pItemIDList, NULL);
        pDesktopFolder->Release();
        if ( FAILED(hr))
                return NULL;

        return pItemIDList;
}

#####################################################

④、让对话框程序支持拖拽
1> 对话框模版的 Accept Files 属性设置成 True;
2> 响应主对话框类的 WM_DROPFILES 消息;
3> 添加如下示例代码:

TCHAR szPath[MAX_PATH] = {0};
UINT nCount = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);
for(UINT idx = 0; idx < nCount; ++idx) {
        DragQueryFile(hDropInfo, idx, szPath, MAX_PATH);
        MessageBox(szPath);
}
DragFinish(hDropInfo);
------------------------------------- End -------------------------------------------

相关课程演示细节还请观看视频教程!
本套教程由VC驿站原创,提供视频教程+售后答疑服务!
教程介绍及详情请见:https://www.cctry.com/thread-17282-1-1.html
VC驿站Vip会员详情请见:https://www.cctry.com/static/vip/index.html





上一篇:VC++基础班-[15]通用对话框讲解
下一篇:VC++基础班-[17]对话框的菜单操作

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-12-15 04:46

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表