www.gusucode.com > VC++曲线绘制源码——人体生命曲线-源码程序 > VC++曲线绘制源码——人体生命曲线-源码程序/code/BioGraphDlg.cpp
// BioGraphDlg.cpp : implementation file // Download by http://www.NewXing.com #include "stdafx.h" #include "BioGraph.h" #include "BioGraphDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CBioGraphDlg dialog CBioGraphDlg::CBioGraphDlg(CWnd* pParent /*=NULL*/) : CDialog(CBioGraphDlg::IDD, pParent) , m_bornDate(CTime(1980, 1, 1, 0, 0, 0)) , m_TestDate(CTime::GetCurrentTime()) , m_evalText(_T("")) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CBioGraphDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_DateTimeCtrl(pDX, IDC_BORN_DATETIME, m_bornDate); DDX_DateTimeCtrl(pDX, IDC_TEST_DATETIME, m_TestDate); DDX_Text(pDX, IDC_EVAL, m_evalText); } BEGIN_MESSAGE_MAP(CBioGraphDlg, CDialog) //{{AFX_MSG_MAP(CBioGraphDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_PREVMONTH, OnBnClickedPrevmonth) ON_BN_CLICKED(IDC_CURRENTMONTH, OnBnClickedCurrentmonth) ON_BN_CLICKED(IDC_NEXTMONTH, OnBnClickedNextmonth) ON_NOTIFY(DTN_DATETIMECHANGE, IDC_BORN_DATETIME, OnDtnDatetimechangeBornDatetime) ON_NOTIFY(DTN_DATETIMECHANGE, IDC_TEST_DATETIME, OnDtnDatetimechangeTestDatetime) ON_WM_CTLCOLOR() //}}AFX_MSG_MAP END_MESSAGE_MAP() // CBioGraphDlg 消息处理程序 BOOL CBioGraphDlg::OnInitDialog() { CDialog::OnInitDialog(); // 将\“关于...\”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 ShowWindow(SW_MINIMIZE); // TODO:在此添加额外的初始化代码 m_bioGraph = new BioGraphCtrl; m_bioGraph->Create(NULL, "Hi", WS_CHILD | WS_VISIBLE, CRect(125, 50, 660,370), this, 10001); return TRUE; // 除非设置了控件的焦点,否则返回 TRUE } void CBioGraphDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CBioGraphDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0); // 使图标在工作矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); //-->>3D字体效果 CFont font; font.CreateFont (20, 17, 0, 0, FW_BLACK, 0, 0, 0, ANSI_CHARSET, OUT_STROKE_PRECIS, CLIP_STROKE_PRECIS, DRAFT_QUALITY, VARIABLE_PITCH | FF_SWISS,_T("Arial")); OutText(155, 14, "人体生命曲线 2.1 版", RGB(0,255,0), RGB(0,0,0), &font); OutText(154, 13, "人体生命曲线 2.1 版", RGB(255,255,255), RGB(0,0,0), &font); OutText(153, 12, "人体生命曲线 2.1 版", RGB(255,0,0), RGB(0,0,0), &font); //--<<3D字体效果 CFont font1; font1.CreateFont (16, 8, 0, 0, FW_BLACK, 0, 0, 0, ANSI_CHARSET, OUT_STROKE_PRECIS, CLIP_STROKE_PRECIS, DRAFT_QUALITY, VARIABLE_PITCH | FF_SWISS,_T("Arial")); OutText(5, 50, "公历出生日期:", RGB(0X00,0XD4,0XD8),RGB(0,0,0), &font1); OutText(5, 120, "公历查询日期:", RGB(0X00,0XD4,0XD8), RGB(0,0,0), &font1); } } //当用户拖动最小化窗口时系统调用此函数取得光标显示。 HCURSOR CBioGraphDlg::OnQueryDragIcon() { return static_cast<HCURSOR>(m_hIcon); } void CBioGraphDlg::OnBnClickedPrevmonth() { m_bioGraph->GotoPrevMonth(); } void CBioGraphDlg::OnBnClickedCurrentmonth() { m_bioGraph->GotoCurrentMonth(); } void CBioGraphDlg::OnBnClickedNextmonth() { m_bioGraph->GotoNextMonth(); } void CBioGraphDlg::OnDtnDatetimechangeBornDatetime(NMHDR *pNMHDR, LRESULT *pResult) { UpdateData(TRUE); //更新日期数据 m_bioGraph->SetBornDate(m_bornDate); } void CBioGraphDlg::OnDtnDatetimechangeTestDatetime(NMHDR *pNMHDR, LRESULT *pResult) { UpdateData(TRUE); //更新日期数据 m_bioGraph->SetStartDate(CTime (m_TestDate.GetYear(), m_TestDate.GetMonth(), 1, 0, 0, 0)); m_bioGraph->SetEndDate(); m_bioGraph->SetFocusDate(m_TestDate); CString str = m_bioGraph->EvalString(m_bioGraph->GetFocusDate()); m_evalText = str; m_bioGraph->Invalidate(); UpdateData(false); } BOOL CBioGraphDlg::OnWndMsg(UINT message, WPARAM wParam, LPARAM lParam, LRESULT* pResult) { if (wParam == 10001) { switch (message) { case WM_BIO_SELECTCHANGING: { CString str = m_bioGraph->EvalString(m_bioGraph->GetFocusDate()); m_evalText = str; UpdateData(false); break; } case WM_BIO_SELECTCHANGED: { CString str = m_bioGraph->EvalString(m_bioGraph->GetFocusDate()); m_evalText = str; UpdateData(false); break; } default: break; } } return CDialog::OnWndMsg(message, wParam, lParam, pResult); } //文本输出处理函数 void CBioGraphDlg::OutText(int x, int y, CString str, long textColor,long bkColor,CFont *font) { CClientDC dc(this); dc.SelectObject(font); dc.SetBkMode(TRANSPARENT); dc.SetTextColor(textColor); dc.SetBkColor(bkColor); dc.TextOut(x, y, str); ReleaseDC(&dc); } HBRUSH CBioGraphDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); //-->>设置对话框背景颜色 static CBrush brush(RGB(0,0,0)); hbr = brush; //--<<设置对话框背景颜色 if (CTLCOLOR_STATIC == nCtlColor) { pDC->SetBkColor(RGB(0,0,0)); pDC->SetTextColor(RGB(250,250,250)); } // TODO: Return a different brush if the default is not desired return hbr; }