控制檯下用Win32 API打開文件對話框

在控制檯下打開對話框?!沒錯,這是完全可以的,實現起來也是相當簡單,基本上連雕蟲小技都不算。不過網上這樣的例子還不是很多,我就把自己寫的一個demo貼上來。參考了大名鼎鼎的《windows程序設計》中的一點代碼。

#include <Windows.h>
#include <CommDlg.h>
#include <iostream>

using namespace std;

static OPENFILENAME ofn ;

void PopFileInitialize (HWND hwnd)
{
     static TCHAR szFilter[] = TEXT ("所有圖片文件\0*.bmp;*.dib;*.jpg;*.jpeg;*.jpe;*.gif;*.tiff;*.png;*.ico\0")  \
                               TEXT ("JPEG文件 (*.jpg;*.jpeg;*.jpe)\0*.jpg;*.jpeg;*.jpe\0") \
                               TEXT ("位圖文件 (*.bmp;*.dib)\0*.bmp;*.dib\0") \
							   TEXT ("GIF (*.gif)\0*.gif\0") \
							   TEXT ("TIFF (*.tiff)\0*.tiff") \
							   TEXT ("PNG (*.png)\0*.png") \
							   TEXT ("ICO (*.ico)\0*.ico\0\0");
     
     ofn.lStructSize       = sizeof (OPENFILENAME) ;
     ofn.hwndOwner         = hwnd ;
     ofn.hInstance         = NULL ;
     ofn.lpstrFilter       = szFilter ;
     ofn.lpstrCustomFilter = NULL ;
     ofn.nMaxCustFilter    = 0 ;
     ofn.nFilterIndex      = 0 ;
     ofn.lpstrFile         = NULL ;          // Set in Open and Close functions
     ofn.nMaxFile          = MAX_PATH ;
     ofn.lpstrFileTitle    = NULL ;          // Set in Open and Close functions
     ofn.nMaxFileTitle     = MAX_PATH ;
     ofn.lpstrInitialDir   = NULL ;
     ofn.lpstrTitle        = NULL ;
     ofn.Flags             = 0 ;             // Set in Open and Close functions
     ofn.nFileOffset       = 0 ;
     ofn.nFileExtension    = 0 ;
     ofn.lpstrDefExt       = TEXT ("jpg") ;
     ofn.lCustData         = 0L ;
     ofn.lpfnHook          = NULL ;
     ofn.lpTemplateName    = NULL ;
}

BOOL PopFileOpenDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName)
{
     ofn.hwndOwner         = hwnd ;
     ofn.lpstrFile         = pstrFileName ;
     ofn.lpstrFileTitle    = pstrTitleName ;
     ofn.Flags             = OFN_HIDEREADONLY | OFN_CREATEPROMPT ;
     
     return GetOpenFileName (&ofn) ;
}

int main()
{
	static TCHAR     szFileName[MAX_PATH], szTitleName[MAX_PATH] ;
	HWND      hwnd;
	hwnd=GetForegroundWindow(); //獲取前臺窗口句柄。本程序中的前臺窗口就是控制檯窗口。 
	PopFileInitialize (hwnd);  //初始化ofn
	PopFileOpenDlg(hwnd, szFileName, szTitleName);//打開文件對話框
	cout<<szFileName<<endl;  //在控制檯中顯示選中文件的路徑
	return 0;
}
這個程序僅僅是一個簡單範例,用於在控制檯中打開文件對話框,順便再控制檯中輸出選中文件的路徑。記得把你的工程屬性中得字符集改成多字節字符集,因爲在Unicode字符集下路徑顯示出的是一串數字。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章