使用拖放的简单方法
来源:互联网 发布:恺英网络阿拉德之怒 编辑:程序博客网 时间:2024/05/11 13:40
如果要为窗口增加接受Drag&Drop的功能,请按照以下步骤:
1、在OnCreate(...)中调用AcceptDrag(TRUE)。
2、增加消息映射
BEGIN_MESSAGE_MAP(……)
//{{AFX_MSG_MAP(CDropEdit)
ON_WM_CREATE()
ON_WM_DROPFILES() // 关于Drag&Drop的消息
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
3、处理消息
void CXXXXX::OnDropFiles(HDROP dropInfo)
{
// 得到Drag&Drop的文件个数
WORD wNumFilesDropped = DragQueryFile(dropInfo, -1, NULL, 0);
CString firstFile="";
//
for (WORD x = 0 ; x < wNumFilesDropped; x++) {
// 得到PathName的长度,由于第三个参数为NULL,所以调用会失败并返回所需长度
WORD wPathnameSize = DragQueryFile(dropInfo, x, NULL, 0);
// 分配memory
char * npszFile = (char *) LocalAlloc(LPTR, wPathnameSize += 1);
// 分配错
if (npszFile == NULL) continue;
// 再次得到文件名
DragQueryFile(dropInfo, x, npszFile, wPathnameSize);
firstFile=npszFile;
// 如果是shortCut则进行转换得到正确的文件名,expandedFile为最后的文件名
CString expandedFile = ExpandShortcut(firstFile);
// 释放memory
LocalFree(npszFile);
}
//完成
DragFinish(dropInfo);
}
4、关于ExpandShortcut(...)
CString CXXXXX::ExpandShortcut(CString &inFile)
{
CString outFile = "";
// Make sure we have a path
ASSERT(inFile != _T(""));
IShellLink* psl;
HRESULT hres;
LPTSTR lpsz = inFile.GetBuffer(MAX_PATH);
// Create instance for shell link
hres = ::CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,
IID_IShellLink, (LPVOID*) &psl);
if (SUCCEEDED(hres))
{
// Get a pointer to the persist file interface
IPersistFile* ppf;
hres = psl->QueryInterface(IID_IPersistFile, (LPVOID*) &ppf);
if (SUCCEEDED(hres))
{
// Make sure it's ANSI
WORD wsz[MAX_PATH];
::MultiByteToWideChar(CP_ACP, 0, lpsz, -1, wsz, MAX_PATH);
// Load shortcut
hres = ppf->Load(wsz, STGM_READ);
if (SUCCEEDED(hres)) {
WIN32_FIND_DATA wfd;
// find the path from that
HRESULT hres = psl->GetPath(outFile.GetBuffer(MAX_PATH),
MAX_PATH,
&wfd,
SLGP_UNCPRIORITY);
outFile.ReleaseBuffer();
}
ppf->Release();
}
psl->Release();
}
inFile.ReleaseBuffer();
// if this fails, outFile == ""
return outFile;
}
摘自玉海园 http://www.mfc2000.yeah.net
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=9081
- 使用拖放的简单方法
- UMG简单的拖放控制
- 简单拖放
- HTML5 拖放API的使用
- 分享10个使用简单的jQuery的拖放插件(drag and drop plugin)
- flex4 图片/组件 拖放的简单实现
- HTML5 拖放及排序的简单实现
- HTML5实现简单的拖放功能
- Qt学习------简单的文件拖放操作
- 实现文件拖放的一种简洁方法
- 文件拖放的一种简洁方法
- 实现文件拖放的一种简洁方法
- 实现文件拖放的一种简洁方法
- MFC对话框接受文件拖放的方法
- 不用按着鼠标拖放的方法
- VC实现文件拖放的方法
- 实现文件拖放的一种简洁方法
- 实现文件拖放的一种简洁方法
- pl/sql----子程序
- windows下用VC6.0和stlport 5.1.4编译log4cplus 1.02
- 6--创建型模式专题总结
- Linux开发中的常用命令
- (转)谈基于.net平台windows开发中的模式窗体
- 使用拖放的简单方法
- 有关属性对话框(property sheet )的几个提示
- Char[] 引起的 unsigned shot* 转 char* 的错误
- Microsoft .NET Pet Shop 4:将 ASP.NET 1.1 应用程序迁移到 2.0
- 多字节与宽字节相互转换的方法
- C++中类成员函数指针的继承
- CString 与 CComVariant 转换
- Bridges of Friendship
- 给GridView添加行单击事件