EditField im Vordergrund/Neuanzeigen des EditFields
-
In dieser Schleife wird ein Spiel neu angezeigt:
//Code 1 while(msg.message != WM_QUIT) { if(PeekMessage(&msg,NULL,0,0,PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } else { Direct3D.BeginScene(); DrawSprite(lpD3DDevice, 1024, 768, 0, 0, 0, "BackGround.bmp"); Direct3D.EndScene(); } }void DrawSprite(LPDIRECT3DDEVICE9 lpD3DDevice, int Width, int Height, float X, float Y, int DegreesRotated, char FileName[80]) ist eine Funktion, die eine Bilddatei ausliest und anzeigt (selbst geschrieben).
Hier wird beim Starten ein Eingabefeld erstellt (Edit1 ist eine globale Variable):
//Code 2 LRESULT CALLBACK MessageHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { // testen, um welche Nachricht es sich handelt switch(msg) { case WM_CREATE: Edit1 = CreateEditField(hWnd); return 0; } }Das ist die Funktion zum Erstellen des Eingabefelds:
//Code 3 HWND CreateEditField(HWND hWnd) { HWND hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "Edit", "leer", WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL, 200, 200,100,25, hWnd, NULL, NULL, NULL); if(hEdit != NULL) return hEdit; else return false; }Das Problem:
Im Code 1 wird der Hintergrund jedesmal neu gezeichnet (daran soll sich auch nichts ändern) und das Eingabefeld verschwindet dahinter. Ich kann es zwar anklicken und schreiben aber es flackert dann nur manchmal.Meine Frage:
Gibt es eine Möglichkeit, Edit1 über den Messagehandler in der 1. Schleife nach dem Hintergrund neu zu zeichnen (nur anzeigen, nicht neu erstellen, sonst geht der Text verloren)?
Oder ist es möglich, Edit1 automatisch schon von vorn herein im Vordergrund zu haben (also in der CreateEditField-Funktion etwas ändern)?
-
Vielleicht würde das Ganze besser ins Forum „Graphik- und Spieleprogrammierung“ passen.
Also wenn ein Mod so freundlich wäre...Danke!