WinAPI C ++: Neuprogrammierung der Fenstergröße

Ich habe ein Fenster und möchte die Rahmen wie jedes andere Fenster als Rahmen für die Größenänderung implementieren. Ich habe Vorschläge aus Kommentaren und Antworten übernommen und meinen Code umgeschrieben. Für WM_GETMINMAXINFO habe ich:

MINMAXINFO *min_max = reinterpret_cast<MINMAXINFO *>(lparam);

min_max->ptMinTrackSize.x = MINX;
min_max->ptMinTrackSize.y = MINY;

MINX und MINY sind die Mindestgröße, die das Fenster haben soll. Für WM_NCHITTEST habe ich:

RECT wnd_rect;
int x, y;

GetWindowRect (window, &wnd_rect);
x = GET_X_LPARAM (lparam) - wnd_rect.left;
y = GET_Y_LPARAM (lparam) - wnd_rect.top;

if (x >= BORDERWIDTH && x <= wnd_rect.right - wnd_rect.left - >BORDERWIDTH && y >= BORDERWIDTH && y <= TITLEBARWIDTH)
    return HTCAPTION;

else if (x < BORDERWIDTH && y < BORDERWIDTH)
    return HTTOPLEFT;
else if (x > wnd_rect.right - wnd_rect.left - BORDERWIDTH && y < BORDERWIDTH)
    return HTTOPRIGHT;
else if (x > wnd_rect.right - wnd_rect.left - BORDERWIDTH && y > wnd_rect.bottom - wnd_rect.top - BORDERWIDTH)
    return HTBOTTOMRIGHT;
else if (x < BORDERWIDTH && y > wnd_rect.bottom - wnd_rect.top - BORDERWIDTH)
    return HTBOTTOMLEFT;

else if (x < BORDERWIDTH)
    return HTLEFT;
else if (y < BORDERWIDTH)
    return HTTOP;
else if (x > wnd_rect.right - wnd_rect.left - BORDERWIDTH)
    return HTRIGHT;
else if (y > wnd_rect.bottom - wnd_rect.top - BORDERWIDTH)
    return HTBOTTOM;

return HTCLIENT;

Die Variablen sind ziemlich selbsterklärend. Dieser Code gibt mir einen Rahmen, den ich ziehen kann, um die Größe des Fensters zu ändern. Es funktioniert gut, wenn ich den unteren rechten, unteren und rechten Rand ziehe. Bei den anderen Rahmen scheint sich die untere rechte Ecke des Fensters immer noch hin und her zu bewegen, wenn ich versuche, sie zu ziehen. Es ähnelt dem, was in Google Chrome oder Visual Studio 2012 mit denselben Rahmen angezeigt wird, aber ich sehe dies nicht in Windows Explorer.

Gibt es eine Möglichkeit, die untere rechte Ecke so zu gestalten, dass sie nicht vor und zurück "wackelt", wenn ich die Größe des oberen oder linken Randes ändere, wie in Windows Explorer?

Antworten auf die Frage(5)

Ihre Antwort auf die Frage