2012-07-17 3 views
1

J'ai créé une boîte de dialogue dans un fichier ATL DLL et j'ai ajouté une classe pour manipuler ses performances. J'ai réussi d'abord à faire la compilation, mais maintenant (en raison de peaufinage inclut probablement) que je reçois à la compilation le message étrange:Aucune classe ou espace de noms lors de la création d'une boîte de dialogue. Boîte

CTestDlg: Aucune classe ou espace de noms

Je cite le code source de l'en-tête et la fichier cpp ci-dessous:

#pragma once 

#include "resource.h" // Hauptsymbole 
#include <atlhost.h> 


class CTestDlg : public CAxDialogImpl<CTestDlg> 
{ 
private: 
bool m_cancel; 


public: 
CTestDlg() 
{ 
    m_cancel = true;  
} 

~CTestDlg() 
{ 
} 

enum { IDD = IDD_TESTDLG }; 

BEGIN_MSG_MAP(CTestDlg) 
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog) 
COMMAND_HANDLER(IDOK, BN_CLICKED, OnClickedOK) 
COMMAND_HANDLER(IDCANCEL, BN_CLICKED, OnClickedCancel) 
COMMAND_HANDLER(IDC_EDIT1, EN_CHANGE, OnEnChangeEdit1) 
CHAIN_MSG_MAP(CAxDialogImpl<CTestDlg>) 
END_MSG_MAP() 



LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) 
{ 
    CAxDialogImpl<CTestDlg>::OnInitDialog(uMsg, wParam, lParam, bHandled); 
    bHandled = TRUE; 

    //CEdit* pEdit = (CEdit*)GetDlgItem(IDC_EDIT1); 
    //pEdit->SetWindowTextW(L"Hello"); 
    CWindow textBox(GetDlgItem(IDC_EDIT1)); 
    textBox.SetWindowTextW(L"hello"); 
    //textBox.SendMessageW(WM_SETTEXT, 0, (LPARAM)L"test!!!"); 
    return 1; // Das System kann den Fokus festlegen 
} 

LRESULT OnClickedOK(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) 
{ 
    EndDialog(wID); 
    m_cancel = false; 
    return 0; 
} 

LRESULT OnClickedCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled) 
{ 
    EndDialog(wID); 
    return 0; 
} 

LRESULT OnEnChangeEdit1(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/); 

bool IsCancelled() const { return m_cancel; } 
bool saveFile(); 

}; 

fichier //.cpp

#include "CTestDlg.h" 
#include "stdafx.h" 




LRESULT CTestDlg::OnEnChangeEdit1(WORD /*wNotifyCode*/, WORD /*wID*/, HWND /*hWndCtl*/, BOOL& /*bHandled*/) 
{ 
return 0; 
} 

bool CTestDlg::saveFile() 
{ 

OPENFILENAME ofn; 
WCHAR szFileName[MAX_PATH] = L""; 


ZeroMemory(&ofn , sizeof(ofn)); 

ofn.lStructSize = sizeof(ofn); 
ofn.hwndOwner = NULL; 
ofn.lpstrFilter = (LPCWSTR)L"Text Files (*.txt)\0*.txt\0All Files (*.*)\0*.*\0"; 
ofn.lpstrFile = (LPWSTR)szFileName; 
ofn.nMaxFile = MAX_PATH; 
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; 
ofn.lpstrDefExt = (LPCWSTR)L"txt"; 

if(GetSaveFileNameW(&ofn)) 
{ 
    HANDLE hFile = CreateFile(ofn.lpstrFile, 
     GENERIC_WRITE, 
     0, 
     NULL, 
     CREATE_NEW, 
     FILE_ATTRIBUTE_NORMAL, 
     NULL); 

    DWORD dwBytesWritten = 0; 
    char str[] = "Example text testing WriteFile"; 
    WriteFile(hFile, str, strlen(str), &dwBytesWritten, NULL); 
    CloseHandle(hFile); 

    return true; 
} 
else 
    return false; 

} 

Toute indication sur ce qui semble mal avec le code?

+0

Nous avons besoin de l'erreur complète message. – orlp

+0

Où utilisez-vous cette classe? Dans quel fichier? – flamingo

+0

erreur C2653: CTestDlg: aucune classe ou espace de noms. Excusez-moi, l'erreur initiale que j'ai fournie n'était pas complètement correcte. J'ai édité la question. – arjacsoh

Répondre

1

Votre tête précompilé inclut devrait être le premier dans les fichiers .cpp, changement:

#include "CTestDlg.h" 
#include "stdafx.h" 

à

#include "stdafx.h" 
#include "CTestDlg.h" 

contrôle également double si les noms de fichiers inclus sont corrects

+0

Oui, c'était le problème. Illusoire... – arjacsoh

Questions connexes