Files
GdCpp12/staticOnly/KsMFC/CDlgDownCnt.cpp

112 lines
2.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
// CDlgDownCnt.cpp: 实现文件
//
#include "pch.h"
#include "CDlgDownCnt.h"
#define IDC_STATIC_DOWNCNT 1001
#define IDC_STATIC_INFO 1002
// CDlgDownCnt 对话框
IMPLEMENT_DYNAMIC(CDlgDownCnt, CBCGPDialog)
CDlgDownCnt::CDlgDownCnt(const std::wstring& str, int downcnt)
: CBCGPDialog(nullptr, nullptr)
, infoStr(str)
, downCnt(downcnt)
{
EnableVisualManagerStyle();
}
CDlgDownCnt::~CDlgDownCnt()
{
}
void CDlgDownCnt::DoDataExchange(CDataExchange* pDX)
{
CBCGPDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CDlgDownCnt, CBCGPDialog)
ON_WM_TIMER()
END_MESSAGE_MAP()
// CDlgDownCnt 消息处理程序
void CDlgDownCnt::OnTimer(UINT_PTR nIDEvent)
{
downCnt--;
if (downCnt <= 0) {
KillTimer(1);
EndDialog(0);
}
SetDlgItemInt(IDC_STATIC_DOWNCNT, downCnt);
CBCGPDialog::OnTimer(nIDEvent);
}
BOOL CDlgDownCnt::OnInitDialog()
{
CBCGPDialog::OnInitDialog();
// 获取窗口大小
CRect rc;
GetWindowRect(rc);
// 窗口四周保留32像素边界然后labelCount、labelInfo纵向排列各占一半高度。
int margin = globalUtils.ScaleByDPI(32) ;
int halfHeight = (rc.Height() - 2 * margin) / 2;
// 设置labelCount的位置
CRect rcCount = CRect(margin, margin, rc.Width() - margin, margin + halfHeight);
// 设置labelInfo的位置
CRect rcInfo = CRect(margin, margin + halfHeight, rc.Width() - margin, rc.Height() - margin);
if (!labelCount.Create(_T(""), WS_CHILD | WS_VISIBLE | SS_CENTER, rcCount, this, IDC_STATIC_DOWNCNT))
{
return FALSE;
}
if (!labelInfo.Create(_T(""), WS_CHILD | WS_VISIBLE | SS_CENTER, rcInfo, this, IDC_STATIC_INFO))
{
return FALSE;
}
m_InfoFont.CreatePointFont(180, L"宋体");
m_CountFont.CreatePointFont(240, L"宋体");
labelInfo.SetFont(&m_InfoFont);
labelCount.SetFont(&m_CountFont);
labelInfo.SetWindowText(infoStr.c_str());
SetDlgItemInt(IDC_STATIC_DOWNCNT, downCnt);
SetTimer(1, 1000, NULL);
return TRUE; // return TRUE unless you set the focus to a control
// 异常: OCX 属性页应返回 FALSE
}
BOOL CDlgDownCnt::CreateDialogTemplate()
{
CRect rect(0, 0, 400, 200);
CString strCaption = _T("倒计时");
DLGTEMPLATE* pTemplate = dlgTemplate.CreateTemplate(WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SETFONT, rect, strCaption);
if (!InitModalIndirect(pTemplate, NULL))
{
return FALSE;
}
return TRUE;
}
void runDownCntDlg(const std::wstring& str, int downcnt)
{
CDlgDownCnt dlg(str, downcnt);
dlg.CreateDialogTemplate();
dlg.DoModal();
}