/****************/ /* thello.cpp */ /****************/ // Ohjelma tyypillisten kontrollien testaamiseksi /vl-96 // Projektiin vain tämä tiedosto. #include #define MY_BUTTON 175 /* Nappulan tunniste */ #define MY_EDIT 176 /* Tekstikentän (Edit) tunniste */ #define MY_BAR 177 /* Oman likusäätimen tunniste */ #define MY_STATIC 178 /* 1. vakiotekstin tunniste = liun arvo */ #define MY_BARS 179 /* apuvakio seuraaville */ #define MY_SVER (MY_BARS+SB_VERT) /* 2. tekstikenän tunniste = pystyliun */ #define MY_SHOR (MY_BARS+SB_HORZ) /* 3. tekstikentän tunniste = vaakaliun*/ #define MIN_BAR 0 #define MAX_BAR 50 //------------------------------------------------------------------------------ // VAROKAA!!! MFC:n Rect on rajat, ei nurkka ja koko kuten OWL:ssä class TRect : public CRect { public: TRect(int x,int y,int dx, int dy) : CRect(x,y,x+dx,y+dy) {}; }; //------------------------------------------------------------------------------ class CIntLabel : public CStatic { // Oma luokka kokonaislukuikkunalle int value; public: BOOL PreCreateWindow(CREATESTRUCT &cs) { cs.style |= SS_RIGHT; value = 0; return TRUE; } int set(int i) { char s[20]; value = i; itoa(i,s,10); SetWindowText(s); return i; } int operator=(int i) { return set(i); } operator int() { return value; } int operator++() { set(value+1); return value; } int operator++(int) { int i=value; set(value+1); return i; } int operator+=(int i) { set(value+i); return value; } int operator-=(int i) { set(value-i); return value; } }; #define VIS (WS_CHILD | WS_VISIBLE) //------------------------------------------------------------------------------ class CMainWindow : public CFrameWnd { CButton my_button; CIntLabel my_value,my_shor,my_sver; CEdit my_edit; CScrollBar my_bar; public: CMainWindow() { Create(NULL,"Hello World!",WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL); MoveWindow(50,50,300,300); my_button.Create("Windows Hello",VIS,TRect(10, 30,100, 30),this,MY_BUTTON); my_value.Create("0",VIS,TRect( 40, 70, 40, 30),this,MY_STATIC); my_shor.Create ("0",VIS,TRect( 80, 70, 40, 30),this,MY_SHOR); my_sver.Create ("0",VIS,TRect(120, 70, 40, 30),this,MY_SVER); my_edit.Create (VIS | WS_BORDER,TRect( 10,110,100, 40),this,MY_EDIT); my_bar.Create (VIS | SBS_VERT ,TRect(200, 10, 30,200),this,MY_BAR); my_bar.SetScrollRange(MIN_BAR,MAX_BAR); // Tämä toimii MFC:ssä SetScrollRange(SB_VERT,MIN_BAR,2*MAX_BAR,TRUE); SetScrollRange(SB_HORZ,MIN_BAR,3*MAX_BAR,TRUE); } afx_msg void OnPaint() { CPaintDC dc(this); dc.TextOut(10,10,"Hello world!"); } afx_msg void BNMyButtonClicked() { my_value++; } afx_msg void ENMyEditChange() { my_value++; } afx_msg void ENMyEditKillFocus() { char s[100]; my_edit.GetWindowText(s,sizeof(s)); SetWindowText(s); } afx_msg void OnVScroll(UINT nCode, UINT nPos, CScrollBar *pScrollBar); afx_msg void OnHScroll(UINT nCode, UINT nPos, CScrollBar *pScrollBar); DECLARE_MESSAGE_MAP() }; int NewScrollVal(int val, int nCode, int nPos) { switch ( nCode ) { // HUOM! Päätyjen ylitykset huolehtimatta! case SB_BOTTOM : val = MAX_BAR; break; case SB_TOP : val = MIN_BAR; break; case SB_LINEDOWN : val++; break; case SB_PAGEDOWN : val+=10; break; case SB_LINEUP : val--; break; case SB_PAGEUP : val-=10; break; case SB_THUMBPOSITION : case SB_THUMBTRACK : val = nPos; break; } return val; } void CMainWindow::OnVScroll(UINT nCode, UINT nPos, CScrollBar *pScrollBar) { my_sver = NewScrollVal(my_sver,nCode,nPos); if ( pScrollBar == NULL ) SetScrollPos(SB_VERT,my_sver,TRUE); // Ikkunan bar else pScrollBar->SetScrollPos(my_sver,TRUE); // Oma bar } void CMainWindow::OnHScroll(UINT nCode, UINT nPos, CScrollBar *pScrollBar) { my_shor = NewScrollVal(my_shor,nCode,nPos); if ( pScrollBar == NULL ) SetScrollPos(SB_HORZ,my_shor,TRUE); // Ikkunan bar else pScrollBar->SetScrollPos(my_shor,TRUE); // Oma bar } BEGIN_MESSAGE_MAP( CMainWindow, CFrameWnd ) ON_WM_PAINT() ON_COMMAND(MY_BUTTON, BNMyButtonClicked) ON_EN_CHANGE(MY_EDIT,ENMyEditChange) ON_EN_KILLFOCUS(MY_EDIT,ENMyEditKillFocus) ON_WM_VSCROLL() ON_WM_HSCROLL() END_MESSAGE_MAP() //------------------------------------------------------------------------------ class CTHelloApp : public CWinApp { public: virtual BOOL InitInstance() { m_pMainWnd = new CMainWindow(); m_pMainWnd->ShowWindow(m_nCmdShow); m_pMainWnd->UpdateWindow(); return TRUE; } }; CTHelloApp THelloApp;