2010-07-02 4 views
1

J'ai une application en plein écran en C++ et je voudrais ouvrir une fenêtre de dialogue pour que l'utilisateur puisse sélectionner un fichier à ouvrir sans que l'application ne sorte du mode plein écran.Est-il possible de créer une boîte de dialogue GetOpenFileName dans une application en plein écran?

Sous Windows, pour exécuter en mode plein écran, j'appelle le ChangeDisplaySettings(&settings, CDS_FULLSCREEN). (Techniquement, j'utilise SDL, mais cela est l'appel qu'il utilise.)

Pour ouvrir la boîte de dialogue de fichier, j'utilise le code suivant:

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); 
} 

Lorsqu'il est exécuté, hWnd est NULL, mais quand ce dialogue est créé, il déplace le focus de la fenêtre vers la boîte de dialogue, qui sort de l'application en plein écran, similaire à alt-tabulation à une autre fenêtre en plein écran. Une fois le fichier sélectionné et la boîte de dialogue Ouvrir le fichier fermée, je dois revenir manuellement à l'application plein écran.

Est-il possible de faire ce que je veux en utilisant les boîtes de dialogue Windows existantes, ou dois-je écrire mon propre système de navigation dans les fichiers de l'application ou exécuter en mode fenêtré seulement?

Répondre

1

... Bien sûr, il vous suffit de passer le HWND de la fenêtre en plein écran comme parent de la boîte de dialogue commune Ouvrir un fichier (il est le paramètre hwndOwner dans la structure OPENFILENAME qui est passé à GetOpenFileName).

+0

J'ai ajouté le code que j'utilise pour obtenir et définir le hwndOwner, mais cela ne fonctionne toujours pas même si hwndOwner n'est pas NULL. Peut-être que c'est plus une question SDL maintenant. – JDS

+0

Hmm demain je vais essayer moi-même (en clair C + WinAPI car je ne connais pas SDL) et je vous le ferai savoir ... – Wizard79

+0

Je sais que cela fonctionne dans une application Win32 normale fonctionnant en plein écran. Je n'ai aucune idée de SDL, mais je ne sais pas ce que ça pourrait faire différemment. – casablanca

Questions connexes