Probleme bei der Einbindung einer Anwendunngsklasse in eine Fensterklasse
-
Moin,
ich bin ein c++ und WINAPi-Neuling, und möchte zu Lernzwecken einen Taschenrechner mit Vc++ schreiben.
Mein Taschenrechner soll über ein Fenster (als Dialog definiert) mit einer Anwendungs-Klasse
('PocketCalcClass') kommunizieren, welche die eigentlichen Funktionen wie Addition,...etc. durchführen soll, um deren Ergebnisse dann wieder an die Fensterklasse zu übergeben und dort anzuzeigen...Leider scheitere ich an der Einbindung der in der WinMain über einen Pointer ('pcc') initialisierten Klasse in die Fenster-Funktion ('CalcProc'). Zwar kann ich die Funktionen der Anwendungs-Klasse in der WinMain an jeder Position nach der Initialisierung aufrufen, aber in der Fenster-Funktion gibt der Compiler mir die im Quellcode kommentierten Fehler aus...
Frage nun...: Wie kann ich mich in der Fenster-Funktion auf die Klassen-Instanz 'pcc' beziehen?Ich bin über jeden ernstgemeinten Rat dankbar, aber bitte keine Verweise auf den Code von Dritten, da ich gerne auf meinen eigenen Gedanken
aufbauen möchte . Es sei denn ich habe irgendeinen fundamentalen Fehler...Malte, tce
/////////////////////////////////////////////////////////////////////////////////////////////
/*
der Dialog bzw. das HauptfensterPocketCalc.rc
*/
//////////////////////////////////////////////////////////////////////////////////////////////Microsoft Developer Studio generated resource script.
//
#include "resource.h"#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS/////////////////////////////////////////////////////////////////////////////
// Deutsch (Deutschland) resources#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
#ifdef _WIN32
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
#pragma code_page(1252)
#endif //_WIN32#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END3 TEXTINCLUDE DISCARDABLE
BEGIN
"\r\n"
"\0"
END#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//POCKETCALCWND DIALOG DISCARDABLE 0, 0, 124, 142
STYLE WS_CAPTION | WS_SYSMENU
CAPTION "TCE - PocketCalculator"
CLASS "PocketCalcWnd"
FONT 8, "MS Sans Serif"
BEGIN
PUSHBUTTON "1",IDC_NBone,15,44,17,11
PUSHBUTTON "2",IDC_NBtwo,37,44,17,11
PUSHBUTTON "3",IDC_NBthree,59,44,17,11
PUSHBUTTON "+",IDC_OBplus,81,44,17,11
PUSHBUTTON "4",IDC_NBfour,15,57,17,11
PUSHBUTTON "5",IDC_NBfive,37,57,17,11
PUSHBUTTON "6",IDC_NBsix,59,57,17,11
PUSHBUTTON "-",IDC_OBminus,81,57,17,11
PUSHBUTTON "7",IDC_NBseven,15,70,17,11
PUSHBUTTON "8",IDC_NBeight,37,70,17,11
PUSHBUTTON "9",IDC_NBnine,59,70,17,11
PUSHBUTTON "x",IDC_OBmulti,81,70,17,11
PUSHBUTTON "C",IDC_FBcancel,15,83,17,11
PUSHBUTTON "0",IDC_NBzero,37,83,17,11
PUSHBUTTON ".",IDC_NBdot,59,83,17,11
PUSHBUTTON "/",IDC_OBdiv,81,83,17,11
RTEXT "",IDC_STATIC,13,16,88,13,SS_SUNKEN | WS_BORDER
END/////////////////////////////////////////////////////////////////////////////
//
// Accelerator
//IDR_ACCELERATOR1 ACCELERATORS DISCARDABLE
BEGIN
"+", IDC_OBplus, ASCII, NOINVERT
".", IDC_FBcancel, ASCII, NOINVERT
"1", IDC_NBone, VIRTKEY, NOINVERT
"2", IDC_NBtwo, ASCII, NOINVERT
"3", IDC_NBthree, ASCII, NOINVERT
"4", IDC_NBfour, ASCII, NOINVERT
END#endif // Deutsch (Deutschland) resources
/////////////////////////////////////////////////////////////////////////////#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
///////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED/////////////////////////////////////////////////////////////////////////////////////////////
/*
Header-Datei mit der Anwendungs-KlassePocketCalcClass.h
*/
////////////////////////////////////////////////////////////////////////////////////////////#include <windows.h>
class PocketCalcClass
{
public:
PocketCalcClass();
~PocketCalcClass();
float access();private:
char mode;
float val;
float result;
float plus();
float minus();
float multi();
float div();};
/////////////////////////////////////////////////////////////////////////////////////////////
/*
Quellcode-Datei mit den Funktionen der Anwendungs-Klasse (unvollständig)PocketCalcFunction.cpp
*/
////////////////////////////////////////////////////////////////////////////////////////////#include"PocketCalcClass.h"
PocketCalcClass::PocketCalcClass()
{
result=(int)0;
mode='n'; //modes = 'n'umber, 'o'perator, 'f'unction
}PocketCalcClass::~PocketCalcClass();
float PocketCalcClass::access()
{return 0;
}/////////////////////////////////////////////////////////////////////////////////////////////
/*
Quellcode-Datei mit der Fenster-Klasse und WinMainPocketCalcMain.cpp
*/
////////////////////////////////////////////////////////////////////////////////////////////#include <windows.h>
#include "resource.h"
#include "PocketCalcClass.h"LRESULT CALLBACK CalcProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{switch(msg)
{
case WM_COMMAND:MessageBeep(MB_OK);
switch(LOWORD(wParam))
{
case IDC_NBone:MessageBeep(MB_OK);
pcc->access();
//Hier soll der Zugriff auf die Funktion
//'access' der 'PocketCalcClass' erfolgen
//wird die Anweisung auskommentiert,
//so lässt sich das Programm kompilieren
//ansonsten erscheinen die Fehlermeldungen:
// error C2065: 'pcc' : nichtdeklarierter Bezeichner
//error C2227: Der linke Teil von '->access' muss auf Klasse/Struktur/Union zeigenbreak;
case IDC_NBtwo:
break;
case IDC_NBthree:
break;
case IDC_NBfour:
break;
case IDC_NBfive:
break;
case IDC_NBsix:
break;
case IDC_NBseven:
break;
case IDC_NBeight:
break;
case IDC_NBnine:
break;
case IDC_NBzero:
break;
case IDC_NBdot:
break;
case IDC_OBplus:
break;
case IDC_OBminus:
break;
case IDC_OBmulti:
break;
case IDC_OBdiv:
break;
case IDC_FBcancel:
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
default:
return DefWindowProc(hwnd, msg, wParam, lParam);}
return 0;
}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR cl, int nCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS wndCalc;PocketCalcClass *pcc=NULL; // Initialiesierung der Anwendungsklasse
pcc=new PocketCalcClass; //if(hPrevInstance==NULL)
{
memset(&wndCalc, 0, sizeof(wndCalc));
wndCalc.style=CS_HREDRAW|CS_VREDRAW;
wndCalc.hInstance=hInstance;
wndCalc.lpfnWndProc=CalcProc;
wndCalc.cbWndExtra=DLGWINDOWEXTRA;
wndCalc.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);
wndCalc.hCursor=LoadCursor(NULL, IDC_ARROW);
wndCalc.lpszClassName="PocketCalcWnd";if(!RegisterClass(&wndCalc))
return false;
}hwnd=CreateDialog(hInstance, "PocketCalcWnd", 0, NULL);
ShowWindow(hwnd, nCmdShow);
UpdateWindow(hwnd);while (GetMessage(&msg, NULL, 0, 0))
{
DispatchMessage(&msg);
}
return (msg.wParam);
}Ich hoffe mein Anliegen wird auch ohne korrekte Notation bzw. Einrückung ersichtlich...
-
Mach pcc zu ner globalen variable.
und beim nächsten mal: bitt code tags verwenden.
-
Danke von meiner Seite