Bonjour,

J'ai passé un moment à consulter les nombreux messages qui traitent de problèmes d'édition de lien (en particulier LNK2019), mais je n'y ai pas trouvé d'explication ou de solution à mon problème.

J'ai peu d'expérience en programmation windows en C++, et j'utilise Visual C++ 2008.

Afin de m'initier à l'API win32 et aux MFC, je souhaite réaliser une application dont la fenêtre principale est créée via l'API CreateWindowEx, et que par la suite je puisse utiliser les MFC pour afficher, par exemple, des fenêtres de type CDialog.

J'ai créé un projet de type "Projet Win32", puis j'ai sélectionné "Application Windows" et j'ai coché "Projet vide".

J'ai ensuite ajouté à mon projet vide un fichier 'win32.cpp' dans lequel j'ai placé le code que j'ai trouvé à cette adresse : http://bob.developpez.com/tutapiwin/article_2.php.

Le programme fonctionne mais comme je souhaite inclure le support des MFC, je suis allé dans les propriétés du projet, et j'ai remplacé "Utiliser les bibliothèques windows standart" par "Utiliser les MFC dans une bibliothèque statique".

Suite à cela j'ai eu 14 erreurs lors de l'édition de lien. J'ai donc ajouté la ligne suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
#pragma comment(lib,"user32.lib")
Il reste encore 1 erreur, que je n'arrive pas à résoudre :
LIBCMTD.lib(wwincrt0.obj) : error LNK2019: symbole externe non résolu _wWinMain@16 référencé dans la fonction ___tmainCRTStartup
Dans les propriétés du projet
- Le point d'entrée de l'application : wWinMainCRTStartup
- Le sous-système sélectionné : /SUBSYSTEM:WINDOWS
- Unicode est activé
Le projet ne contient qu'un seul fichier 'win32.cpp' avec le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
 
#pragma comment(lib,"user32.lib")
#include <windows.h>
 
// Declaration du Callback de la fenêtre principale
LRESULT CALLBACK MainProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam);
 
// Point d'entrée principal
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
	// Declaration de la fenetre principale de l'application
	WNDCLASSEX principale;
	principale.cbSize=sizeof(WNDCLASSEX);
	principale.style=CS_HREDRAW|CS_VREDRAW;
	principale.lpfnWndProc=MainProc;
	principale.cbClsExtra=0;
	principale.cbWndExtra=0;
	principale.hInstance=hInstance;
	principale.hIcon=LoadIcon(NULL,IDI_APPLICATION);
	principale.hCursor=LoadCursor(NULL,IDC_ARROW);
	principale.hbrBackground=reinterpret_cast<HBRUSH>(COLOR_WINDOW+1);
	principale.lpszMenuName=NULL;
	principale.lpszClassName=L"std";
	principale.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
	RegisterClassEx(&principale);
 
	// Création de la fenêtre principale
	HWND hWnd;
	hWnd=CreateWindowEx(
	  WS_EX_CLIENTEDGE,
	  L"std",
	  L"Notre fenêtre",
	  WS_OVERLAPPEDWINDOW,
	  CW_USEDEFAULT,
	  CW_USEDEFAULT,
	  CW_USEDEFAULT,
	  CW_USEDEFAULT,
	  NULL,
	  NULL,
	  hInstance,
	  NULL
	);
 
	// Affichage de la fenêtre
	ShowWindow(hWnd,SW_SHOW);
 
	// Gestion des messages
	MSG msg;
	while(GetMessage(&msg,NULL,0,0)==TRUE)
	{
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return 0;
 
}
 
// Callback de gestion des evenements (messages) de la fenetre principale
LRESULT CALLBACK MainProc(HWND hWnd, UINT mes, WPARAM wParam, LPARAM lParam)
{
   HDC hDC;
   PAINTSTRUCT paintst;
   switch (mes)
   {
   case WM_PAINT:
      hDC=BeginPaint(hWnd,&paintst);
      EndPaint(hWnd,&paintst);
      return 0;
   case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
   default:
      return DefWindowProc(hWnd, mes, wParam, lParam);
   }
}