//*********************************************************************** // // ui.cpp // //*********************************************************************** #include #include #include "ui.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) ON_WM_CREATE () // lomakkeen luominen ON_WM_GETMINMAXINFO () // lomakkeen koon esto ON_WM_SIZE () // lomakkeen koon muutos ON_WM_VSCROLL () // vierityspalkkia muutettu ON_WM_PAINT () ON_BN_CLICKED (1, OnButtonRedClicked) // Punainen -nappia painetaan ON_BN_CLICKED (2, OnButtonGreenClicked) // Vihreä -nappia painetaan ON_BN_CLICKED (3, OnButtonBlueClicked) // Sininen -nappia painetaan END_MESSAGE_MAP () 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öi oman ikkunaluokan CreateEx ( NULL, // lomakkeen lisätyyli strWndClass, // lomakkeen ikkunaluokka "UI", // lomakkeen otsikko WS_OVERLAPPEDWINDOW, // | WS_CAPTION | WS_SYSMENU, // ikkunan tyyli CW_USEDEFAULT, // aloitus x-positio CW_USEDEFAULT, // aloitus y-positio 500, // alkuleveys 300, // alkukorkeus NULL, // emoikkunan kahva NULL, // lomakkeen valikon kahva NULL // lisätietoja ); // lomakkeen luominen } int CMainWindow::OnCreate () // 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-luokan olio tallentaa suorakaiteen vasemman ylänurkan ja oikean alanurkan m_ctlGroupBox.Create ("", WS_CHILD | WS_VISIBLE | BS_GROUPBOX, rect, this, 0); // luo kehyskontrollin m_ctlGroupBox.SetFont (&m_fontMain, FALSE); // asettaa kehyskontrollin fontin m_ctlVScrollRed.Create (WS_CHILD | WS_VISIBLE | WS_TABSTOP | SBS_VERT, rect, this, (UINT) 1); // luodaan vierityspalkkikontrolli m_ctlVScrollRed.SetFont (&m_fontMain, FALSE); // asetetaan vierityspalkkikontrollin fontti m_ctlVScrollRed.SetScrollRange (0, 255, TRUE); // asetetaan vierityspalkin vieritysväliksi 0 - 255 m_ctlVScrollGreen.Create (WS_CHILD | WS_VISIBLE | WS_TABSTOP | SBS_VERT, rect, this, (UINT) 2); m_ctlVScrollGreen.SetFont (&m_fontMain, FALSE); m_ctlVScrollGreen.SetScrollRange (0, 255, TRUE); m_ctlVScrollBlue.Create (WS_CHILD | WS_VISIBLE | WS_TABSTOP | SBS_VERT, rect, this, (UINT) 3); m_ctlVScrollBlue.SetFont (&m_fontMain, FALSE); m_ctlVScrollBlue.SetScrollRange (0, 255, TRUE); m_ctlPushButtonRed.Create ("&Punainen", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_DEFPUSHBUTTON, rect, this, (UINT) 1); // painonappi m_ctlPushButtonRed.SetFont (&m_fontMain, FALSE); m_ctlPushButtonRed.SetFocus (); m_ctlPushButtonGreen.Create ("&Vihreä", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON, rect, this, (UINT) 2); // painonappi m_ctlPushButtonGreen.SetFont (&m_fontMain, FALSE); m_ctlPushButtonBlue.Create ("&Sininen", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_PUSHBUTTON, rect, this, (UINT) 3); // painonappi m_ctlPushButtonBlue.SetFont (&m_fontMain, FALSE); rect.SetRect(25, 25, 145, 50); m_ctlHotkey.Create (WS_CHILD /*| WS_VISIBLE*/, rect, this, 1); // hotkey, näkymätön m_ctlHotkey.SetHotKey (VK_F12, HOTKEYF_CONTROL); // asettaa hotkey-yhdistemän CTRL+F12 WORD wKeyAndShift = UINT (m_ctlHotkey.GetHotKey( )); // hakee kotkey-yhdistelmän this->SendMessage (WM_SETHOTKEY, wKeyAndShift); // asettaa kotkey-yhdistelmän voimaan return 0; // kaikki hyvin, 0 palautuu } void CMainWindow::OnGetMinMaxInfo (MINMAXINFO* pMMI) // lomakkeen koon esto { pMMI->ptMinTrackSize.x = 400; // lomakkeen minimileveys ja... pMMI->ptMinTrackSize.y = 200; // ...minimikorkeus } void CMainWindow::OnSize (UINT tyyli, int cx, int cy) // lomakkeen koonmuutostapahtuma { m_ctlGroupBox.MoveWindow (10, 10, cx-20, cy-20, TRUE); // siirtää kehyskontrollin oikeaan paikkaan m_ctlVScrollRed.MoveWindow (cx-227, 40, 20, cy-100, TRUE); m_ctlVScrollGreen.MoveWindow (cx-147, 40, 20, cy-100, TRUE); m_ctlVScrollBlue.MoveWindow (cx-67, 40, 20, cy-100, TRUE); m_ctlPushButtonRed.MoveWindow (cx-255, cy-40, 75, 25, TRUE); m_ctlPushButtonGreen.MoveWindow (cx-175, cy-40, 75, 25, TRUE); m_ctlPushButtonBlue.MoveWindow (cx-95, cy-40, 75, 25, TRUE); } void CMainWindow::OnPaint () // lomakkeen piirtotapahtuma { CPaintDC dc (this); // luo piirtopintaolion CPen pen (PS_SOLID, 16, RGB (m_ctlVScrollRed.GetScrollPos (), m_ctlVScrollGreen.GetScrollPos (), m_ctlVScrollBlue.GetScrollPos ())); CPen* pOldPen = dc.SelectObject (&pen); dc.SelectStockObject (NULL_BRUSH); CRect windowrect; GetClientRect (windowrect); CRect circlerect; circlerect.SetRect (windowrect.left+40, windowrect.top+60, windowrect.right-285, windowrect.bottom-60); circlerect.DeflateRect (16, 16); dc.Ellipse (circlerect); } void CMainWindow::OnVScroll (UINT code, UINT oldposition, CScrollBar* scrollbar) // vierityspalkkia muutettu { int vpositio = 0; // palkkien tila switch (code) // tässä palautuu tapahtumatunnus { case SB_ENDSCROLL : vpositio = scrollbar->GetScrollPos (); break; case SB_BOTTOM : vpositio = 255; break; case SB_PAGEDOWN : // palkin kuilua napautettiin vpositio = scrollbar->GetScrollPos () + 10; // muutetaan palkin asema uudelleen break; case SB_LINEDOWN : // palkin vieritysnappia napautettiin vpositio = min(255, scrollbar->GetScrollPos () + 1); // positio ei saa liukua ohi 255 break; case SB_PAGEUP : // palkin kuilua napautettiin vpositio = scrollbar->GetScrollPos () - 10; // muutetaan palkin asema uudelleen break; case SB_LINEUP : // palkin vieritysnappia napautettiin vpositio = max(0, scrollbar->GetScrollPos () - 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; } scrollbar->SetScrollPos (vpositio, TRUE) ; // asetetaan palkin asemaksi paikka johon käyttäjä hissin siirsi CRect windowrect; GetClientRect (windowrect); CRect circlerect; circlerect.SetRect (windowrect.left+40, windowrect.top+60, windowrect.right-285, windowrect.bottom-60); InvalidateRect (circlerect, TRUE); } void CMainWindow::OnButtonRedClicked () // Punainen -nappia painetaan { m_ctlVScrollRed.SetScrollPos (255); m_ctlVScrollGreen.SetScrollPos (0); m_ctlVScrollBlue.SetScrollPos (0); CRect windowrect; GetClientRect (windowrect); CRect circlerect; circlerect.SetRect (windowrect.left+40, windowrect.top+60, windowrect.right-285, windowrect.bottom-60); InvalidateRect (circlerect, TRUE); } void CMainWindow::OnButtonGreenClicked () // Vihreä -nappia painetaan { m_ctlVScrollRed.SetScrollPos (0); m_ctlVScrollGreen.SetScrollPos (255); m_ctlVScrollBlue.SetScrollPos (0); CRect windowrect; GetClientRect (windowrect); CRect circlerect; circlerect.SetRect (windowrect.left+40, windowrect.top+60, windowrect.right-285, windowrect.bottom-60); InvalidateRect (circlerect, TRUE); } void CMainWindow::OnButtonBlueClicked () // Sininen -nappia painetaan { m_ctlVScrollRed.SetScrollPos (0); m_ctlVScrollGreen.SetScrollPos (0); m_ctlVScrollBlue.SetScrollPos (255); CRect windowrect; GetClientRect (windowrect); CRect circlerect; circlerect.SetRect (windowrect.left+40, windowrect.top+60, windowrect.right-285, windowrect.bottom-60); InvalidateRect (circlerect, TRUE); } BOOL CMainWindow::PreTranslateMessage (MSG* pMsg) // sanomien esikäsittely { return ::IsDialogMessage (m_hWnd, pMsg); // DialogMessage syntyy tabulaattorilla ja ALT+'merkki' yhdistelmällä }