2013-08-05 3 views
2

J'ai créé une animation en C++ en utilisant OpenGL et SDL (elle n'utilise pas de bibliothèques Windows) et souhaite l'utiliser comme économiseur d'écran pour un système Windows. J'ai lu un exemple: il décrit que vous devez simplement changer l'extension .exe en .scr.C++ Création d'un économiseur d'écran pour Windows

J'ai fait cela et j'ai couru l'animation comme un économiseur d'écran mais j'ai remarqué que l'animation ne fonctionnait pas du tout. Comme s'il y avait une perte dans la performance de l'application.

L'application que j'ai créée crée l'animation, la place en plein écran, cache le curseur et gère toutes les entrées au clavier. Comment puis-je faire fonctionner mon application comme un économiseur d'écran?

+0

probablement avec DirectX cela fonctionne mieux. La performance du fichier exe est-elle comme vous le souhaitez? – user2029077

+0

Le fichier exe fonctionne parfaitement. quand je le change en scr, il perd de la performance. Est-ce un problème courant lors du changement d'extension? – starhacker

+0

Je ne suis pas sûr. Il semble que Windows traite scr autrement. Essayez de changer les économiseurs d'écran des fenêtres natives en fichiers exe et comparez leur performance. – user2029077

Répondre

4

Il ne s'agit pas simplement de renommer le fichier.

Au strict minimum, vous devez prendre en charge un comportement correct en réponse aux paramètres de ligne de commande suivante (prise de Microsoft):

ScreenSaver   - Show the Settings dialog box. 
ScreenSaver /c  - Show the Settings dialog box, modal to the 
         foreground window. 
ScreenSaver /p <HWND> - Preview Screen Saver as child of window <HWND>. 
ScreenSaver /s  - Run the Screen Saver. 

Si plusieurs instances de l'exécutable sont en cours de démarrage et exécuté comme un écran plein écran économiseur (l'économiseur d'écran ne devrait réellement fonctionner que si/s est spécifié), ce qui peut être la cause de vos problèmes de performance. Vous devriez vérifier cela par ex. Gestionnaire des tâches.

Espérons que ça aide.

+0

Afin de faire l'économiseur d'écran, je devrais faire un projet Win32? Comme j'ai utilisé SDL, j'ai besoin de la fonction principale, car sans elle, elle revendique une référence indéfinie à 'SDL_main'. – starhacker

+1

Oui, créez un projet d'application Windows et utilisez simplement main() au lieu de WinMain(). Voir "créer un projet avec SDL" sur http://www.libsdl.org/tmp/SDL/VisualC.html. –

+0

Eh bien cela fait déjà un certain temps que j'ai fini mon économiseur d'écran de travail. Je l'ai fait dans un projet Win32 en utilisant seulement OpenGL avec un soutien approprié. Mon animation fait simplement pivoter une image en continu, mais l'économiseur d'écran, mais ne fonctionne pas en douceur lors de la rotation de grandes images (800 x 800), je dois donc réduire à environ (200 x 200). – starhacker

Questions connexes