// CMyStatusbar.cpp: 实现文件 // #include "stdafx.h" #include "Servo.h" #include "CMyStatusbar.h" #include "afxdialogex.h" // CMyStatusbar 对话框 IMPLEMENT_DYNAMIC(CMyStatusbar, CDialogEx) CMyStatusbar::CMyStatusbar(CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_STATUSBAR, pParent) { m_crBkgnd = STATUSBAR_BK_NORMAL; } CMyStatusbar::~CMyStatusbar() { } void CMyStatusbar::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CMyStatusbar, CDialogEx) ON_WM_CTLCOLOR() ON_WM_DESTROY() ON_WM_SIZE() END_MESSAGE_MAP() // CMyStatusbar 消息处理程序 void CMyStatusbar::setBkgnd(COLORREF color) { if (m_brBkgnd.GetSafeHandle() != nullptr) { m_brBkgnd.DeleteObject(); } m_brBkgnd.CreateSolidBrush(color); Invalidate(); UpdateWindow(); } void CMyStatusbar::setRunTimeText(const char* pszText) { SetDlgItemText(IDC_LABEL_RUNTIME, pszText); } BOOL CMyStatusbar::OnInitDialog() { CDialogEx::OnInitDialog(); // TODO: 在此添加额外的初始化 return TRUE; // return TRUE unless you set the focus to a control // 异常: OCX 属性页应返回 FALSE } HBRUSH CMyStatusbar::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor); // TODO: 在此更改 DC 的任何特性 if (nCtlColor == CTLCOLOR_STATIC) { pDC->SetBkMode(TRANSPARENT); pDC->SetBkColor(m_crBkgnd); pDC->SetTextColor(RGB(255, 255, 255)); } if (m_brBkgnd.GetSafeHandle() == nullptr) { m_brBkgnd.CreateSolidBrush(m_crBkgnd); } return (HBRUSH)m_brBkgnd; } void CMyStatusbar::OnDestroy() { CDialogEx::OnDestroy(); // TODO: 在此处添加消息处理程序代码 } void CMyStatusbar::OnSize(UINT nType, int cx, int cy) { CDialogEx::OnSize(nType, cx, cy); if (nullptr == GetDlgItem(IDC_LABEL_RUNTIME)) return; Resize(); } void CMyStatusbar::Resize() { CRect rcClient, rcItem; CWnd* pItem = nullptr; int x; GetClientRect(&rcClient); x = 120; pItem = GetDlgItem(IDC_LABEL_RUNTIME); pItem->GetClientRect(rcItem); pItem->MoveWindow(x, (rcClient.Height() - rcItem.Height()) / 2, rcItem.Width(), rcItem.Height()); }