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?
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
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
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