首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

关于鼠标拖放操作解决方案

2013-01-11 
关于鼠标拖放操作我想将某个文件夹用鼠标拖放到我编写的程序的窗口里面,然后我的程序获得这个文件夹的绝对

关于鼠标拖放操作
我想将某个文件夹用鼠标拖放到我编写的程序的窗口里面,然后我的程序获得这个文件夹的绝对路径。请问如何实现?我看过其他的帖子说是用Shell扩展,还有其他比较簡単的实现方法吗?
[解决办法]
从Exploer拖放到你的程序中,这个简单,处理WM_DROPFILES消息即可。如果是想从自己的程序中拖出到Explorer中,这个才需要用到Shell扩展。
[解决办法]
简单示例:

首先需要设置使窗体接受拖放

__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
// 使窗体接受拖放
::DragAcceptFiles(Handle, true);
}


然后通过重载WndProc过程实现对WM_DROPFILES消息的拦截处理:
.h文件中:
private:// User declarations
    void __fastcall WndProc(TMessage &Msg);

.cpp文件中:
void __fastcall TForm1::WndProc(TMessage &Msg)
{
    if (Msg.Msg == WM_DROPFILES)
{
TCHAR szFileName[MAX_PATH];
UINT uFileCount = ::DragQueryFile((HDROP)Msg.WParam, 0, szFileName, MAX_PATH);
::DragFinish((HDROP)Msg.WParam);
if (!uFileCount) return;

        Caption = szFileName;
    }
    TForm::WndProc(Msg);
}

热点排行