windows - Hvad sker der med CWnd-ikonet

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har et CWnd-vindue, som jeg opretter dynamisk, og det ser ud til, at ikonet for titellinjeområde og proceslinje vælges tilfældigt eller noget.


For at indstille ikonet ringer jeg:


// Set the icon for this dialog.  The framework does this automatically when the application's main window is not a dialog
m\_hIcon = AfxGetApp()->LoadIconW(IDI\_ICON);
SetIcon(m\_hIcon, TRUE);         // Set big icon
SetIcon(m\_hIcon, FALSE);        // Set small icon


Som i MFC-prøver, men det ser ud til, at 32x32-ikonet altid vælges og nedskaleret, selvom der er andre, findes der tættere kampe. Ikonet i titellinjen er faktisk kun 16x16, men det bliver oprettet fra 32x32 version.


Dette forårsager et rod, når 32x32-ikonet er mere detaljeret end 16x16-en, da det nedskalerede ikon ligner en sløring.


CFrameWnd-vinduer synes at opføre sig anderledes på en måde, da de synes at vælge tættere match.


Er der nogen der kender en løsning til at tvinge foder mindre ikon i titellinjen, så jeg kunne beholde de større ikoner til W7-procesbakke?

Bedste reference


Det er LoadIcon, ikke LoadIconW, dette kompilerer ved et uheld. MFC-metoden bruger LoadIcon () API-funktionen. Fra SDK dokumentationen:



  LoadIcon kan kun indlæse et ikon, hvis
  størrelsen er i overensstemmelse med SM\_CXICON og
  SM\_CYICON system metriske værdier. Brug
  LoadImage-funktionen for at indlæse ikoner
  af andre størrelser.



Brug LoadImage () i stedet for, så du kan passere en passende størrelse. Lav to opkald for at hente en stor og en lille version. Eller gem det lille ikonbillede i et andet ikon med et andet ressource-id.