Ist es nur eine Wahl zwischen dem Flackern des Fensters und dem Löschen des Hintergrunds?C++

Programme in C++. Entwicklerforum
Guest
 Ist es nur eine Wahl zwischen dem Flackern des Fensters und dem Löschen des Hintergrunds?

Post by Guest »

Ich erstelle ein Win32-Layoutsystem. Ich habe festgestellt, dass die untergeordneten Fenster und Steuerelemente häufig flackern, wenn ich die Fenstergröße ändere, sodass ich in WM_ERASEBKGND FALSE zurückgebe. Wenn ich zu diesem Zeitpunkt die Fenstergröße erneut ändere, bleiben Spuren der untergeordneten Fenster zurück (ich weiß leider nicht, mit welchem ​​Wort ich dieses Phänomen beschreiben soll).
Image

Wie kann ich dafür sorgen, dass das Fenster nicht flackert und den Rest löschen? Hintergrund?
Hier ist mein Code:

Code: Select all

#include 
#include 

// Enabling Visual Styles
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")

std::vector hWndBtn;
LRESULT CALLBACK WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_CREATE:
{
hWndBtn.push_back(CreateWindow(TEXT("BUTTON"), TEXT("Button1"), WS_VISIBLE | WS_CHILD, 100, 100, 300, 200, hWnd, NULL, NULL, NULL));
hWndBtn.push_back(CreateWindow(TEXT("BUTTON"), TEXT("Button2"), WS_VISIBLE | WS_CHILD, 100, 100, 300, 200, hWnd, NULL, NULL, NULL));
hWndBtn.push_back(CreateWindow(TEXT("BUTTON"), TEXT("Button3"), WS_VISIBLE | WS_CHILD, 100, 100, 300, 200, hWnd, NULL, NULL, NULL));
hWndBtn.push_back(CreateWindow(TEXT("BUTTON"), TEXT("Button4"), WS_VISIBLE | WS_CHILD, 100, 100, 300, 200, hWnd, NULL, NULL, NULL));
hWndBtn.push_back(CreateWindow(TEXT("BUTTON"), TEXT("Button5"), WS_VISIBLE | WS_CHILD, 100, 100, 300, 200, hWnd, NULL, NULL, NULL));
hWndBtn.push_back(CreateWindow(TEXT("BUTTON"), TEXT("Button6"), WS_VISIBLE | WS_CHILD, 100, 100, 300, 200, hWnd, NULL, NULL, NULL));
break;
}
case WM_ERASEBKGND: return FALSE;
case WM_PAINT:
{
break;
}
case WM_SIZE:
{
INT width = max(0, LOWORD(lParam));
INT height = max(0, HIWORD(lParam));

int y = 100;
int spacing = 30;
HDWP hDWP = BeginDeferWindowPos((int)hWndBtn.size());
for (int i = 0; i < hWndBtn.size(); ++i)
{
height = 50;
DeferWindowPos(
hDWP,
hWndBtn[i],
NULL,
100, y,
width - 200, height,
SWP_NOZORDER
);
y = y + height + spacing;
}
EndDeferWindowPos(hDWP);
break;
}
case WM_CLOSE:
DestroyWindow(hWnd);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, BOOL) {
WNDCLASS wc = { 0 };
wc.lpszClassName = TEXT("wndclass");
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.lpfnWndProc = WinProc;
RegisterClass(&wc);

HWND hWnd = CreateWindow(wc.lpszClassName, TEXT("Window"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 400, 300, 0, 0, hInstance, 0);
if (hWnd == NULL) return 1;
ShowWindow(hWnd, SW_SHOWNORMAL);
MSG msg = { 0 };
while (GetMessage(&msg, 0, 0, 0)) {
DispatchMessage(&msg);
}
return 0;
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post