Willkommen ~Gast!
Registrieren || Einloggen || Hilfe/FAQ || Staff
Probleme mit der Registrierung im Forum? Melde dich unter registerEin Bild.
Autor Beitrag
000
07.05.2002, 14:58
Retro



Hoi!

Ich hab mir jetzt mal BC++ angetan weil ich auch per C++ nen bisschen Windowsprogrammierung praktizieren wollte :) jetzt bin ich fleissig beim einarbeiten und hab nen kleines Problem...

Wie fange ich Messages an mein Fenster ab und werte sie aus? In Delphi kenn ich das Spielchen ja :)Quellcode:[b]procedure[/b] MessageEmpfangen(); [b]message[/b] MSG_MYMSGWobei MSG_MYMSG natürlich definiert sein muss ;) nimmt das Fenster jetzt MSG_MYMSG entgegen wird die Prozedur MessageEmpfangen() abgespielt...

Bei C++ währe es wohl logischer dass es eine Funktion gibt die auf jede Message reagiert und dann per case() oder so auswertet... aber aus diese Funktion bin ich leider noch nicht gestoßen =\

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */


Dieser Beitrag wurde am 07.05.2002 um 15:02 von Retro bearbeitet.
zum Seitenanfang zum Seitenende Profil || Suche
001
07.05.2002, 15:40
KillerDoc



Bei der WinAPI werden die Nachrichten von einem von dir definierten Nachrichtenhandlercallback bearbeitet.

Um dein Fenster zu erstellen erstellst du ja zuerst eine Fensterklasse also eine Instanz von der Struktur WNDCLASS.
Diese Struktur hat eine Membervariable lpfnWndProc, die einen Zeiger auf deinen Nachrichtenhandler darstellt..

dein Nachrichtenhandler kann zB so deklariert sein:

Quellcode:
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM)

lpfnWndProc muss also auf WndProc zeigen.. also
Quellcode:
fensterklasseninstanz.lpfWndProc = WndProc;

Reagieren kannst du auf die Nachrichten dann wie du richig gesagt hast in einem switch block:
Quellcode:

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
      switch(message)
      {
       case WM_CLOSE:
             ...
             return 0;
        ....
       }
       return DefWindowProc(hWnd,message,wParam,lParam);
}

das return DefWndProc brauchst du damit Nachrichten die du nicht selbst behandelst von einer Standardroutine behandelt werden...

Ausserdem musst du dich noch darum kümmern das deine Nachrichten überhaupt ankommen, also nachdem deine Fenster initialisiert und gezeichnet wurden kommt noch der code der die Nachrichten auffängt in die WinMain:

Quellcode:
while (GetMessage (&msg, NULL, 0, 0))
{
     TranslateMessage (&msg) ;
     DispatchMessage  (&msg) ;
}

Bei der MFC schreibst du einfach in der Deklaration der entsprechenden klasse rein
DECLARE_MESSAGE_MAP()

und dann in der .cpp datei irgendwo

BEGIN_MESSAGE_MAP(CBouncerConfigDialog,CDialog)
ON_COMMAND(IDC_CFG_CONNECT,OnConnect)
END_MESSAGE_MAP()
wobei der erste parameter im BEGIN_MESSAGE_MAP deine abgeleitete Klasse darstellt, und der zweite dessen Basisklasse

Die Einzelnen ON_ Makros kannst du in der msdn nachlesen :)

Wobei wenn du mit BC++ programmierst wirst du ja wahrscheinlich kein mfc verwenden :)

--

lazy sunday afternooon
i got no mind to worry
i close my eyes and drift away....

zum Seitenanfang zum Seitenende Profil || Suche
002
07.05.2002, 17:41
Retro



Ok, der Denkapperat hats verarbeitet :) jetzt müssens die Finger nur noch tippen...

Nen paar kleine Probleme wirds wohl noch geben da sich Borlands C++ Builder ziemlich von der Norm abhebt ;) somit erstelle ich mein Fensterelement garnicht selbst und habe (wie es aussieht) auch keinen direkten Zugriff darauf.

Vielen Dank!

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
003
08.05.2002, 00:47
Another1



Kurz gegoogled, lösung gefunden:
http://www.mitov.com/FAQ/body_faq.html#Using_message_map

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
004
08.05.2002, 01:02
Retro



Ich glaub ich hab meine Fähgigkeit zu googlen verloren =(

Danke!

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
005
08.05.2002, 12:12
Another1



Naja, wenn du schon keine Fähgigkeiten mehr hast, kannst du ja immernoch auf deine Fähigkeiten zurückgreifen (; *tronstyle*

--

Another1

...relaxing..atm =)
... und Schweiz suckt!

zum Seitenanfang zum Seitenende Profil || Suche
006
08.05.2002, 15:10
Retro



Arg, dafür hasse ich dich! =]

--

shielding people from their own stupidity is an evolutionary step backwards anyway.

/* God is dead!............Nietzsche */
/* Nietzsche is dead!......God */
/* Nietzsche is God!.......The Dead */

zum Seitenanfang zum Seitenende Profil || Suche
007
08.05.2002, 15:34
Tron



hehehe... ich werde zum gefluegelten wort ^_^

--

'KEINE PANIK' - aus der Triologie in fuenf Baenden von Douglas Adams

'FÜR DEINN FERD' - aus 'Gevatter Tod' von Terry Pratchett

zum Seitenanfang zum Seitenende Profil || Suche