WindowProc in C++ verpacken



  • Liebe Leute!

    Habe folgendes Problem:

    Ich möchte gerne C Code nach C++ portieren um das ganze ein wenig übersichtlicher zu gestalten. Problematisch ist hier für mich der Aufruf der API Funktion RegisterClassEx. In deren Struktur übergibt man ja einen Pointer auf die dem Fenster zugehörige Windowsprozedur...

    In C ganz easy... in C++ verzweifle ich gerade ... ich habe es mit this->Methodenname versucht und allen möglichen Dinge komme aber leider auf keinen grünen Zweig.

    Ich darf Euch hier die entsprechenden Codesnips posten vieleicht hat jemand ja bereits Erfahren damit gesammelt... vielen Lieben dank..

    Gerold

    [cpp]
    // Constructor
    CSignalWnd::CSignalWnd(SM_CFGROOT *lpCfgRoot) {
    WNDCLASSEX wcex;

    this->lpCfgRoot = lpCfgRoot; // übernimmm Configuration vom Aufrufer

    // load resources
    LoadString(lpCfgRoot->hInst, IDC_SIGNAL, lpCfgRoot->smWindows.szWindowClassSignal, MAX_LOADSTRING);
    LoadString(lpCfgRoot->hInst, IDS_SIGNALWND_TITLE, lpCfgRoot->smWindows.szWindowSignalTitle, MAX_LOADSTRING);

    lpCfgRoot->smMenus.hMenuSignal = LoadMenu(lpCfgRoot->hInst, TEXT ("MenuSignal"));
    lpCfgRoot->smMenus.hMenuWindowsWindowSignal = GetSubMenu(lpCfgRoot->smMenus.hMenuSignal, WINDOWS_MENU_POS);

    // register class
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style = CS_HREDRAW | CS_VREDRAW ;
    wcex.cbClsExtra = 0;
    wcex.cbWndExtra = 0;
    wcex.hInstance = lpCfgRoot->hInst;
    wcex.hIcon = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SAMMLER);
    wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground = (HBRUSH)(COLOR_BACKGROUND);
    wcex.lpszMenuName = NULL;
    wcex.hIconSm = LoadIcon(wcex.hInstance, (LPCTSTR)IDI_SMALL);
    wcex.lpfnWndProc = (WNDPROC)(this->SigWndProc);
    wcex.lpszClassName = lpCfgRoot->smWindows.szWindowClassSignal;
    (void)RegisterClassEx(&wcex);
    }

    CSignalWnd::~CSignalWnd() {
    }

    /// Zentrale Methode zur Windows-Nachrichtenverwaltung
    LRESULT CALLBACK CSignalWnd::SigWndProc(HWND hWnd,UINT message, WPARAM wParam, LPARAM lParam) {

    // je nach message rufe die entsprechenden Methoden auf
    switch (message)
    {
    case WM_CREATE:
    return this->WM_Create(hWnd, message, wParam, lParam);

    case WM_SIZE:
    return this->WM_Size(hWnd, message, wParam, lParam);

    case WM_MDIACTIVATE:
    return this->WM_MDIActivate(hWnd, message, wParam, lParam);

    case WM_CLOSE:
    return this->WM_Close(hWnd, message, wParam, lParam);

    case WM_COMMAND:
    if (LOWORD(wParam)==ID_SIG_EDIT)
    if (HIWORD(wParam)==EN_UPDATE) {
    (void)SetWindowText(lpCfgRoot->smWindows.hwndSIGEditControl,(char *)&szBuffer);
    return 0;
    }
    break;
    } // end switch

    return DefMDIChildProc (hWnd, message, wParam, lParam) ;
    } /// end CSignalWnd::WndProc[/cpp]

    edit: sfds



  • Da du noch neu bist, weißt du vielleicht noch nicht, dass es in Foren sowas wie FAQs gibt...also bin ich nochmal gnädig und antworte dir sogar:
    Mach die WndProc entweder static oder lese das hier:
    Klick zum Wissen



  • gleich zwei Sachen gelernt - Syntaxhighlighting UND C++ & WndProc

    sehr fein 👍 hat mir sehr geholfen vielen dank


Anmelden zum Antworten