winapi - Placering af et maksimeret vindue med brugerdefineret krom

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har oprettet et vindue med en brugerdefineret krom af:



  1. Håndtering af WM\_NCHITTEST og returnering af de relevante værdier for vinduets billedtekst og -grænser

  2. Slukning WM\_NCPAINT (og WM\_NCUAHDRAWCAPTION, WM\_NCUAHDRAWFRAME),

  3. Håndtering af WM\_SETTEXT, WM\_SETICON og WM\_NCACTIVATE med DefWindowProc ved midlertidigt at fjerne WM\_VISIBLE,

  4. Håndtering af WM\_WINDOWPOSCHANGED for at anvende et vinduesområde for afrundede hjørner.



Flytning/resizing håndteres fint af Windows. Jeg tilføjede WS\_THICKFRAME til vinduesformaterne for at aktivere Aero Snap-funktionalitet. Men nu når vinduet er maksimeret, er det placeret på (-5,-5) og min brugerdefinerede titellinje er afskåret (dette sker ikke uden WS\_THICKFRAME).


Hvad er den rigtige måde at løse det på? Hvad påvirker denne stilling? Det ser ud til at være uden relation til værdier returneret til WM\_NCHITTEST.

Bedste reference


Sen svar, men det lader til, at ingen andre har svaret.


Du kan tjekke, hvornår vinduet er maksimeret og tegner sig for margenen, når vinduet maksimeres. Du kan muligvis håndtere WM\_NCCALCSIZE snarere end WM\_NCPAINT for at få hele vinduet til at vises som klientområde, snarere end at male det ikke-klientområde.


Dette beskriver en tilgang til implementering af brugerdefineret krom (jeg var forfatteren):
http://blogs.msdn.com/b/wpfsdk/archive/2008/09/08/custom-window-chrome-in-wpf.aspx[15]


Håber det hjælper,