VC拖拽文件到控件

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

[cpp] view plaincopyprint?
  1. #include <windows.h>
  2. #include <ShlObj.h>
  3. #include <CommCtrl.h>
  4. #include <WindowsX.h>
  5. #include "resource.h"
  6. LRESULT CALLBACK DialogProc(HWND ,UINT,WPARAM,LPARAM) ;
  7. void OnInitDialog(HWND hDlg);
  8. void OnOK(HWND hDlg);
  9. void HandleDragFile(HWND hDlg, HDROP hDrop);
  10. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
  11. {
  12. MSG msg;
  13. HWND hwnd = CreateDialog(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC)DialogProc);
  14. ShowWindow(hwnd, SW_SHOW);
  15. UpdateWindow(hwnd);
  16. while(GetMessage(&msg, NULL, 0, 0))
  17. {
  18. if( !IsDialogMessage( hwnd, &msg ) )
  19. {
  20. TranslateMessage(&msg);
  21. DispatchMessage(&msg);
  22. }
  23. }
  24. return msg.wParam;
  25. }
  26. LRESULT CALLBACK DialogProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
  27. {
  28. switch(uMsg)
  29. {
  30. case WM_INITDIALOG:
  31. OnInitDialog(hWnd);
  32. SetWindowPos(hWnd,NULL,500,200,0,0,SWP_NOSIZE);
  33. return TRUE;
  34. case WM_DROPFILES:
  35. HandleDragFile(hWnd,reinterpret_cast<HDROP>(wParam));
  36. break;
  37. case WM_COMMAND:
  38. if(LOWORD(wParam) == IDOK)
  39. {
  40. //OnOK(hWnd);
  41. PostQuitMessage(0);
  42. return TRUE;
  43. }
  44. if(LOWORD(wParam) == IDCANCEL)
  45. {
  46. PostQuitMessage(0);
  47. return TRUE;
  48. }
  49. break;
  50. case WM_DESTROY:
  51. PostQuitMessage(0);
  52. break;
  53. }
  54. return FALSE;
  55. }
  56. void OnInitDialog(HWND hDlg)
  57. {
  58. HWND hwndView = GetDlgItem(hDlg,IDC_VIEW);
  59. //
  60. RECT rc;
  61. DWORD dwStyle = GetWindowStyle(hwndView);
  62. SetWindowLong(hwndView, GWL_STYLE, dwStyle | LVS_REPORT);
  63. GetClientRect(hwndView, &rc);
  64. LV_COLUMN lvc;
  65. ZeroMemory(&lvc, sizeof(LV_COLUMN));
  66. lvc.mask = LVCF_TEXT | LVCF_WIDTH;
  67. lvc.pszText = TEXT("The Link Path");
  68. lvc.cx = rc.right;
  69. ListView_InsertColumn(hwndView, 0, &lvc); //添加一项
  70. }
  71. void HandleDragFile(HWND hDlg, HDROP hDrop)
  72. {
  73. POINT pt;
  74. DragQueryPoint(hDrop,&pt); //获取拖拽鼠标点
  75. ClientToScreen(hDlg,&pt); //
  76. HWND hwndDrop = WindowFromPoint(pt); //获取拖拽点所在的控件
  77. HWND hwndView = GetDlgItem(hDlg, IDC_VIEW);
  78. if(hwndDrop != hwndView) //判断是否在IDC_VIEW控件上
  79. {
  80. MessageBox(hDlg,TEXT("Sorry, you have to drop over the list view control!"),TEXT("Message"),MB_OK);
  81. return;
  82. }
  83. LONG count = DragQueryFile(hDrop,-1,NULL,0); //获取拖拽的文件数目
  84. BSTR szFileName = SysAllocStringLen(NULL,MAX_PATH); //分配字符串 //
  85. LV_ITEM lvi;
  86. ZeroMemory(&lvi, sizeof(LV_ITEM));
  87. for (int i=0; i<count; i++)
  88. {
  89. DragQueryFile(hDrop,i,szFileName,MAX_PATH); //获取路径名
  90. lvi.mask = LVIF_TEXT; //增加一项
  91. lvi.pszText = szFileName;
  92. lvi.cchTextMax = lstrlen(szFileName);
  93. lvi.iItem = 0;
  94. ListView_InsertItem(hwndView, &lvi);
  95. }
  96. }
  97. void OnOK(HWND hDlg)
  98. {
  99. }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值