//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版本的,不胜其烦,还是直接走消息路线对做小程序来说才是王道啊,写这例子,希望对大家有所帮助了