2010-03-13 5 views
2

J'essaie de créer une application très simple en utilisant Windows API.Windows API - Aide débutant

J'ai fait quelques petites applications dans la console. C'est la première fois que je fais avec des applications Win32. J'ai recherché et trouvé un document de faussaires recommandé sur ce site. Mais j'essaie d'écrire toute première ligne:

#include <stdafx.h> 
#include <windows.h> 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, int nCmdShow) 
{ 
    MessageBoxW(NULL, "Good bye Cruel World", "Note", MB_OK); 
    return 0; 
} 

Mais il ne fonctionne pas (lignes effacées de projet par défaut créé par VS 2008 et d'écrire ces lignes).

Répondre

1

Il existe deux versions de la plupart des appels d'API Windows, une qui accepte une chaîne à un octet et une qui accepte des chaînes Unicode à deux octets. Le seul octet a un A à la fin du nom et le 2 octets a un W. Il y a des macros définies dans windows.h de sorte que si vous laissez la lettre, elle choisit l'une ou l'autre selon les macros du compilateur.

Dans votre code que vous écrivez -

MessageBoxW (NULL, "Good bye Cruel World", "Note", MB_OK); 

Vous appelez la version large de caractères de l'API avec des chaînes d'un octet qui ne fonctionnera pas. Changez en MessageBoxA ou changez vos chaînes en chaînes étendues -

MessageBoxW (NULL, L"Good bye Cruel World", L"Note", MB_OK); 
0

Supprimer la première ligne. Ce qui reste est un programme Windows valide, qui devrait compiler sous n'importe quel IDE. Votre problème est l'en-tête stdafx.h qui est un artefact de VS, et vous pouvez avoir d'autres problèmes si vous essayez de "réutiliser" un projet VS existant. Si vous voulez savoir comment la compilation fonctionne vraiment, c'est une bonne idée de créer des applications simples n'utilisant pas un IDE, mais un compilateur en ligne de commande comme MinGW.

Et à l'avenir, postez les messages d'erreur que vous obtenez en utilisant copier et coller.

+0

Cela ne fonctionne pas lorsque je n'inclue pas la 1ère ligne. Mon école utilise VS alors je dois les suivre :) – nXqd

+0

@nXqd "Ça ne marche pas" ne nous sert à rien - vous devez nous dire exactement quels sont les messages d'erreur que vous recevez. –

0

Vous avez besoin d'au moins une boucle de message à exécuter, pour l'application de traiter les messages:

while(GetMessage(&msg, NULL, 0, 0)) 
{ 
    TranslateMessage(&msg); 
    DispatchMessage(&msg); 
} 

Il y a de nombreux tutoriels sur la boucle de message sur le web, comme ici:

Si vous débutez la programmation graphique, vous êtes mieux de lire un livre, et de travailler à travers les exemples. Petzold est un classique. Apprentissage de la programmation en recueillant des extraits de code fonctionnant partiellement crées à partir de pages Web aléatoires va prendre du temps, difficile et inégale. Un livre bien écrit vous guidera à travers les principes fondamentaux et expliquera les choses par étapes. S'amuser!

+1

Non, vous ne le faites pas. Il est parfaitement possible d'écrire des applications Windows sans boucle de message - le code du questionneur en est un exemple. –

+0

Ok, bon point - donc 'MessageBox' a sa propre pompe de message. Les conseils sur la lecture d'un bon livre sont toujours valables. :) – gavinb