Cpp WTL alkeet
Mureakuha
Sisällysluettelo |
Johdanto
WTL (Windows Template Library) on ATL:n (Active Template Library) pohjalle kehitetty C++ kirjasto, joka sisältää Win32 API:n ikkunoihin liittyviä toimintoja. WTL sisältää paljon yhtäläisyyksiä MFC:hen, mutta ei sisällä MFC -kirjaston tuomaa lisäkuormaa. WTL:stä puuttuu vakiona MFC:n sisältämä OLE, telakoituvat ikkunat, asiakirja/näkymä -rakenne ja valintaikkunat luokille (Wizards). Nämä ominaisuudet on kuitenkin tehtävissä jokseenkin samanoloisina WTL:n mutta pidemmällä kirjoittelulla. Tällä hetkellä WTL on suunnattu Visual C++:n käyttäjille, joten käyttö muilla kuten Dev-C++:lla on hankalaa.
Asentelu
WTL:n saa osoitteesta: http://sourceforge.net/projects/wtl/
Muista seurata mukana tulevia asennusohjeita. Mikäli käytössäsi on Visual C++ 2005 Express, tee muutokset asennusohjeen mukaan tai käytä seuraavaa: http://www.codeproject.com/wtl/WTLExpress.asp Lisäksi voit käyttää aikaisemmasta Win32 osiosta tuttua ResEd -sovellusta (Expressistä puuttuu resurssieditori).
Perusikkunan rakenne
CFrameWindowImpl sisältää kaikki yksi-ikkunaisen perusikkunan toiminnot:
- työkalurivit, valikko ja tilarivi
- ikkunan toiminnot kuten näkymän automaattinen muuntuminen ikkunaa suurennettaessa / pienennettäessä
- työkalurivin nappien valikot ja ponnahtavat vihjeet
- pikanäppäimet
Käyttöön tarvitaan siis:
- johda pääikkunan luokka CFrameWindowImpl:sta
- anna tarvittaessa DECLARE_FRAME_WND_CLASS -makrolla resurssieditorilla tehdyn työkalurivin ja valikon ID:t
- lisää viestien runko, jossa on viestit ja viestien käsittelijät
Jos ikkuna on tehty lomakkeista, CFrameWindowImpl<> korvataan CDialogImpl<>:lla.
Edelliset toiminnot tulevat Wizard -toiminnon kautta, joten niitä ei tarvitse itse tehdä:
- CFrameWindowImpl<> tulee pääikkunaksi, kun valitaan 'SDI Application'
- CDialogImpl<> puolestaan, kun valitaan 'Dialog Based'
Ohjelman rakenne
Ohjattu projektin aloitus luo toimivan pohjan, jossa on mukana resurssieditorilla tehdyt ikkunat, ikonit, pikanäppäimet, valikko, versiotieto ja joukon valmiita tekstejä (String Table). Projektin nimellä olevassa cpp -tiedostossa on seuraavankaltainen rakenne (esimerkki otettu lomakepohjasta)
int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpstrCmdLine, int nCmdShow) { HRESULT hRes = _Module.Init(NULL, hInstance); CMessageLoop theLoop; _Module.AddMessageLoop(&theLoop); ATLASSERT(SUCCEEDED(hRes)); CMainDlg dlgMain; if(dlgMain.Create(NULL) == NULL) { ATLTRACE(_T("Main dialog creation failed!\n")); return 0; } dlgMain.ShowWindow(SW_SHOWNORMAL); int nRet = theLoop.Run(); _Module.RemoveMessageLoop(); _Module.Term(); return nRet; }
Rakenne on siis samanlainen kuin WIN32 -osiossa oli, mutta suurin osa alustuksista piiloutuu kirjaston taakse. Muokattavat toiminnot, jotka liittyvät päänäkymään sijaitsevat
- CFrameWindowImpl<> vaihtoehdolla (SDI Application) mainfrm.cpp:ssa
- CDialogImpl<> vaihtoehdolla (lomakkeilla) maindlg.h:ssa
Pääikkunan tyylin saa muilla kuin lomakkeilla valittua vaihtoehdoista: perus-, muokkaus-, lista-, puu- tai nettiselainikkuna.
Jos linkkeri tuo virheen "... unresolved external symbol _main ...", muuta 'Minimizing CRT use in ATL' arvoon 'No' tai poista kääntäjän 'Preprocessor Defination' -kohdasta _ATL_MIN_CRT.
