2010-07-02 50 views
1

我有一個用C++編寫的全屏應用程序,希望打開一個對話框窗口,這樣用戶就可以選擇一個文件來打開,而不必讓應用程序突破全屏模式。是否可以在全屏應用程序中創建GetOpenFileName對話框?

在Windows上,要以全屏模式運行,我打電話ChangeDisplaySettings(&settings, CDS_FULLSCREEN)。 (從技術上講,我使用SDL,但這是它使用了電話。)

要打開文件對話框中,我使用下面的代碼:

HWND hWnd = NULL; 
SDL_SysWMinfo wmInfo; 
SDL_VERSION(&wmInfo.version); 
if(SDL_GetWMInfo(&wmInfo)) { 
    hWnd = wmInfo.window; // Note: This is sucessful, and hWnd != NULL 
} 

OPENFILENAMEW ofn; 
wchar_t fileName[MAX_PATH] = L""; 
ZeroMemory(&ofn, sizeof(ofn)); 

ofn.lStructSize = sizeof(OPENFILENAME); 
ofn.hwndOwner = hWnd; 
ofn.lpstrFile = fileName; 
ofn.nMaxFile = MAX_PATH; 
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST; 

if(GetOpenFileNameW(&ofn)) { 
    DoSomethingWith(fileName); 
} 

運行時的hWnd不爲空,但是當此對話框已創建,它會將窗口焦點轉移到對話框,該對話框將突出顯示全屏應用程序,類似於在全屏幕中切換到另一個窗口。一旦文件被選中並且打開文件對話框關閉,我必須手動切換回全屏應用程序。

是否可以使用現有的Windows對話框做我想做的事情,還是必須編寫自己的應用內文件瀏覽系統或僅以窗口模式運行?

回答

1

當然......你只需要傳遞全屏窗口的HWND作爲打開文件通用對話框的父級(它是傳遞到GetOpenFileNameOPENFILENAME結構中的hwndOwner參數)。

+0

我添加了我用來獲取和設置hwndOwner的代碼,但即使在hwndOwner不爲NULL時它仍然不起作用。也許現在這更像是一個SDL問題。 – JDS 2010-07-02 23:46:11

+0

明天我會試試自己(在純C + WinAPI中,因爲我不知道SDL),我會讓你知道... – Wizard79 2010-07-02 23:49:51

+0

我知道這是在一個普通的Win32應用程序全屏運行。我對SDL一無所知,但我不知道它會做什麼不同。 – casablanca 2010-07-03 00:00:26

相關問題