DialogBox In einer Klasse erstellen ?
-
Hi,
Ich habe ein Dialog in einer Resource gespeichert und eine Klasse die heißt CWindowConsole. Die Klasse soll den Dialog Öffnen. Das problem ist, dass ich die callback function als function der klasse haben möchte da ich in der Callbackfunction auf die Klasse zureifen will.
Wenn ich aber die Callback als static setzte, also dass die callbackfunction keine function der klasse ist, dann functioniert alles wunderbar. ICh kann aber dann nun nicht mehr auf die Klasse zugreufen ...Geht das nicht irgentwie ???
Code:
[cpp]
int __stdcall **CWindowConsole::**DlgProc( HWND hdlg, UINT msg, WPARAM wp, LPARAM lp )
{
...
}..
void CWindowConsole::Init()
{
DialogBoxParam( NULL, MAKEINTRESOURCE( IDD_DIALOG1 ), m_hWnd, DlgProc, (LPARAM)NULL );
..}
..
[/cpp]Das ist mein Aktueller code aber wie gesagt functioniert er nicht.
Wenn ich das dickgedruckte weglasse, dann functioniert es !!1Fehler:
...\CWindowConsole.cpp(77) : error C2664: 'CreateThread' : Konvertierung des Parameters 3 von 'unsigned long (void *)' in 'unsigned long (__stdcall *)(void *)' nicht moeglich
Keine Funktion mit diesem Namen im Gueltigkeitsbereich stimmt mit dem Zieltyp uebereinGrüsse
-
static int __stdcall CWindowConsole::DlgProc( HWND hdlg,
-
Hi!
DAs geht auch nicht !!
...\cwindowconsole.cpp(11) : error C2724: 'lgProc' : 'static' sollte nicht fuer Member-Funktionen verwendet werden, die ausserhalb der Klasse definiert werden
-
das static vor der funktion darf nur im header!!! in der cpp datei das nicht schreiben
-
CWindowConsole.cpp(78) : error C2664: 'DialogBoxParamA' : Konvertierung des Parameters 4 von 'int (struct HWND__ *,unsigned int,unsigned int,long)' in 'int (__stdcall *)(struct HWND
Gibt es nicht irgentein bsp dazu ??
-
Schau mal in die FAQ, da gibt es nen Thread über das Hineinbekommen einer WndProc in eine Klasse, vielleicht hilft das weiter :).
cya
-
hi,
das is eigentlich relativ "leicht",
du machst eine wndproc in der klasse, und eine "ausserhalb".
beim erstellen des fensters gibst du als dialog proc die proc ausserhalb an, und übergibst als lParam den this zeiger.
von da aus rufst du dann die klassenfunktion aus
hiermal beispielcode (von der klasse die ich gerade mach):/* die "aussenstehende" wndproc * BalloonTip is der klassenname ^^ */ LRESULT CALLBACK BalloonWndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ){ BalloonTip* bt = ( BalloonTip * )GetWindowLong( hWnd, GWL_USERDATA ); switch( message ){ case WM_CREATE: bt = ( BalloonTip * )( ( CREATESTRUCT * )lParam )->lpCreateParams; SetWindowLong( hWnd, GWL_USERDATA, long( wnd ) );} bt->WndProc( hWnd, message, wParam, lParam ); return DefWindowProc( hWnd, message, wParam, lParam );} // erstellen des fensters in der klasse hBalloon = CreateWindowEx( WS_EX_TOOLWINDOW | WS_EX_TOPMOST, "balloon", "BalloonTip", WS_POPUP, (r.right + r.left) / 2, (r.top + r.bottom) / 2, widthofball, heightofball, NULL, 0, 0, ( CREATESTRUCT * )this ); //und halt die wnd proc , in der klasse BalloonTip::WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam ) { switch(message){ . . . } return 0; }
mfg
k1ro