Frage

Ich habe eine Symbolleiste unter älteren Windows-Versionen entwickelt, die weitgehend unter Vista ab aufgrund der Fenster neuen Grenz padding geschnitten wird. Mit dem Standard-Rahmen-padding von 4 wird das alles auf der Symbolleiste vier Pixel geschoben nach unten und nach rechts, und dann wird alles vier Pixel von der unteren und rechten Seite abgeschnitten. Ich weiß nicht wirklich um die horizontale Dimension egal wie viel, aber vertikal dies bedeutet, dass die Anwendung acht Pixel des sichtbaren Inhalts verliert.

Mit dem „Toolbar“ Ich meine ein Fenster ähnlich angelegt wie folgt vor:

APPBARDATA  AppBarData;
AppBarData.hWnd = CreateWindowEx(WS_EX_TOOLWINDOW | WS_EX_TOPMOST, MAIN_WNDCLASS,
                                 "", WS_POPUP | WS_THICKFRAME | WS_CLIPCHILDREN,
                                 0, 0, 400, TOOLBAR_HEIGHT, NULL, NULL,
                                 AppInstance, NULL);
// more initialization  ....
SHAppBarMessage(ABM_NEW, &AppBarData);

Seit Rand padding ein Konfigurationselement ist scheinbar neu zu Vista, wie kann eine Anwendung, die in läuft XP und Vista damit umgehen? Meine Fragen sind:

  1. Ist es möglich, dass eine Symbolleiste Vista zu sagen, „Ignorieren Sie die‚Grenz padding‘-Einstellung, meine Grenze padding 0“?
  2. Wenn nein, wie eine Anwendung herauszufinden, was die Grenze padding eingestellt ist, so kann es sein Fenster größer durch doppelt so hoch machen?
  3. Für beide Fragen, wie Sie dies in einer Weise tun, die ermöglicht, die gleiche ausführbare Datei unter XP, Vista, Win2003, und so weiter zu betreiben?
War es hilfreich?

Lösung

ist eine Option, mit verschiedenen Fensterstilen zu spielen, mit WS_THICKFRAME starten.

, um herauszufinden, versuchen die Polsterung GetClientRect und GetWindowRect mit und subtrahieren von der anderen Seite.

Andere Tipps

Eine andere Sache gesondert zu beachten ist, dass, wenn Sie bereits versucht zu berücksichtigen, die Fensterrand von GetSystemMetrics oder ähnliches verwendet wird, das Subsystem Sie kompilieren, um einen Unterschied macht, wie die Grenzen Ihrer Client-Bereich auswirken.

Ein Link auf objectmix dies zu erklären versucht. Mit dem Subsystem, glaube ich, was sie bedeuten die /subsystem Flagge, wenn Sie die .exe verknüpfen, oder die entsprechende Einstellung in Visual Studio.

~ Juwelen

Nun, ich es herausgefunden, zu sortieren, wenn. In meinem Fall war die Ursache für das Problem der WS_THICKFRAME Gebrauch, wenn CreateWindowEx() Aufruf, die ich nicht brauche. Diese Einstellung wurde verwendet, die zuvor alles vertikal in der Werkzeugleiste zu zentrieren. Ich denke, unter WinXP (klassische Ansicht) und früher ein WS_THICKFRAME hinzugefügt vorhersagbar 3 Pixel padding auf allen Größen.

So entfernte ich diese Option und den Code geändert, um alles drei Pixel nach unten und nach rechts zu bewegen. Jetzt sieht die Symbolleiste unter WinXP und Vista identisch und ich habe nicht das lästige und unnötiges (für diese Symbolleiste) Pfund extra.

Dies löst nicht den allgemeinen Fall, aber da meine Antwort anderen helfen kann, die in diesem Lauf, ich dachte, dass ich meine Lösung veröffentlichen würde. Ich hoffe, das hilft jemand anderes.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top