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對話框做我想做的事情,還是必須編寫自己的應用內文件瀏覽系統或僅以窗口模式運行?
我添加了我用來獲取和設置hwndOwner的代碼,但即使在hwndOwner不爲NULL時它仍然不起作用。也許現在這更像是一個SDL問題。 – JDS 2010-07-02 23:46:11
明天我會試試自己(在純C + WinAPI中,因爲我不知道SDL),我會讓你知道... – Wizard79 2010-07-02 23:49:51
我知道這是在一個普通的Win32應用程序全屏運行。我對SDL一無所知,但我不知道它會做什麼不同。 – casablanca 2010-07-03 00:00:26