// MsgDlg.cpp: 实现文件 // #include "stdafx.h" #include "Servo.h" #include "MsgDlg.h" #include "afxdialogex.h" // CMsgDlg 对话框 IMPLEMENT_DYNAMIC(CMsgDlg, CDialogEx) CMsgDlg::CMsgDlg(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_DIALOG_MSG, pParent) { m_nCompleteCode = 0; m_dwData = 0; m_dwDataEx = 0; m_crBkgnd = CR_MSGBOX_BKGND; m_brBkgnd.CreateSolidBrush(m_crBkgnd); m_crTitle = CR_MSGBOX_TITLE; m_crMessage = CR_MSGBOX_MESSAGE; m_nIcon = MSG_BOX_TIP; } CMsgDlg::CMsgDlg(CString strTitle, CString strMessage) : CDialogEx(IDD_DIALOG_MSG, NULL) { m_strTitle = strTitle; m_strMessage = strMessage; m_crBkgnd = CR_MSGBOX_BKGND; m_brBkgnd.CreateSolidBrush(m_crBkgnd); m_crTitle = CR_MSGBOX_TITLE; m_crMessage = CR_MSGBOX_MESSAGE; m_nIcon = MSG_BOX_TIP; } CMsgDlg::CMsgDlg(int nIcon, CString strTitle, CString strMessage) : CDialogEx(IDD_DIALOG_MSG, NULL) { m_strTitle = strTitle; m_strMessage = strMessage; m_crBkgnd = CR_MSGBOX_BKGND; m_brBkgnd.CreateSolidBrush(m_crBkgnd); m_crTitle = CR_MSGBOX_TITLE; m_crMessage = CR_MSGBOX_MESSAGE; m_nIcon = nIcon; } CMsgDlg::~CMsgDlg() { } void CMsgDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CMsgDlg, CDialogEx) ON_WM_TIMER() ON_WM_CTLCOLOR() ON_WM_SIZE() END_MESSAGE_MAP() // CMsgDlg 消息处理程序 void CMsgDlg::SetCompleteCode(int code) { m_nCompleteCode = code; CWnd* pProgressCtrl = GetDlgItem(IDC_PROGRESS1); if(pProgressCtrl != nullptr) pProgressCtrl->ShowWindow(SW_HIDE); } int CMsgDlg::GetCompleteCode() { return m_nCompleteCode; } void CMsgDlg::SetData(DWORD_PTR dwData) { m_dwData = dwData; } DWORD_PTR CMsgDlg::GetData() { return m_dwData; } void CMsgDlg::SetDataEx(DWORD_PTR dwData) { m_dwDataEx = dwData; } DWORD_PTR CMsgDlg::GetDataEx() { return m_dwDataEx; } void CMsgDlg::SetIcon(int nIcon) { m_nIcon = nIcon; if (::IsWindow(m_hWnd)) { UpdateIcon(); } } void CMsgDlg::UpdateIcon() { static char* pszFile[] = { "msgbox_tip.ico", "msgbox_question.ico", "msgbox_warning.ico", "msgbox_error.ico", "msgbox_succeed.ico"}; if (MSG_BOX_TIP <= m_nIcon && m_nIcon <= MSG_BOX_SUCCEED) { CStatic* pStatic = (CStatic*)GetDlgItem(IDC_ICON_MAIN); if (pStatic != NULL) { CString strFile; strFile.Format(_T("%s\\res\\%s"), (LPTSTR)(LPCTSTR)theApp.m_strAppDir, pszFile[m_nIcon]); HICON hIcon = (HICON)LoadImage(AfxGetInstanceHandle(), strFile, IMAGE_ICON, 48, 48, LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_LOADFROMFILE); pStatic->SetIcon(hIcon); SetMarquee(TRUE, 1); } } } void CMsgDlg::SetTitle(CString strTitle) { m_strTitle = strTitle; if (::IsWindow(m_hWnd) && GetDlgItem(IDC_LABEL_TITLE) != NULL) { SetWindowText(m_strTitle); SetDlgItemText(IDC_LABEL_TITLE, m_strTitle); } } void CMsgDlg::SetMessage(CString strMessage) { m_strMessage = strMessage; if (::IsWindow(m_hWnd) && GetDlgItem(IDC_LABEL_MSG) != NULL) { SetDlgItemText(IDC_LABEL_MSG, m_strMessage); } } void CMsgDlg::SetMarquee(_In_ BOOL fMarqueeMode, _In_ int nInterval) { if (!::IsWindow(m_hWnd)) { return; } CProgressCtrl* pProgressCtrl = (CProgressCtrl*)GetDlgItem(IDC_PROGRESS1); if (pProgressCtrl != NULL) { pProgressCtrl->SendMessage(PBM_SETMARQUEE, (WPARAM)fMarqueeMode, (LPARAM)nInterval); if (!fMarqueeMode) { pProgressCtrl->ModifyStyle(PBS_MARQUEE, 0); pProgressCtrl->SetRange32(0, 100); pProgressCtrl->SetPos(0); } else { pProgressCtrl->ModifyStyle(0, PBS_MARQUEE); } } } void CMsgDlg::BeginThread(AFX_THREADPROC pfnThreadProc) { CWinThread* pThread = AfxBeginThread(pfnThreadProc, (LPVOID)this, THREAD_PRIORITY_NORMAL, 0, DEBUG_PROCESS); } void CMsgDlg::DelayClose(int nDelay) { SetTimer(1, nDelay, NULL); } void CMsgDlg::ShowCloseButton(BOOL bVisible) { if (::IsWindow(m_hWnd) && GetDlgItem(IDCANCEL) != NULL) { GetDlgItem(IDCANCEL)->ShowWindow(bVisible ? SW_SHOW : SW_HIDE); } } BOOL CMsgDlg::OnInitDialog() { CDialogEx::OnInitDialog(); SetWindowText(m_strTitle); SetDlgItemText(IDC_LABEL_TITLE, m_strTitle); SetDlgItemText(IDC_LABEL_MSG, m_strMessage); // 字体 HFONT hFontDefault = (HFONT)GetStockObject(DEFAULT_GUI_FONT); CFont* pFont = CFont::FromHandle(hFontDefault); LOGFONT lf; pFont->GetLogFont(&lf); lf.lfHeight -= 12; lf.lfWeight = FW_SEMIBOLD; m_fontTitle.CreateFontIndirect(&lf); GetDlgItem(IDC_LABEL_TITLE)->SetFont(&m_fontTitle); pFont->GetLogFont(&lf); lf.lfHeight -= 2; m_fontMsg.CreateFontIndirect(&lf); GetDlgItem(IDC_LABEL_MSG)->SetFont(&m_fontMsg); // 图标 UpdateIcon(); SetMarquee(TRUE, 1); MoveWindow(0, 0, 320, 268); CenterWindow(); Resize(); return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } void CMsgDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if (nIDEvent == 1) { KillTimer(1); PostMessage(WM_CLOSE); } CDialogEx::OnTimer(nIDEvent); } BOOL CMsgDlg::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 if (pMsg->message == WM_KEYDOWN) { if ((pMsg->wParam == VK_RETURN) || (pMsg->wParam == VK_ESCAPE) || (pMsg->wParam == VK_SPACE)) { return TRUE; } } return CDialogEx::PreTranslateMessage(pMsg); } HBRUSH CMsgDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); if (nCtlColor == CTLCOLOR_STATIC) { pDC->SetBkColor(m_crBkgnd); int nID = pWnd->GetDlgCtrlID(); if (nID == IDC_LABEL_TITLE) { pDC->SetTextColor(CR_MSGBOX_TITLE); } else if (nID == IDC_LABEL_MSG) { pDC->SetTextColor(CR_MSGBOX_MESSAGE); } } return m_brBkgnd; } void CMsgDlg::OnSize(UINT nType, int cx, int cy) { CDialogEx::OnSize(nType, cx, cy); if (GetDlgItem(IDC_LABEL_TITLE) == nullptr) return; Resize(); } void CMsgDlg::Resize() { int x = 28; int y = 28; CWnd* pItem; CRect rcClient, rcIcon, rcItem; GetClientRect(&rcClient); pItem = GetDlgItem(IDC_ICON_MAIN); pItem->GetWindowRect(&rcIcon); pItem->MoveWindow(x, y, rcIcon.Width(), rcIcon.Height()); x += rcIcon.Width(); x += 12; // title pItem->GetWindowRect(&rcIcon); ScreenToClient(&rcIcon); pItem = GetDlgItem(IDC_LABEL_TITLE); pItem->GetWindowRect(&rcItem); pItem->MoveWindow(x, rcIcon.top + rcIcon.Height() / 2 - rcItem.Height() / 2, rcClient.Width() - 24 - x, rcItem.Height()); x = rcIcon.left; y += rcIcon.Height(); y += 18; // msg pItem = GetDlgItem(IDC_LABEL_MSG); pItem->GetClientRect(&rcItem); pItem->MoveWindow(x, y, rcClient.Width() - 24 - x, rcItem.Height()); y = rcClient.bottom - 12; pItem = GetDlgItem(IDC_PROGRESS1); pItem->GetClientRect(&rcItem); pItem->MoveWindow(12, y - rcItem.Height(), rcClient.Width() - 24, rcItem.Height()); }