// FirstStepDlg.cpp : 实现文件 // #include "stdafx.h" #include "FirstStep.h" #include "FirstStepDlg.h" #include "afxdialogex.h" #include "DialogDsn.h" #include "DialogDbInit.h" #include "ConfigLoader.h" #ifdef _DEBUG #define new DEBUG_NEW #endif #pragma region 关于对话框 // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() #pragma endregion // CFirstStepDlg 对话框 CFirstStepDlg::CFirstStepDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CFirstStepDlg::IDD, pParent), m_ActiveTab(SUB_NULL_ACTIVE) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_DevDlg[DEV_TYPE_IPO] = &m_DlgIpo; m_DevDlg[DEV_TYPE_EHANGCOM] = &m_DlgEhang; m_DevDlg[DEV_TYPE_FS] = &m_DlgFs; } /***************************************************************** **【函数名称】 initUI **【函数功能】 初始化UI **【参数】 **【返回值】 ****************************************************************/ bool CFirstStepDlg::__initUI( void ) { m_BtnMidWare.DrawTransparent(); m_BtnMidWare.DrawBorder(FALSE); m_BtnMidWare.SetBitmaps(IDB_BM_MW_2, 0, IDB_BM_MW_1); m_BtnMidWare.SizeToContent(); m_BtnDev.DrawTransparent(); m_BtnDev.DrawBorder(FALSE); m_BtnDev.SetBitmaps(IDB_BM_DEV_2, 0, IDB_BM_DEV_1); m_BtnDev.SizeToContent(); m_BtnLine.DrawTransparent(); m_BtnLine.DrawBorder(FALSE); m_BtnLine.SetBitmaps(IDB_BM_LINE_2, 0, IDB_BM_LINE_1); m_BtnLine.SizeToContent(); CWnd* pBg = GetDlgItem(IDC_STATIC_BG); ASSERT(pBg != NULL); m_BtnMidWare.SetWindowPos(pBg, 0, 0, 0, 0, SWP_NOSIZE | SWP_NOMOVE); CRect rt; m_BtnMidWare.GetWindowRect(rt); ScreenToClient(rt); m_BtnDev.SetWindowPos(pBg, rt.right, rt.top, 0, 0, SWP_NOSIZE); m_BtnDev.GetWindowRect(rt); ScreenToClient(rt); m_BtnLine.SetWindowPos(pBg, rt.right, rt.top, 0, 0, SWP_NOSIZE); if(!m_DlgMidWare.Create(CDialogCfgSys::IDD, this) || !m_DlgEhang.Create(CDialogCfgEhang::IDD, this) || !m_DlgIpo.Create(CDialogCfgIpo::IDD, this) || !m_DlgFs.Create(CDialogCfgFs::IDD, this) || !m_DlgLine.Create(CDialogCfgLine::IDD, this)) { MessageBox(_T("初始化配置界面出错,可能由于系统资源不足!"), MSGBOX_ERR_CAPTION); return false; } ((CStatic*)GetDlgItem(IDC_STATIC_BORDER))->GetWindowRect(rt); ScreenToClient(rt); rt.left += 4; rt.top += 4; rt.right -= 4; rt.bottom -= 4; m_DlgMidWare.SetWindowPos(NULL, rt.left, rt.top, rt.Width(), rt.Height(), SWP_NOZORDER | SWP_HIDEWINDOW); m_DlgMidWare.SetBackgroundColor(DLG_ITEM_BACKGND_COLOR); m_DlgEhang.SetWindowPos(NULL, rt.left, rt.top, rt.Width(), rt.Height(), SWP_NOZORDER | SWP_HIDEWINDOW); m_DlgEhang.SetBackgroundColor(DLG_ITEM_BACKGND_COLOR); m_DlgIpo.SetWindowPos(NULL, rt.left, rt.top, rt.Width(), rt.Height(), SWP_NOZORDER | SWP_HIDEWINDOW); m_DlgIpo.SetBackgroundColor(DLG_ITEM_BACKGND_COLOR); m_DlgFs.SetWindowPos(NULL, rt.left, rt.top, rt.Width(), rt.Height(), SWP_NOZORDER | SWP_HIDEWINDOW); m_DlgFs.SetBackgroundColor(DLG_ITEM_BACKGND_COLOR); m_DlgLine.SetWindowPos(NULL, rt.left, rt.top, rt.Width(), rt.Height(), SWP_NOZORDER | SWP_HIDEWINDOW); m_DlgLine.SetBackgroundColor(DLG_ITEM_BACKGND_COLOR); __SetActiveSubDlg(SUB_MW_ACTIVE); return true; } /***************************************************************** **【函数名称】 __SetActiveSubDlg **【函数功能】 设置激活的子对话框 **【参数】 **【返回值】 ****************************************************************/ void CFirstStepDlg::__SetActiveSubDlg( ACTIVE_SUB_DLG a_ActiveSubDlg ) { if(a_ActiveSubDlg == m_ActiveTab) return; switch(m_ActiveTab) { case SUB_MW_ACTIVE: { m_BtnMidWare.SetBitmaps(IDB_BM_MW_2, 0, IDB_BM_MW_1); m_DlgMidWare.ShowWindow(SW_HIDE); } break; case SUB_DEV_ACTIVE: { m_BtnDev.SetBitmaps(IDB_BM_DEV_2, 0, IDB_BM_DEV_1); m_DevDlg[CConfig::GetInstance().devType()]->ShowWindow(SW_HIDE); } break; case SUB_LINE_ACTIVE: { m_BtnLine.SetBitmaps(IDB_BM_LINE_2, 0, IDB_BM_LINE_1); m_DlgLine.ShowWindow(SW_HIDE); } break; case SUB_NULL_ACTIVE: break; default: ASSERT(FALSE); } switch(a_ActiveSubDlg) { case SUB_MW_ACTIVE: { m_BtnMidWare.SetBitmaps(IDB_BM_MW_2, 0); m_DlgMidWare.ShowWindow(SW_SHOW); } break; case SUB_DEV_ACTIVE: { m_BtnDev.SetBitmaps(IDB_BM_DEV_2, 0); m_DevDlg[CConfig::GetInstance().devType()]->ShowWindow(SW_SHOW); } break; case SUB_LINE_ACTIVE: { m_BtnLine.SetBitmaps(IDB_BM_LINE_2, 0); m_DlgLine.ShowWindow(SW_SHOW); } break; default: ASSERT(FALSE); } m_ActiveTab = a_ActiveSubDlg; } void CFirstStepDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_BTN_MIDWARE, m_BtnMidWare); DDX_Control(pDX, IDC_BTN_DEV, m_BtnDev); DDX_Control(pDX, IDC_BTN_LINE, m_BtnLine); } BEGIN_MESSAGE_MAP(CFirstStepDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BTN_CLOSE, &CFirstStepDlg::OnBnClickedBtnClose) ON_BN_CLICKED(IDC_BTN_SAVE, &CFirstStepDlg::OnBnClickedBtnSave) ON_BN_CLICKED(IDC_BTN_MIDWARE, &CFirstStepDlg::OnBnClickedBtnMidware) ON_BN_CLICKED(IDC_BTN_DEV, &CFirstStepDlg::OnBnClickedBtnDev) ON_COMMAND(ID_MENU_ABOUT, &CFirstStepDlg::OnMenuAbout) ON_COMMAND(ID_MENU_DB_SET, &CFirstStepDlg::OnMenuDbSet) ON_COMMAND(ID_MENU_DSN, &CFirstStepDlg::OnMenuDsn) ON_BN_CLICKED(IDC_BTN_LINE, &CFirstStepDlg::OnBnClickedBtnLine) END_MESSAGE_MAP() // CFirstStepDlg 消息处理程序 BOOL CFirstStepDlg::OnInitDialog() { CDialogEx::OnInitDialog(); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 // 设置主窗口标记 ::SetProp(m_hWnd, AfxGetApp()->m_pszAppName, (HANDLE)1); if(!__initUI()) { PostMessage(WM_CLOSE); return FALSE; } return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CFirstStepDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { if(nID == SC_CLOSE) { if(MessageBox(_T("确定要退出FirstStep吗?"), _T("确认退出"), MB_OKCANCEL) != IDOK) return; } CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CFirstStepDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast(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 { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CFirstStepDlg::OnQueryDragIcon() { return static_cast(m_hIcon); } BOOL CFirstStepDlg::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 if((pMsg->message == WM_KEYDOWN) && (pMsg->wParam == VK_ESCAPE || pMsg->wParam == VK_RETURN)) return TRUE; return CDialogEx::PreTranslateMessage(pMsg); } void CFirstStepDlg::OnBnClickedBtnClose() { // TODO: 在此添加控件通知处理程序代码 if(MessageBox(_T("确定要退出FirstStep吗?"), _T("确认退出"), MB_OKCANCEL) == IDOK) CDialogEx::OnCancel(); } void CFirstStepDlg::OnBnClickedBtnSave() { if(m_ActiveTab == SUB_MW_ACTIVE) { m_DlgMidWare.upload(); if(CConfigLoader::GetInstance().saveMidWareConfig()) MessageBox(_T("中间件配置信息保存成功"), MSGBOX_TIP_CAPTION); else { CString Error; Error.Format(_T("中间件配置信息保存失败, %s"), CConfigLoader::GetInstance().getLastError()); MessageBox(Error, MSGBOX_TIP_CAPTION); } } else if(m_ActiveTab == SUB_DEV_ACTIVE) { m_DevDlg[CConfig::GetInstance().devType()]->upload(); if(CConfigLoader::GetInstance().saveDevConfig()) MessageBox(_T("设备配置信息保存成功"), MSGBOX_TIP_CAPTION); else { CString Error; Error.Format(_T("设备配置信息保存失败, %s"), CConfigLoader::GetInstance().getLastError()); MessageBox(Error, MSGBOX_TIP_CAPTION); } } else if(m_ActiveTab == SUB_LINE_ACTIVE) { m_DlgLine.upload(); if(CConfigLoader::GetInstance().saveLineTrunkConfig()) MessageBox(_T("线路配置信息保存成功"), MSGBOX_TIP_CAPTION); else { CString Error; Error.Format(_T("线路配置信息保存失败, %s"), CConfigLoader::GetInstance().getLastError()); MessageBox(Error, MSGBOX_TIP_CAPTION); } } } void CFirstStepDlg::OnBnClickedBtnMidware() { // TODO: 在此添加控件通知处理程序代码 __SetActiveSubDlg(SUB_MW_ACTIVE); } void CFirstStepDlg::OnBnClickedBtnDev() { // TODO: 在此添加控件通知处理程序代码 __SetActiveSubDlg(SUB_DEV_ACTIVE); } void CFirstStepDlg::OnBnClickedBtnLine() { // TODO: 在此添加控件通知处理程序代码 __SetActiveSubDlg(SUB_LINE_ACTIVE); } void CFirstStepDlg::OnMenuAbout() { // TODO: 在此添加命令处理程序代码 CAboutDlg AboutDlg; AboutDlg.DoModal(); } void CFirstStepDlg::OnMenuDbSet() { // TODO: 在此添加命令处理程序代码 CDialogDbInit DbInitDlg; DbInitDlg.DoModal(); } void CFirstStepDlg::OnMenuDsn() { // TODO: 在此添加命令处理程序代码 CDialogDsn DsnDlg; DsnDlg.DoModal(); }