Wie Größe und Position der Fenster Beschriftung Schaltflächen erhalten (minimieren, wiederherstellen, in der Nähe)
-
20-08-2019 - |
Frage
Gibt es einen API-Aufruf die Größe und Position der Fensterbeschriftung Tasten zu bestimmen? Ich versuche, Vista-Stil Beschriftung Schaltflächen auf einen Eigentümer gezeichnet Fenster zu zeichnen. Ich bin der Umgang mit C / C ++ / mfc.
Edit: Hat jemand ein Codebeispiel hat die Schließen-Schaltfläche ziehen
Lösung
Ich habe die Funktion gefunden erforderlich, um die Position der Schaltflächen in Vista zu bekommen: WM_GETTITLEBARINFOEX
Dieser Link zeigt auch die Systemmetriken richtig alle den Abstand bekommen erforderlich (Schande es ist kein Volldialogbild obwohl). Das funktioniert perfekt in Vista, und vor allem in XP (in XP gibt es etwas zu viel von einer Lücke zwischen den Tasten).
Andere Tipps
GetSystemMetrics gibt all diese Informationen. So zeichnen Sie in der Fensterdekoration, benutzen GetWindowDC .
Der folgende Code von "Global Titlebar Hook" Beispiel angepasst ist, ich unter http: // www .catch22.net / content / snippets . Ich änderte das Beispiel, um es MFC freundlich. Es gibt die X-Koordinate der äußersten linken titlebar Taste, aber es leicht modifiziert werden könnte, um die Position einen der Tasten zu finden.
#define B_EDGE 2
int CMyWindow::CalcRightEdge()
{
if(GetStyle() & WS_THICKFRAME)
return GetSystemMetrics(SM_CXSIZEFRAME);
else
return GetSystemMetrics(SM_CXFIXEDFRAME);
}
int CMyWindow::findNewButtonPosition()
{
int nButSize = 0;
DWORD dwStyle = GetStyle();
DWORD dwExStyle = GetExStyle();
if(dwExStyle & WS_EX_TOOLWINDOW)
{
int nSysButSize = GetSystemMetrics(SM_CXSMSIZE) - B_EDGE;
if(GetStyle() & WS_SYSMENU)
nButSize += nSysButSize + B_EDGE;
return nButSize + CalcRightEdge();
}
else
{
int nSysButSize = GetSystemMetrics(SM_CXSIZE) - B_EDGE;
// Window has Close [X] button. This button has a 2-pixel
// border on either size
if(dwStyle & WS_SYSMENU)
nButSize += nSysButSize + B_EDGE;
// If either of the minimize or maximize buttons are shown,
// Then both will appear (but may be disabled)
// This button pair has a 2 pixel border on the left
if(dwStyle & (WS_MINIMIZEBOX | WS_MAXIMIZEBOX) )
nButSize += B_EDGE + nSysButSize * 2;
// A window can have a question-mark button, but only
// if it doesn't have any min/max buttons
else if(dwExStyle & WS_EX_CONTEXTHELP)
nButSize += B_EDGE + nSysButSize;
// Now calculate the size of the border...aggghh!
return nButSize + CalcRightEdge();
}
}
GetSystemMetrics Funktion sollten Sie mit einer Größe helfen (SM_CYSIZE und SM_CXSIZE Parameter).
Bearbeiten
Ich bin mir nicht sicher, dass Sie Positionen mit dieser Funktion finden können, aber Sie vielleicht einen Blick auf emule Quellcode herunterladen , sie haben es geschafft, eine Schaltfläche, um ein Fenster Beschriftung hinzuzufügen.