#include #include "tehtava2.rh" #define WM_VALUE_CHANGED (WM_USER+1) //********************************************************************************************* class CIntDlg : public CDialog //********************************************************************************************* { int m_value; //Kentän arvo inttinä public: void SetData(int value) { m_value=value; }; //Aseta arvot void GetData(int &value) { value=m_value; }; //Palauta arvot virtual BOOL OnInitDialog() { CDialog::OnInitDialog(); //Kutsuu DoExchangea ja laittaa 0:n edittiin CEdit *edit = (CEdit *) GetDlgItem(IDC_VALUE); edit->SetFocus(); //Valinta alussa edittiin return FALSE; }; void DoDataExchange(CDataExchange* pDX); afx_msg void TextChanged() { CString Text; GetDlgItemText(IDC_VALUE,Text); if (Text.IsEmpty()) GetDlgItem(IDOK)->EnableWindow(FALSE); //Jos tyhjä, disabloi OK-button else { GetDlgItem(IDOK)->EnableWindow(TRUE); //Jos ei tyhjä, enabloi OK-button UpdateData(TRUE); GetParent()->PostMessage(WM_VALUE_CHANGED,(UINT)this,0); //Viesti pääikkunalle }; }; DECLARE_MESSAGE_MAP() }; BEGIN_MESSAGE_MAP(CIntDlg, CDialog) ON_EN_CHANGE(IDC_VALUE,TextChanged) //Käsittele editin EN_CHANGE viesti END_MESSAGE_MAP() //Käytetään hyväksi MFC:n valmiita makroja tietojen asettamiseksi //--------------------------------------------------------------- void CIntDlg::DoDataExchange(CDataExchange* pDX) //--------------------------------------------------------------- { CDialog::DoDataExchange(pDX); DDX_Text(pDX, IDC_VALUE, m_value); }; //********************************************************************************************* class COmaWin : public CFrameWnd //********************************************************************************************* { CIntDlg *pIntDlg; public: COmaWin() { Create(NULL,"Dialog Test"); pIntDlg = new CIntDlg; pIntDlg->Create(IDD_INTDLG,this); pIntDlg->SetData(0); pIntDlg->UpdateData(FALSE); }; virtual ~COmaWin() { if(pIntDlg) delete pIntDlg; }; afx_msg void OnRButtonDown( UINT nFlags, CPoint point ); afx_msg LONG DrawText(UINT wParam, LONG lParam); DECLARE_MESSAGE_MAP() }; //------------------------------------------------------------------------ afx_msg void COmaWin::OnRButtonDown( UINT nFlags, CPoint point ) //------------------------------------------------------------------------ { if(!pIntDlg) return; pIntDlg->ShowWindow(SW_SHOW); }; //------------------------------------------------------------------------ afx_msg LONG COmaWin::DrawText(UINT wParam, LONG lParam) //------------------------------------------------------------------------ { CIntDlg *pDlg = (CIntDlg*)wParam; CDC *pDC = GetDC(); CString Text; int value; CRect R; if(!pDC) return 0; GetClientRect(R); pDlg->GetData(value); Text.Format("Luku oli %d, heksana 0x%X",value,value); pDC->FillSolidRect(0,0,R.Width(),R.Height(),RGB(255,255,255)); pDC->TextOut(30,30,Text); ReleaseDC(pDC); return 0; }; BEGIN_MESSAGE_MAP(COmaWin,CFrameWnd) ON_WM_RBUTTONDOWN() ON_MESSAGE(WM_VALUE_CHANGED,DrawText) END_MESSAGE_MAP() //********************************************************************************************* class COmaApp : public CWinApp //********************************************************************************************* { virtual BOOL InitInstance() { COmaWin *p = new COmaWin; m_pMainWnd = p; p->ShowWindow(SW_SHOW); p->UpdateWindow(); return TRUE; }; }; COmaApp OmaApp;