VC 拖拽文件(快捷方式文件)到控件 (源码)

35 篇文章 3 订阅
27 篇文章 0 订阅

先介绍下,对对话框需要设置属性:AcceptFile为true;

源码工程:下载

#include <windows.h>
#include <ShlObj.h>
#include <CommCtrl.h>
#include <WindowsX.h>
#include "resource.h"

LRESULT CALLBACK DialogProc(HWND ,UINT,WPARAM,LPARAM) ;
void OnInitDialog(HWND hDlg);
void OnOK(HWND hDlg);
void HandleDragFile(HWND hDlg, HDROP hDrop);

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)       
{ 
	MSG msg;
	HWND hwnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)DialogProc);       
	ShowWindow(hwnd, SW_SHOW);       
	UpdateWindow(hwnd);           
	while(GetMessage(&msg, NULL, 0, 0))       
	{ 
		if( !IsDialogMessage( hwnd, &msg ) )
		{
			TranslateMessage(&msg);
			DispatchMessage(&msg);  
		}
	}    
	return msg.wParam;    
}

LRESULT CALLBACK DialogProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)       
{  
	switch(uMsg)    
	{    
	case WM_INITDIALOG:  
		OnInitDialog(hWnd);
		SetWindowPos(hWnd,NULL,500,200,0,0,SWP_NOSIZE); 
		return TRUE; 
	case WM_DROPFILES:
		HandleDragFile(hWnd,reinterpret_cast<HDROP>(wParam));
		break;
	case WM_COMMAND:    

		if(LOWORD(wParam) == IDOK)     
		{                   
			//OnOK(hWnd); 
			PostQuitMessage(0);
			return TRUE;    
		}
		if(LOWORD(wParam) == IDCANCEL)
		{
			PostQuitMessage(0);
			return TRUE;
		}
		break;            
	case WM_DESTROY:    
		PostQuitMessage(0);    
		break;    
	}    
	return FALSE;
}

void OnInitDialog(HWND hDlg)
{
	HWND hwndView = GetDlgItem(hDlg,IDC_VIEW);
	//
	RECT rc;
	DWORD dwStyle = GetWindowStyle(hwndView);
	SetWindowLong(hwndView, GWL_STYLE, dwStyle | LVS_REPORT);
	GetClientRect(hwndView, &rc);
	LV_COLUMN lvc;
	ZeroMemory(&lvc, sizeof(LV_COLUMN));
	lvc.mask = LVCF_TEXT | LVCF_WIDTH;
	lvc.pszText = TEXT("The Link Path");
	lvc.cx = rc.right;
	ListView_InsertColumn(hwndView, 0, &lvc);  //添加一项

}

void HandleDragFile(HWND hDlg, HDROP hDrop)
{
	POINT pt;
	DragQueryPoint(hDrop,&pt); //获取拖拽鼠标点
	ClientToScreen(hDlg,&pt); // 
	HWND hwndDrop = WindowFromPoint(pt);   //获取拖拽点所在的控件
	HWND hwndView = GetDlgItem(hDlg, IDC_VIEW);
	if(hwndDrop != hwndView)  //判断是否在IDC_VIEW控件上
	{
		MessageBox(hDlg,TEXT("Sorry, you have to drop over the list view control!"),TEXT("Message"),MB_OK);
		return;
	}
	LONG count = DragQueryFile(hDrop,-1,NULL,0);  //获取拖拽的文件数目
	BSTR szFileName = SysAllocStringLen(NULL,MAX_PATH);  //分配字符串	//
	LV_ITEM lvi;
	ZeroMemory(&lvi, sizeof(LV_ITEM));
	for (int i=0; i<count; i++)
	{
		DragQueryFile(hDrop,i,szFileName,MAX_PATH);    //获取路径名
		lvi.mask = LVIF_TEXT;  //增加一项
		lvi.pszText = szFileName;
		lvi.cchTextMax = lstrlen(szFileName);
		lvi.iItem = 0;
		ListView_InsertItem(hwndView, &lvi);
	}
}

void OnOK(HWND hDlg)
{

}

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iot-genius

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值