problem: ein char von einer funktion per strcpy() in ein in private: char zu kopieren, please help!
-
Hallo, ich habe mir eine class erstellt mit der ich ein einfaches fenster erstelle, weiter gehend habe ich eine DialogProc Funktion. So nun habe ich in der class => private: einen char workstring[128]; und in der DialogProc will ich den aus einer EDITTEXT box geschriebenen text auslesen und in den workstring sichern.
Also das ganze hab ich mir eigentlich so vorgestellt:#ifndef _WINDOW_H #define _WINDOW_H class window { public: window( char *ti, int wi, int he ); ~window(); int Start(); char workstring[128]; private: static LRESULT CALLBACK WindowProc( HWND, UINT, WPARAM, LPARAM ); static LRESULT CALLBACK DialogProc( HWND, UINT, WPARAM, LPARAM ); HINSTANCE hInst; HWND hWnd; WNDCLASS wc; MSG msg; char *szName; char *title; int width; int height; }; int window::Start() { while( GetMessage( &msg, 0, 0, 0 ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } return msg.wParam; } window::window( char *ti, int wi, int he ) { szName = "Window"; title = ti; width = wi; height = he; […] } window::~window() { DestroyWindow( hWnd ); hWnd = 0; UnregisterClass( szName, hInst ); hInst = 0; } LRESULT CALLBACK window::WindowProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam ) { HINSTANCE hInst; switch( msg ) { case WM_CREATE: { DialogBox ( hInst , "Dialog" , hWnd , MakeProcInstance( (DLGPROC)DialogProc , hInst )) ; return 0; } […] } LRESULT CALLBACK window::DialogProc( HWND hWnd , UINT msg, WPARAM wParam, LPARAM lParam ) { char cstring[128]; switch( msg ) { case WM_INITDIALOG: { return true; } case WM_COMMAND: { switch( wParam ) { case IDOK: { GetDlgItemText( hWnd, 105, cstring, sizeof( cstring ) ); strcpy( workstring, cstring ); return true; } case IDCANCEL: { EndDialog( hWnd, 0 ); return true; } } return true; } } return false; } #endifIch habe in der DialogProc noch ein char erstellt um mit strcpy() diesen in workstring zu kopieren. Ich bekomme folgenden fehler:
[C++ Error] wnd.h(149): E2231 Member window::workstring cannot be used without an objectKönnte mir bitte jemand mal erklären was ich vergessen habe?, danke.
-
DialogProc ist eine statische Funktion. Statische Funktionen können keine nicht-statischen Member nutzen, ohne das explizit das Objekt angegeben wird.
-
und wie gebe ich dieses objekt nun explizit an??? sry is bei mir glaube noch ne bildungs lücke -..
-
Hi,
vermutlich gar nicht !
Das gibt das Schnittstellendesign nicht her. Eine static-Memberfunktion unterscheidet sich nicht von einer "freien Funktion in einem namespace" ... und nur eine solche nimmt offensichtlich die Funktion, über die Du die Callbackfunktion registrierst, entgegen.Du solltest schauen, was Dir der Caller in den Parametern HWND, UINT, WPARAM, LPARAM übergibt und ob Du Dir daraus evtl. ein geeignetes window-Objekt konstruieren kannst (z.B. über ein "getWindow(HWND)" o.ä.; oder Du baust Dir ein Neues innerhalb Deiner Callbackfunktion).
Gruß,
Simon2.