Domanda

Ho una barra degli strumenti sviluppati con le versioni precedenti di Windows, che è in gran parte tagliati fuori sotto Vista a causa della finestra di nuova imbottitura confine. Con l'imbottitura bordo predefinito di 4, il tutto sulla barra viene spinto quattro pixel in basso a destra, e quindi tutto è ritagliata quattro pixel dalla parte inferiore e destra. Non mi interessa la dimensione orizzontale tanto, ma in verticale Questo significa che l'applicazione perde otto pixel del contenuto visibile.

Con il termine "barra degli strumenti" Voglio dire una finestra creata simile al seguente:

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);

Dal padding confine è un elemento di configurazione apparentemente nuovo a Vista, come può un programma che viene eseguito in entrambi XP e Vista gestire questa situazione? Le mie domande sono:

  1. E 'possibile per una barra degli strumenti per raccontare Vista "Ignora il 'padding confine' impostazione, il mio padding confine è 0"?
  2. Se no, come fa la domanda a capire cosa l'imbottitura confine è impostato in modo che possa fare la sua finestra più alta dal doppio di tale importo?
  3. Per entrambe le domande, come si fa a fare questo in modo tale da consentire lo stesso eseguibile ad operare sotto XP, Vista, Win2003, e così via?
È stato utile?

Soluzione

una possibilità è quella di giocare con diversi stili di finestra, a partire da WS_THICKFRAME.

per capire l'imbottitura provare a utilizzare GetClientRect e GetWindowRect e sottrarre l'uno dall'altro.

Altri suggerimenti

Un'altra cosa da notare è che a parte, se si sta già tentando di prendere in considerazione il bordo della finestra utilizzando GetSystemMetrics o simili, il sottosistema si compila a fa la differenza nel modo in cui i confini impatto spazio clienti.

Un link al objectmix cerca di spiegare questo. Con sottosistema, credo che cosa significano è la bandiera /subsystem quando si collega la .exe, o l'impostazione corrispondente in Visual Studio.

~ gioielli

Bene, ho capito, specie se. Nel mio caso, la causa del problema era uso di WS_THICKFRAME quando si chiama CreateWindowEx(), che non ho bisogno. Questa impostazione è stata utilizzata, in precedenza, per centrare tutto in verticale nella barra degli strumenti. Credo che sotto WinXP (visualizzazione classica) e versioni precedenti, un WS_THICKFRAME prevedibilmente aggiunto 3 pixel di imbottitura su tutti i formati.

Così, ho rimosso questa opzione e ha cambiato il codice per spostare tutto tre pixel verso il basso e verso destra. Ora la barra degli strumenti appare identico sotto WinXP e Vista e non ho la fastidiosa e inutile (per questa barra degli strumenti) chilo in più.

Questo non risolve il caso generale, ma dal momento che la mia risposta potrebbe aiutare gli altri che corrono in questo, ho pensato di postare la mia soluzione. Spero che questo aiuta a qualcun altro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top