Hi,
Ich habe mit follgendem Code ein Windowsfenster mit 3 Steuerelmenten erzeugt (Statischer Text, Editbox und Button). Leider werden die Steuerelmente nur sichtbar, wenn ich auf das Fenster klicke und kommen dann nur kurz zum Vorschein. Vieleicht weiß ja jemand eine Lösung für mein Problem
Ich würde mich über Hilfe freuen
Ich habe mit follgendem Code ein Windowsfenster mit 3 Steuerelmenten erzeugt (Statischer Text, Editbox und Button). Leider werden die Steuerelmente nur sichtbar, wenn ich auf das Fenster klicke und kommen dann nur kurz zum Vorschein. Vieleicht weiß ja jemand eine Lösung für mein Problem
Code:
#include <windows.h>
// Prototyp der Callback-Funktion
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam);
// Hauptprogramm
//
int WINAPI WinMain (HINSTANCE hInst, HINSTANCE hPrevInst,
LPSTR lpcmdline, int ncmdshow)
{
WNDCLASSEX windowclass; // Struktur für Fenstereigenschaften
HWND hWnd; // Fenster-Handle
MSG message; // Nachricht
// Der Klassen-Name des Fensters ist frei wählbar
const char szClassName[] = "Erstes Fenster";
// Struktur mit gewünschten Eigenschaften füllen
//
// Größe der Struktur zwischenspeichern
windowclass.cbSize = sizeof (WNDCLASSEX);
// Fenster soll beim Verschieben neu gezeichnet werden
windowclass.style = CS_HREDRAW | CS_VREDRAW;
// Zeiger auf Callback-Funktion
windowclass.lpfnWndProc = WindowProc;
// Keine erweiterten Einstellungen
windowclass.cbClsExtra = 0;
windowclass.cbWndExtra = 0;
// Instanz speichern
windowclass.hInstance = hInst;
// Icons und Cursor festlegen
windowclass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
windowclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
windowclass.hCursor = LoadCursor (NULL, IDC_ARROW);
// Hintergrundfarbe festlegen
windowclass.hbrBackground = (HBRUSH)COLOR_BACKGROUND+1;
// Ein Menü brauchen wir nicht
windowclass.lpszMenuName = NULL;
// Klassenname angeben
windowclass.lpszClassName = szClassName;
// Fensterklasse registrieren
if (!RegisterClassEx (&windowclass) )
return (0);
// Das Fenster erzeugen
hWnd = CreateWindowEx (NULL,
szClassName,
"Das erste Fenster!",
WS_OVERLAPPEDWINDOW | WS_VISIBLE,
100, 100,
300, 250,
NULL,
NULL,
hInst,
NULL);
// Prüfen, ob alles glatt ging
if (hWnd == NULL)
return (0);
// Der "Herzschlag" des Programms.
// Hier werden alle Nachrichten abgeholt,
// übersetzt und weitergeleitet.
while (GetMessage (&message, NULL, 0, 0) )
{
#define ID_BEISPIELTEXT 4000
HWND hText;
//Statischer Text als CHildfenster erzeugen
hText = CreateWindow ("STATIC",
"Beispieltext",
WS_VISIBLE | WS_CHILD,
0, 100,
300, 20,
hWnd,
(HMENU) ID_BEISPIELTEXT,
hInst,
NULL);
#define ID_BEISPIELBUTTON 4001
HWND hButton;
//Button als CHildfenster erzeugen
hButton = CreateWindow ("BUTTON",
"Test",
BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD,
90, 150,
95, 40,
hWnd,
(HMENU) ID_BEISPIELBUTTON,
hInst,
NULL);
#define ID_BEISPIELEDITBOX 4002
HWND hEdit;
//Button als CHildfenster erzeugen
hEdit = CreateWindow ("EDIT",
"Bitte Text eingeben..",
WS_VISIBLE | WS_CHILD | WS_BORDER | ES_CENTER,
20, 10,
250, 20,
hWnd,
(HMENU) ID_BEISPIELEDITBOX,
hInst,
NULL);
TranslateMessage (&message);
DispatchMessage (&message);
}
// Programm beenden
return (int)(message.wParam);
} // WinMain
// Callback-Funktion zur Nachrichtenverarbeitung
//
LRESULT CALLBACK WindowProc (HWND hWnd, UINT message,
WPARAM wParam, LPARAM lParam)
{
// Messages auswerten
switch (message)
{
// Fenster schließen? (Auch Alt-F4)
case WM_DESTROY:
{
// Nachricht zum Beenden schicken
PostQuitMessage (0);
return (0);
}
case WM_RBUTTONDOWN:
{
//Nachricht zum Beenden schicken
PostQuitMessage (0);
return (0);
}
// Wurde eine Taste gedrückt?
case WM_KEYDOWN:
{
// Ja, also je nach Taste verzweigen
switch (wParam)
{
// Wurde "Escape" gedrückt?
case VK_ESCAPE:
{
// Ja, also Nachricht zum Beenden schicken
PostQuitMessage (0);
return (0);
}
}
} break;
}
// Die Nachricht wurde nicht von uns verarbeitet, also
// von Windows verarbeiten lassen.
return (DefWindowProc (hWnd, message, wParam, lParam) );
} // WindowProc
Ich würde mich über Hilfe freuen