ورود

View Full Version : سوال: سوال در مورد ديالوگ Open File



ali.2566
جمعه 06 شهریور 1388, 02:30 صبح
سلام
عزيزان من چند روز پيش يه برنامه نوشتم كه با فشردن يه دكمه صفحه ديالوگ براي انتخاب فايل باز ميشد و يه فايل رو انتخاب ميكردي و حذفش ميكرد.
حالا در اين مورد دوتا سوال دارم...
اول اينكه وقتي كاربر تو ديالوگ يه فايل رو انتخاب كنه و اوكي بزنه چه مقداري برميگرده؟ چطور ميشه از اين مقدار استفاده كرد؟ و همانطور براي دكمه كنسل
مثلا كاربر اگه كنسل رو زد برنامه بفمه و يه پيام بده كه فايلي انتخاب نشده.

و سوال دوم اينكه چه كدي بنويسم كه فايلي كه با اين نوع ديالوگ يا قبلي انتخاب شده ازش يه كپي بگيره؟ يا انتقالش بده به يه مسير ديگه كه
مثلا يه پوشه داخل همون مسيري كه خودش قرار داره.

اگه يه Sample كه داريد ممنون ميشم اينجا آپلود كنيد (در مورد ديالوگ Open File)

پيشاپيش ممنون

clover
جمعه 06 شهریور 1388, 06:04 صبح
اولا چه دیالوگی ؟
دوما چه برنامه ای ؟ win32 یا MFC ؟
اگر از دیالوگ های استاندارد ویندوز ( Open و Save As ) استفاده می کنید نام فایل در عضو داده ای lpstrFile در ساختار OPENFILENAME ذخیره میشه .

برای نمایش یک دیالوگ Open باید تابع GetOpenFileName را فراخوانی کنید . اعلان این تابع به صورت زیر هست :

BOOL GetOpenFileName( LPOPENFILENAME lpofn
);

پارامتر ها :
lpofn : یک اشاره گر هست به یک ساختار OPENFILENAME که برای مقدار دهی اولیه به دیالوگ و همچنین ذخیره مسیر فایل مورد استفاده قرار می گیره .
پس قبل از اینکه از این تابع استفاده کنید باید یک نمونه از ساختار OPENFILENAME تعریف کنید .
اعلان ساختار OPENFILENAME به شکل زیر هست :

typedef struct tagOFN {
DWORD lStructSize;
HWND hwndOwner;
HINSTANCE hInstance;
LPCTSTR lpstrFilter;
LPTSTR lpstrCustomFilter;
DWORD nMaxCustFilter;
DWORD nFilterIndex;
LPTSTR lpstrFile;
DWORD nMaxFile;
LPTSTR lpstrFileTitle;
DWORD nMaxFileTitle;
LPCTSTR lpstrInitialDir;
LPCTSTR lpstrTitle;
DWORD Flags;
WORD nFileOffset;
WORD nFileExtension;
LPCTSTR lpstrDefExt;
LPARAM lCustData;
LPOFNHOOKPROC lpfnHook;
LPCTSTR lpTemplateName;
#if (_WIN32_WINNT >= 0x0500)
void * pvReserved;
DWORD dwReserved;
DWORD FlagsEx;
#endif // (_WIN32_WINNT >= 0x0500)
} OPENFILENAME, *LPOPENFILENAME;

برخی اعضای داده ای :
lStructSize : مشخص کننده طول ساختار
hwndOwner : هندل پنجره برنامه
lpstrFile : نام فایل ( اشاره گر به رشته که نام فایل در آن ذخیره می شود )
nMaxFile : مشخص کننده حد اکثر طول مجاز برای نام فایل
lpstrFilter : رشته فیلتر فرمت ها و پسوندهای مجاز
Flags : فلگ هایی برای تنظیم مشخصات دیالوگ

در مثال زیر ابتدا یک ساختار OPENFILENAME تعریف و مقدار دهی اولیه شده و سپس تابع GetOpenFileName فراخوانی شده . در صورتی که دکمه OK را کلیک بشه تابع مقدار TRUE را بر می گردونه و با استفاده از تابع CreateFile فایل مورد نظر باز می شه . دقت کنید که در پارامتر اول تابع CreateFile مسیر فایل مورد نظر نیازه ( که در عضو داده ای lpstrFile از ساختار ofn قرار داره ) .


OPENFILENAME ofn; // common dialog box structure
char szFile[260]; // buffer for file name
HWND hwnd; // owner window
HANDLE hf; // file handle

// Initialize OPENFILENAME
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hwnd;
ofn.lpstrFile = szFile;
//
// Set lpstrFile[0] to '\0' so that GetOpenFileName does not
// use the contents of szFile to initialize itself.
//
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

// Display the Open dialog box.

if (GetOpenFileName(&ofn)==TRUE)
hf = CreateFile(ofn.lpstrFile, GENERIC_READ,
0, (LPSECURITY_ATTRIBUTES) NULL,
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL,
(HANDLE) NULL);


البته این مثال خود msdn هست و احتیاج به کمی تغییر داره .

ali.2566
جمعه 06 شهریور 1388, 06:28 صبح
ممنونم
راستش من فقط MFC كار ميكنم

ببخشيد كه اينقدر اذيتتون ميكنم ولي اگه براتون امكانش هست يك پروژه MFC كه با كليك روي دكمه اي يه ديالوگ انتخاب فايل (همان كه ساده تره و فقط ليست درايوها رو داره ) ظاهر بشه، بعد فايلي كه انتخاب ميكنيم رو اسمش رو عوض كنه و يك كپي هم ازش بگيره.
البته هر موقع وقت آزاد داشتيد و دوست داشتيد به اين بنده كمك كنيد :لبخندساده: