J'ai essayé de comprendre cela pendant des heures maintenant, et je suis à bout de nerfs. J'apprécierais sûrement si quelqu'un pourrait me dire quand je fais mal.Impossible de créer la fenêtre principale?
Après avoir trouvé des tutoriels C++ MFC, j'ai essayé de faire une simple application graphique en C++, mais il semble y avoir un problème à générer la fenêtre principale (dialog?). Quand je suis en train de compiler le code, le message suivant apparaît:
exception non gérée à 0x00E7A9DC dans GUI_Employee_0501.exe: 0xC0000005: Accès emplacement de lecture de violation 0xFEFEFF66.
et le point d'arrêt arrête l'intérieur WINMAIN.CPP, à pThread-> m_pMainWnd-> DestroyWindow();. La valeur pThread-> m_pMainWnd est NULL, que je soupçonne être la cause du problème.
Pouvez-vous préciser quel est le problème ici? J'ai un exemple de code et c'est très similaire au mien mais ça fonctionne, donc je n'ai vraiment aucune idée de ce qui se passe!
#include <afxwin.h>
#include "resource.h"
#include <iostream>
using namespace std;
#pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console")
CEdit *pFNAME;
CEdit *pLNAME;
CEdit *pSALARY;
CEdit *pDDAY;
CEdit *pMMONTH;
CEdit *pYYEAR;
CComboBox *pGENDER;
CButton *pADD;
CButton *pDELETE;
CButton *pSAVE;
CButton *pLOAD;
class ENTRY_FORM : public CDialog
{
public:
ENTRY_FORM(CWnd* pParent = NULL) : CDialog(ENTRY_FORM::IDD, pParent) { }
enum { IDD = dialog_main };
protected:
virtual void DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); }
virtual BOOL OnInitDialog()
{
CDialog::OnInitDialog();
SetUpInterfacePointers();
return true;
}
void SetUpInterfacePointers(){ ... does its own thing ... }
public:
afx_msg void add() { PRESS_ADD(); }
void PRESS_ADD() { ... does its own thing ... }
DECLARE_MESSAGE_MAP()
};
class Program : public CWinApp
{
public:
Program(){ }
public:
virtual BOOL InitInstance()
{
CWinApp::InitInstance();
cout << "CWinAPP:initInstance" << endl;
ENTRY_FORM dlg;
m_pMainWnd = &dlg;
cout << "mpMainWnd" << endl;
INT_PTR nResponse = dlg.DoModal();
return FALSE;
}
};
//
BEGIN_MESSAGE_MAP(ENTRY_FORM, CDialog)
ON_COMMAND(button_add, add)
END_MESSAGE_MAP()
//
Program theApp;
Il semble que vous ayez des problèmes avec C++ et essayez d'apprendre MFC sans connaître l'API Windows. Cela ne va pas bien se terminer. À tout le moins, vous devez être intimement familier avec C++ ou l'API Windows, idéalement les deux, avant d'essayer de s'attaquer à MFC. Si vous ignorez le conseil, vous perdrez du temps, seulement pour vous retrouver avec ce qu'on appelle souvent [la programmation du culte de la cargaison] (https://en.wikipedia.org/wiki/Cargo_cult_programming). – IInspectable
@IInspectable Je pense que vous avez raison. Merci pour le conseil. –