Tab Control, Tab Stop , WM_PAINT

KILLSMAKER

Erfahrenes Mitglied
Moin!

Microsoft Visual Studio.net v.2003

1. Ich habe versucht ein Tab Control zu erstellen.

Code:
hwndTab = CreateWindow( 
        WC_TABCONTROL, "", 
        WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE, 
        0, 0, 200, 40, 
        hwnd, NULL, hInstance, NULL 
        );
Weiß einer von euch weshalb der Tab Control nicht erzeugt wird?
2.
Ich habe Editfelder, auch mit CreateWindow, erzeugt und als Style WS_TABSTOP angegeben, allerdings passiert hier auch nichts, wenn ich auf TAB drücke. Muss man vielleicht noch irgendwo etwas
einstellen oder so, damit das geht.
3.
Ich zeichne in meinem WM_PAINT-case-zweig einen Text mit TextOut, aber nur wenn eine bestimmte Bedingung erfüllt ist. Ich möchte nun per Knopfdruck die Bedingung verändern und somit es schaffen, dass der Text nicht mehr angezeigt wird.
Also
Code:
case WM_COMMAND:
        switch(wParam)
{
case KNOPF:
        Bedingung=FALSE;
        InvalidateRect(hwnd,NULL,FALSE);
        break;
}
break;
...
Wenn ich jetzt auf den Knopf drücke müsste die Arbeitsfläche doch für ungültig erklärt werden und somit eine WM_PAINT Message ausgelöst werden.
Da hier die Bedingung nicht erfüllt ist, müsste doch kein Text gezeichnet werden, oder?
PS: Wenn ich mit einem Fenster aus einem anderen Programm kurz über den Text fahre verschwindet er, oder wenn ich die Fenstergröße ändere.
Wüsste hier vielleicht auch jemand wie ich den gezeichneten Text wieder wegkriege.


Sry für Rechtschreibfehler und falls die Fragen ein bisschen blöd gestellt sind fragt bitte nach.
Gruß Killsmaker
CU
DANKE
 
Irgendwie klingen alle drei Probleme nach einer verkorksten Messageschleife.

Für 1) Bekommst du NULL zurück? Dann prüf mal den Wert von GetLastError über das Error Lookup Tool.

Für 2) Wenn das ganze auf einem Dialog sitzt, dann musst du evtl. die Funktion IsDialogMessage in deine MessagePump einsetzen

Für 3) Zeig mal den (kompletten) Inhalt deiner WM_PAINT-Behandlung. Benutzt du BeginPaint/EndPaint? Gibst du TRUE zurück?
 
danke erstmal für die Antwort:

zu1) Ok probier ich gleich mal aus.
zu2) Ne ist im Hauptfenster
zu3) Poste ich morgen und ich gebe nicht TRUE zurück sondern ich nehme einfach break;
Ist das verkehrt?
CU
 
zu 3)
habe nochmal kurz im Petzold nachgeschlagen: Bei InvalidateRect muss natürlich als 3 Parameter TRUE gesetzt werden und nicht FALSE :p um ein Recteck für ungültig zu erklären.
Hätte man auch selbst drauf kommen können. Trotzdem Danke für die Antworten.
Jetzt fehlen noch 1) und 2)
zu 1) Ich habe es mit GetLastError ausprobiert und da wird mir gesagt, dass die Fensterklasse nicht bekannt ist. Ich dachte die wäre dem Compiler bekannt, wie "button" oder "edit". Weiß einer, wie ich dem Compiler die Fensterklasse "WC_TABCONTROL" beibringe. Ich habe mal irgendetwas mit Common Libary oder so gehört. Kann das sein?
CU DANKE
 
zu 1) Stimmt, jetzt wo dus sagst. Ruf mal InitCommonControls oder seinen erweiterten Kumpel InitCommonControlsEx auf. Evtl. muss dafür auch eine comctl32.lib eingebunden werden.

zu 2) Was genau passiert denn? WS_TABSTOP heisst, dass diese Control per Tabulator-Taste angewählt werden kann. Edits müssten den Stil eigentlich von Haus aus gesetzt haben. Hast du mal beim laufenden Programm mit dem Spy nachgesehen, ob der Stil noch am Edit dran ist?
 
zu 1) thx muss ich gleich mal testen
zu 2) thx muss ich auch gleich testen
melde mich morgen wieder mit meinen Ergebnissen
CU
DANKE und noch einen schönen Sonntag mit Schröder vs Merkel
 
Moin!

zu1) funktioniert endlich [danke]
zu2) Ich habe es mit Spy ausprobiert dort steht noch der Style WS_TABSTOP
aber wenn ich die TAB-Taste drücke passiert nichts.

CU DANKE
 
Zurück