拖动文件到程序中得文件名示例程序

//WinXP, VS2008
//拖动文件到程序中得文件名示例程序 
  
//step1:新建项目new project-win32 project->Empty project. 
  
//Step 2: add WinMain.cpp, set Character set as not set in project properties 
//检查在属性use of MFC里是否选的Standard Windows Libraries,不是就改为这个。 
  
/*Step 3: Add resources就是做界面:dialog(IDD_MAIN), edit-control(IDC_EDIT1)

step 4: copy codes to make WinMain.cpp
  
step 4: build, debug,就应该可以看到运行了
* 
*/
  
  
  
// 链接到comctl32.lib库 
#pragma comment(lib,"comctl32.lib") 


#include <windows.h> 

#include "resource.h" 


#include <Shellapi.h> //因为要用拖拽的WM_DROPFILES消息 



//---------------------------------------------------------------------- 
char szFileName[MAX_PATH]=""; //用于存放文件的地址 

//函数声明 
BOOL __stdcall DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); 


//以下为主函数 

//入口函数:生成程序界面、界面颜色 
int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int) 
{ 

    int nResult = ::DialogBoxParam( 
	hInstance, // 实例句柄 
	(LPCTSTR)IDD_MAIN, // 对话框资源ID号 
	NULL, // 父窗口句柄 
	DlgProc, // 消息处理函数 
	NULL); // 对话框初始化的值,在WM_INITDIALOG消息的lParam参数中取出 

    //::DeleteObject(g_hBgBrush); 

    return 0; 
} 




//消息响应函数:所以与界面的互动的消息都在这里处理 
BOOL __stdcall DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) 
{ 

    switch(message) 
    { 


    case WM_DROPFILES: 
	{ 

            HDROP hDrop=(HDROP)wParam; //hDrop是消息的来源对象句柄

            DragQueryFile(hDrop, 0, (LPTSTR)szFileName, _MAX_PATH);  //DragQueryFile是可以使用这句柄的函             数,0表示只取第1个拖进来的文件的值,szFileName是存入文件名的变量,设在了前面的全局变量中

	   //设置文本框内容的精典语句 
	    HWND hwd=::GetDlgItem(hDlg,IDC_EDIT1);  

	    ::SetWindowText(hwd,szFileName); 
	    //………………………………………….. 

	} 
	break; 

	case WM_COMMAND: //这里是响应按纽的地方 
	switch(LOWORD(wParam)) { 
	  case IDCANCEL: 
	    ::EndDialog (hDlg, IDCANCEL); 
	  break; 
      
     }

 } 


    return 0; 
} 

程序运行如图,选个文件拖上去可以看到文件名

照着写的做就行了。

 

找WM_DROPFILES找了半天,网上很多都是用MFC什么做的,再就是VC6.0版本的,不胜其烦,还是直接走消息路线对做小程序来说才是王道啊,写这例子,希望对大家有所帮助了

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现拖动文件程序中并查看文件内容,可以使用`QDragEnterEvent`和`QDropEvent`事件。在`QDragEnterEvent`中,我们需要检查拖动文件是否符合我们的要求,如果符合,则接受拖放事件。在`QDropEvent`中,我们可以获取拖放的文件路径,然后读取文件内容并显示在界面上。 以下是一个示例代码: ```cpp // 在窗口的构造函数中设置窗口接受拖放事件 setAcceptDrops(true); ... void MyWindow::dragEnterEvent(QDragEnterEvent *event) { if (event->mimeData()->hasUrls()) { QStringList fileNames; foreach (const QUrl &url, event->mimeData()->urls()) { QString fileName = url.toLocalFile(); if (QFileInfo(fileName).suffix() == "txt") { // 如果文件后缀是 txt,接受拖放事件 event->acceptProposedAction(); return; } } } } void MyWindow::dropEvent(QDropEvent *event) { foreach (const QUrl &url, event->mimeData()->urls()) { QString fileName = url.toLocalFile(); if (QFileInfo(fileName).suffix() == "txt") { QFile file(fileName); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) { // 读取文件内容 QString content = QString::fromUtf8(file.readAll()); file.close(); // 在界面上显示文件内容 ui->textEdit->setText(content); return; } } } } ``` 在上面的代码中,我们检查拖动文件是否是txt文件,如果是,则接受拖放事件并读取文件内容并显示在窗口的`TextEdit`控件中。注意,我们需要在窗口的构造函数中调用`setAcceptDrops(true)`来启用窗口的拖放事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值