// 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;
|
m_bDelayClose = FALSE;
|
}
|
|
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)
|
{
|
if (!m_bDelayClose) {
|
m_bDelayClose = TRUE;
|
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());
|
}
|