在控制檯下打開對話框?!沒錯,這是完全可以的,實現起來也是相當簡單,基本上連雕蟲小技都不算。不過網上這樣的例子還不是很多,我就把自己寫的一個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字符集下路徑顯示出的是一串數字。