Sto provando a creare una piccola classe che visualizza la finestra della console nella finestra principale. (puoi immaginare informazioni di chat o di debug visualizzate lì)
Ora, poiché gli instanes differenti hanno variabili private diverse (come array di messaggi o finestra principale), devo usare il metodo non statico come callback per gli eventi di Windows.
Ho pensato a modi, dove avrei passato l'istanza di classe effettiva alla funzione di callback statico e poi chiamato il metodo corretto, ma in winAPI, tutto è stato fatto usando TranslateMessage
e DispatchMessage
non mi dava la possibilità di usare argomenti del mio proprio.
Ho trovato qualche codice qui: Class method as winAPI callback, ma non lo capisco, e penso che non sia esattamente quello di cui ho bisogno. Se lo è, quindi mi dia ulteriori spiegazioni sul codice fornito.
errore ottengo:Usa il metodo oggetto come callback WinApi WndProc
errore: argomento di tipo 'LRESULT (
WindowConsole::
) (HWND__ , UINT, WPARAM, LPARAM)' non corrisponde 'LRESULT (*
) (HWND__, UINT, WPARAM, LPARAM) '
Non so cosa significhi quella stella tra parentesi, ma questo è ciò che non corrisponde.
E il codice:
class WindowConsole {
char messages[255][255];
HWND mainWindow;
public:
int width;
int height;
inline HWND create(HWND parent);
inline bool update();
inline LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);
};
HWND WindowConsole::create(HWND parent) {
HINSTANCE inst = GetModuleHandle (0);
WNDCLASSEX wincl;
/* The Window structure */
wincl.hInstance = inst;
wincl.lpszClassName = "ConsoleClass";
wincl.lpfnWndProc = this->WndProc; /* This function is called by windows */
/* more WNDCLASSEX crap...*/
mainWindow = CreateWindow (
/*PARAMS*/
);
ShowWindow(mainWindow,1);
return mainWindow;
}
bool WindowConsole::update() {
return true;
}
LRESULT CALLBACK WindowConsole::WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch (message) /* handle the messages */
{
/*EVENT crap*/
}
return 0;
}
999999999 gonzi – Puppy
bene, nessuno di loro mi ha aiutato. Ho cercato per molto tempo e ho trovato molti argomenti su questo problema, ma semplicemente non ho capito. –
dai un'occhiata alla risposta di user16100 ... e al link all'articolo di msdn ... – Incubbus