problem beim erstellen eines fensters, als Klasse



  • nAbend, also da ich mich nun langsam mal versuche in klassen ein zu arbeiten, dachte ich mir, dass ich halt mal ne anwendung schreibe um ein einfaches Fenster zu erstellen, natürlich als class. So also hier der Plan:

    #ifndef _WINDOW_H
    #define _WINDOW_H
    
        class window {
    
            public:
    
                window( char *ti, int wi, int he );
                ~window();
    
            private:
    
                WindowProc( HWND, UINT, WPARAM, LPARAM );
                HINSTANCE hInst;
                HWND hWnd;
                WNDCLASS wc;
                MSG msg;
    
                char *szName;
                char *title;
                int width;
                int height;
            };
    
            window::window( char *ti, int wi, int he ) {
    
                szName = "Window";
                width = wi;
                height = he;
    
                wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
                wc.lpfnWndProc = WindowProc;
                wc.cbClsExtra = 0;
                wc.cbWndExtra = 0;
                wc.hInstance = hInst;
                wc.hIcon = LoadIcon( 0, IDI_APPLICATION );
                wc.hCursor = LoadCursor( 0, IDC_ARROW );
                wc.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
                wc.lpszMenuName = 0;
                wc.lpszClassName = szName;
    
                if( !( RegisterClass( &wc ) ) ) {
    
                    MessageBox( 0, "Can't register this window!", "Shutdown error!",
                                MB_OK | MB_ICONEXCLAMATION );
                }
    
                hWnd = CreateWindow( szName, title,
                                           WS_OVERLAPPEDWINDOW,
                                           CW_USEDEFAULT, CW_USEDEFAULT,
                                           width, height,
                                           0, 0,
                                           hInst,
                                           0 );
    
                ShowWindow( hWnd, SW_SHOW );
                UpdateWindow( hWnd );
            }
    
            window::~window() {
    
                DestroyWindow( hWnd );
                hWnd = 0;
    
                UnregisterClass( szName, hInst );
                hInst = 0;
            }
    
            window::WindowProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) {
    
                switch( msg ) {
    
                    case WM_CREATE: {
    
                        return 0;
                    }
    
                    case WM_SIZE: {
    
                        return 0;
                    }
    
                    case WM_PAINT: {
    
                        return 0;
                    }
    
                    case WM_DESTROY: {
    
                        PostQuitMessage( 0 );
                        return 0;
                    }
                }
                return DefWindowProc( hWnd, msg, wParam, lParam );
            }
    
    #endif
    

    Doch es wär ja auch zu schön gewesen, hätte es beim ersten Mal gleich funktioniert. Es kommt ein fehler bei: “ wc.lpfnWndProc = WindowProc; “

    [C++ Error] wnd.h(33): E2235 Member function must be called or its address taken
    

    und in der main():

    //---------------------------------------------------------------------------
    
    #include <windows.h>
    #include "wnd.h"
    #pragma hdrstop
    
    //---------------------------------------------------------------------------
    
    #pragma argsused
    WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,
                    int nCmdShow ) {
    
        MSG msg;
        window wnd( "Window!", 400, 300 );
    
        while( GetMessage( &msg, 0, 0, 0 ) ) {
    
            TranslateMessage( &msg );
            DispatchMessage( &msg );
    
        }
        wnd.~window();
        return 0;
    }
    

    Auch wenn ich die function mit window:: calle erscheint dieser fehler… auch weiter denke ich das es so noch nicht perfekt laufen kann, obwohl, wenn ich diese zeile vom compiler ignorieren lasse ( per // ), läuft der compiler alle sohne fehler durch nur beim ausführen kommt vom debugger eine fehler meldung und des fenster is auch nicht da… würdet ihr mir mal helfen?, danke.





  • Also ich kenn irgwie keinen dümmeren Vollidioten als "T0bi"...



  • danke, aber vieleicht könntest du dir deine gheistreichen komplimente in zukunft sparren oder für deine freunde aufheben, danke!


Log in to reply