2010-06-22 13 views
1

J'ai une fenêtre d'application dans laquelle j'ajoute le style WS_THICKFRAME et j'ai supprimé le style WS_CAPTION. Lorsque la fenêtre est agrandie, je veux masquer WS_THICKFRAME, mais conserver la fonctionnalité Aero-Snap, j'ai donc modifié mon gestionnaire pour WS_NCCALCSIZE pour renvoyer un recto gonflé par rapport à la taille des bordures de la fenêtre.Ne pas dessiner une épaisseur sur un CWnd

C'est, la partie importante du code du gestionnaire de WS_NCCLIENTSIZE ressemble à ceci:

... 
CRect rc(lpncsp->rgrc[0]); 
if (IsZoomed()) 
{ 
    int borderSize = GetSystemMetrics(SM_CYSIZEFRAME); 
    rc.InflateRect(borderSize,topOff+borderSize,borderSize,borderSize); 
} 
else 
    rc.InflateRect(0,topOff+0,0,0); 

lpncsp->rgrc[0] = rc; 
... 

ce code fait effectivement le WS_THICKFRAME caché.

Seul le problème est que lorsque la fenêtre perd le focus ou reprend le focus (lorsqu'elle est agrandie), WS_THICKFRAME est dessiné dans la limite. Y a-t-il un message dans lequel je peux retourner le rectangle gonflé ou au moins réajuster la taille de la fenêtre pour masquer à nouveau WS_THICKFRAME lorsque le focus de la fenêtre est activé/désactivé?

Répondre

1

Oui, ça ne marchera pas. Implémentez un gestionnaire de messages pour WM_GETMINMAXINFO pour permettre aux bordures de la fenêtre de tomber de l'écran. Prenez garde que si vous n'avez pas défini l'option/SUBSYSTEM du linker pour indiquer que votre programme est fait pour Vista ou Win7 (version 6,0), Aero vous mentira lorsque vous utiliserez GetWindowRect(). La valeur que vous récupérez est basée sur des bordures minces (anciennes).

+0

Si vous définissez l'option/SUBSYSTEM pour Vista/W7, le programme fonctionnera-t-il sous XP? –

+0

Non, ce ne sera pas. –

+0

Ok, alors ce n'est pas une option. Merci néanmoins pour l'info. –