//*********************************************************************** // // vierityspalkki.cpp // //*********************************************************************** #include #include "vierityspalkki.h" CMyApp myApp; ///////////////////////////////////////////////////////////////////////// // CMyApp luokan aliohjelmien toteutus BOOL CMyApp::InitInstance () { m_pMainWnd = new CMainWindow; m_pMainWnd->ShowWindow (m_nCmdShow); m_pMainWnd->UpdateWindow (); return TRUE; } ///////////////////////////////////////////////////////////////////////// // CMainWindow luokan aliohjelmien toteutus BEGIN_MESSAGE_MAP (CMainWindow, CWnd) // MESSAGE MAP alkaa ON_WM_CREATE () // lomake luodaan ON_WM_VSCROLL () // vierityspalkkia muutettu ON_WM_HSCROLL () // vierityspalkkia muutettu END_MESSAGE_MAP () // MESSAGE MAP loppuu CMainWindow::CMainWindow () { CString strWndClass = AfxRegisterWndClass ( NULL, // ikkunan tyyli myApp.LoadStandardCursor (IDC_ARROW), // ikkunan kursori (HBRUSH) COLOR_WINDOW, // ikkunan taustan väri myApp.LoadStandardIcon (IDI_APPLICATION) // ikkunan ikoni ); // rekisteröidään oma ikkunaluokka CreateEx ( NULL, // ikkunan lisätyyli strWndClass, // lomakkeen ikkunaluokka "Vierityspalkki", // ikkunan otsikko WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU, // ikkunan tyyli CW_USEDEFAULT, // x-positio aluksi CW_USEDEFAULT, // y-positio aluksi 500, // leveys aluksi 300, // korkeus aluksi NULL, // emoikkunan kahva NULL, // ikkunan valikon kahva NULL // lisätietoja ); // luodaan ikkuna } int CMainWindow::OnCreate (LPCREATESTRUCT lpcs) // lomakkeen luomistapahtuma { m_fontMain.CreateFont (10, 0, 0, 0, FW_NORMAL, 0, 0, 0, DEFAULT_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_DONTCARE, "MS Sans Serif"); // fontin luominen CRect rect (10, 10, 482, 266); // CRect luokkaan tallennetaan kontrollia varten vasen ylänurkka ja oikea alanurkka m_ctlGroupBox.Create ("", WS_CHILD | WS_VISIBLE | BS_GROUPBOX, rect, this, (UINT) -1); // luodaan kehyskontrolli m_ctlGroupBox.SetFont (&m_fontMain, FALSE); // asetetaan kehyskontrollin fontti rect.SetRect (170, 60, 190, 200); // vaihdetaan uudet arvot m_ctlVScroll.Create (WS_CHILD | WS_VISIBLE | SBS_VERT, rect, this, (UINT) 1); // luodaan vierityspalkkikontrolli m_ctlVScroll.SetFont (&m_fontMain, FALSE); // asetetaan vierityspalkkikontrollin fontti m_ctlVScroll.SetScrollRange (0, 10000, TRUE); // asetetaan vierityspalkin vieritysväliksi 0 - 10000 rect.SetRect (210, 120, 350, 140); // vaihdetaan uudet arvot m_ctlHScroll.Create (WS_CHILD | WS_VISIBLE | SBS_HORZ, rect, this, (UINT) 2); // luodaan vierityspalkkikontrolli m_ctlHScroll.SetFont (&m_fontMain, FALSE); // asetetaan vierityspalkkikontrollin fontti m_ctlHScroll.SetScrollRange (0, 10000, TRUE); // asetetaan vierityspalkin vieritysväliksi 0 - 10000 rect.SetRect (20, 240, 470, 255); // vaihdetaan uudet arvot m_ctlStatic.Create ("Static kontrolli", WS_CHILD | WS_VISIBLE | SS_CENTER | SS_SUNKEN, rect, this, (UINT) 3); // luodaan etikettikontrolli m_ctlStatic.SetFont (&m_fontMain, FALSE); // asetetaan vierityspalkkikontrollin fontti return 0; // kaikki hyvin, palautetaan 0 } void CMainWindow::OnVScroll (UINT code, UINT oldposition) // vierityspalkkia muutettu { static int vpositio = 0; // palkkien tila char bufferi[10] = {NULL} ; // tulostettava numero pitää muuttaa tekstiksi switch (code) // tässä palautuu tapahtumatunnus { case SB_PAGEDOWN : // palkin kuilua napautettiin vpositio = vpositio + 24; // muutetaan palkin asema uudelleen case SB_LINEDOWN : // palkin vieritysnappia napautettiin vpositio = min(10000, vpositio + 1); // positio ei saa liukua ohi 10000 break; case SB_PAGEUP : // palkin kuilua napautettiin vpositio = vpositio - 24; // muutetaan palkin asema uudelleen case SB_LINEUP : // palkin vieritysnappia napautettiin vpositio = max(0, vpositio - 1); // positio ei saa liukua ohi 0 break; case SB_THUMBPOSITION : // palkkia siirretään hissistä case SB_THUMBTRACK : // palkkia siirretään hissistä vpositio = oldposition ; // oldposition == uusi asema break; } m_ctlVScroll.SetScrollPos (vpositio, TRUE) ; // asetetaan palkin asemaksi paikka johon käyttäjä hissin siirsi m_ctlStatic.SetWindowText (itoa (vpositio, bufferi, 10)) ; // tulostetaan numero tekstiruutuun } void CMainWindow::OnHScroll (UINT code, UINT oldposition) // vierityspalkkia muutettu { static int hpositio = 0; // palkkien tila char bufferi[10] = {NULL} ; // tulostettava numero pitää muuttaa tekstiksi switch (code) // tässä palautuu tapahtumatunnus { case SB_PAGEDOWN : // palkin kuilua napautettiin hpositio = hpositio + 24; // muutetaan palkin asemaa case SB_LINEDOWN : // palkin vieritysnappia napautettiin hpositio = min(10000, hpositio + 1);// positio ei saa liukua ohi 10000 break; case SB_PAGEUP : // palkin kuilua napautettiin hpositio = hpositio - 24; // muutetaan palkin asemaa case SB_LINEUP : // palkin vieritysnappia napautettiin hpositio = max(0, hpositio - 1); // positio ei saa liukua ohi 0 break; case SB_THUMBPOSITION : // palkkia siirretään hissistä case SB_THUMBTRACK : // palkkia siirretään hissistä hpositio = oldposition ; // oldposition == uusi asema break; } m_ctlHScroll.SetScrollPos (hpositio, TRUE) ; // asetetaan palkin asemaksi paikka johon käyttäjä hissin siirsi m_ctlStatic.SetWindowText (itoa (hpositio, bufferi, 10)) ; // tulostetaan numero tekstiruutuun }