PDA

View Full Version : سوال: مشکلی در رویداد OnDropFiles



A_Salimi
سه شنبه 19 آذر 1387, 15:48 عصر
من قصد دارم آدرس و نام فایل drop شده در یک دیالوگ را بدست آورم لطفا بگید کد زیر چه اشکالی دارد که در بافر اعداد در همی چاپ می شود ؟



void CExprimDlg::OnDropFiles(HDROP hDropInfo)
{
TCHAR st[50];
UINT num=::DragQueryFile(hDropInfo,0xFFFFFFFF,st,50);
CDialog::OnDropFiles(hDropInfo);
}


http://tinypic.info/files/3rnmq6ldsbd1asu8wngd.jpg

ضمنا از چند روش دیگر هم استفاده کردم که مشکل دارند:
مثلا :



CString st;
UINT num=::DragQueryFile(hDropInfo,0xFFFFFFFF,st.GetBuf fer(st.GetLength

()),st.GetLength());



و یا اینکه در پارامتر سوم مستقیما متغیری از نوع LPWSTR گذاشتم که فرق نکرد.

و num هم مقداری را برنمیگرداند و البته در MSDN هم توصیه ای برای استفاده از GetLastError() برای این تابع نشده بود.بنابراین من هم استفاده نکردم.

لطفا بگید آیا روش من درست است؟
با تشکر.

Nima_NF
سه شنبه 19 آذر 1387, 17:28 عصر
وقتی از 0xFFFFFFFF استفاده می کنیم که می خواهیم تعداد فایل هایی که drag شده است را بدست آوریم:



UINT num=::DragQueryFile(hDropInfo,0xFFFFFFFF, NULL, 0);

سپس با توجه به آن شروع به خواندن اسامی فایل می کنید، که این ایندکس از 0 شروع می شود تا تعداد فایل های darg شده.
وقتی می دانید که فقط یک چیز darg شده است ایندکس آن 0 است:



UINT num=::DragQueryFile(hDropInfo, 0 , st, 50);

پس به همین شکل می توانید از Cstring به شکل دوم خود استفاده کنید.