Cpp WTL alkeet

Mureakuha

Loikkaa: valikkoon, hakuun

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

Kuva:WTL_rakenne.PNG

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:

  1. johda pääikkunan luokka CFrameWindowImpl:sta
  2. anna tarvittaessa DECLARE_FRAME_WND_CLASS -makrolla resurssieditorilla tehdyn työkalurivin ja valikon ID:t
  3. 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.

Linkkejä

http://www.codeproject.com/wtl/

Henkilökohtaiset työkalut