Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: GetStockObject()

Darth_Sebane [04.06.2003 18:06:07]

#

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?

weicco [04.06.2003 18:33:52]

#

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?url=/library/en-us/gdi/devcons_1t10.asp

Darth_Sebane [04.06.2003 18:45:52]

#

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ää?

weicco [04.06.2003 20:20:02]

#

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:

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wceui40/html/cerefInitCommonControls.asp

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.

Darth_Sebane [05.06.2003 15:27:00]

#

Koneeltani ei löydy tuota Commctrl.lib tiedostoa.
Mikä VC++ IDE on, onko VC++ 6:ta eri versioita?

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta