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 switchreturn 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