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 Hauptfenster

    PocketCalc.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"
    END

    2 TEXTINCLUDE DISCARDABLE
    BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
    END

    3 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-Klasse

    PocketCalcClass.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 WinMain

    PocketCalcMain.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 zeigen

    break;
    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


Anmelden zum Antworten