Miksi seuraava lause ilmoittaa virheen: cannot convert from 'void *' to 'struct HFONT__ *'
HFONT hFont = GetStockObject (DEFAULT_GUI_FONT) ; // kysytään oletusfontin kahva
Seuraava lause silti onnistuu:
winclass.hbrBackground = GetStockObject(BLACK_BRUSH);
Mitä GetStockObject() tekee?
Koska GetStockObject palauttaa HGDIOBJECT tyyppisen muuttujan. Jos palautat sillä fontin, castaa paluuarvo HFONT tyyppiksesi.
HFONT hFont = (HFONT)GetStockObject(...);
MSDN: http://msdn.microsoft.com/library/default.asp?
Korjasin rivin kuten neuvoit mutta nyt kääntäjä ilmoittaa kahdesta virheestä:
error LNK2001: unresolved external symbol __imp__InitCommonControls@0
ja
fatal error LNK1120: 1 unresolved externals
Tuollaisita virheistä en edes ymmärrä mitään. Voisiko joku selventää?
Eli nyt kääntäjä sai tehtävänsä hoidettua. Nyt enää linkkerin tarvitsee tietää, mistä puuttuvat symbolit haetaan. MSDN kertoo ratkaisun tähänkin ongelmaan:
Eli siis ko. funktio löytyy Commctrl.h headerista (eli kääntäjä on saanut tarvittavan tiedon tuolta) ja sen symboli löytyy Commctrl.lib tiedostosta. Tämä Commctrl.lib sinun täytyy kertoa kääntäjälle. Oletan, että käytät Visual C++ IDE:ä, niin menet Project -> Settings -> Link-välilehti ja Object/Library modules - kenttään lisäät tuon Commctrl.lib.
Koneeltani ei löydy tuota Commctrl.lib tiedostoa.
Mikä VC++ IDE on, onko VC++ 6:ta eri versioita?
Aihe on jo aika vanha, joten et voi enää vastata siihen.