// 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::setBackgroundColor(COLORREF color)
|
{
|
if (m_brBkgnd.GetSafeHandle() != nullptr) {
|
m_brBkgnd.DeleteObject();
|
}
|
|
m_crBkgnd = color;
|
m_brBkgnd.CreateSolidBrush(color);
|
m_btnCurTask.SetFaceColor(m_crBkgnd);
|
m_btnCurTask.SetFrameColor(m_crBkgnd);
|
m_btnCurTask.SetFrameColor(BS_HOVER, CColorTransfer::ApproximateColor(m_crBkgnd, 0.05));
|
m_btnCurTask.SetFrameColor(BS_PRESS, CColorTransfer::ApproximateColor(m_crBkgnd, 0.12));
|
m_btnCurTask.SetBkgndColor(BS_HOVER, CColorTransfer::ApproximateColor(m_crBkgnd, 0.05));
|
m_btnCurTask.SetBkgndColor(BS_PRESS, CColorTransfer::ApproximateColor(m_crBkgnd, 0.12));
|
|
Invalidate();
|
UpdateWindow();
|
}
|
|
void CMyStatusbar::setForegroundColor(COLORREF cr)
|
{
|
m_crForeground = cr;
|
m_btnCurTask.SetTextColor(m_crForeground);
|
|
Invalidate();
|
UpdateWindow();
|
}
|
|
void CMyStatusbar::setRunTimeText(const char* pszText)
|
{
|
SetDlgItemText(IDC_LABEL_RUNTIME, pszText);
|
}
|
|
void CMyStatusbar::setJobText(const char* pszText)
|
{
|
SetDlgItemText(IDC_LABEL_JOBSTATE, pszText);
|
}
|
|
void CMyStatusbar::setCurTaskBtnText(const char* pszText)
|
{
|
SetDlgItemText(IDC_BUTTON_ROBOTTASK, pszText);
|
}
|
|
void CMyStatusbar::setCimBtnText(const char* pszText)
|
{
|
SetDlgItemText(IDC_BUTTON_CIM, pszText);
|
}
|
|
void CMyStatusbar::setCurTaskBtnColors(COLORREF face, COLORREF frame, COLORREF text)
|
{
|
m_btnCurTask.SetFaceColor(face);
|
m_btnCurTask.SetFrameColor(frame);
|
m_btnCurTask.SetTextColor(text);
|
Invalidate();
|
UpdateWindow();
|
}
|
|
void CMyStatusbar::setCimBtnColors(COLORREF face, COLORREF frame, COLORREF text)
|
{
|
m_btnCim.SetFaceColor(face);
|
m_btnCim.SetFrameColor(frame);
|
m_btnCim.SetTextColor(text);
|
Invalidate();
|
UpdateWindow();
|
}
|
|
BOOL CMyStatusbar::OnInitDialog()
|
{
|
CDialogEx::OnInitDialog();
|
|
|
m_btnCurTask.SubclassDlgItem(IDC_BUTTON_ROBOTTASK, this);
|
// m_btnCurTask.SetIcon(hIcon1, hIcon1, 24);
|
m_btnCurTask.SetFaceColor(m_crBkgnd);
|
m_btnCurTask.SetFrameColor(m_crBkgnd);
|
m_btnCurTask.SetFrameColor(BS_HOVER, RGB(218, 218, 218));
|
m_btnCurTask.SetFrameColor(BS_PRESS, RGB(168, 168, 168));
|
m_btnCurTask.SetTextColor(m_crForeground);
|
|
m_btnCim.SubclassDlgItem(IDC_BUTTON_CIM, this);
|
m_btnCim.SetFaceColor(m_crBkgnd);
|
m_btnCim.SetFrameColor(m_crBkgnd);
|
m_btnCim.SetFrameColor(BS_HOVER, RGB(218, 218, 218));
|
m_btnCim.SetFrameColor(BS_PRESS, RGB(168, 168, 168));
|
m_btnCim.SetTextColor(m_crForeground);
|
|
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(m_crForeground);
|
}
|
|
if (m_brBkgnd.GetSafeHandle() == nullptr) {
|
m_brBkgnd.CreateSolidBrush(m_crBkgnd);
|
}
|
|
return (HBRUSH)m_brBkgnd;
|
}
|
|
void CMyStatusbar::OnDestroy()
|
{
|
CDialogEx::OnDestroy();
|
|
// TODO: 在此处添加消息处理程序代码
|
}
|
|
BOOL CMyStatusbar::OnCommand(WPARAM wParam, LPARAM lParam)
|
{
|
CWnd* pItem;
|
CRect rcItem;
|
|
switch (LOWORD(wParam)) {
|
case IDC_BUTTON_ROBOTTASK:
|
pItem = GetDlgItem(IDC_BUTTON_ROBOTTASK);
|
pItem->GetWindowRect(rcItem);
|
GetParent()->SendMessage(ID_MSG_STATUSBAR_BTN_CLICKED, rcItem.left, LOWORD(wParam));
|
break;
|
case IDC_BUTTON_CIM:
|
pItem = GetDlgItem(IDC_BUTTON_CIM);
|
pItem->GetWindowRect(rcItem);
|
GetParent()->SendMessage(ID_MSG_STATUSBAR_BTN_CLICKED, rcItem.left, LOWORD(wParam));
|
break;
|
}
|
|
return CDialogEx::OnCommand(wParam, lParam);
|
}
|
|
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 = 20;
|
pItem = GetDlgItem(IDC_LABEL_RUNTIME);
|
pItem->GetClientRect(rcItem);
|
pItem->MoveWindow(x, (rcClient.Height() - rcItem.Height()) / 2, rcItem.Width(), rcItem.Height());
|
x += rcItem.Width();
|
|
x += 8;
|
pItem = GetDlgItem(IDC_LABEL_CUR_TASK_L);
|
pItem->GetClientRect(rcItem);
|
pItem->MoveWindow(x, (rcClient.Height() - rcItem.Height()) / 2, rcItem.Width(), rcItem.Height());
|
x += rcItem.Width();
|
|
x += 8;
|
pItem = GetDlgItem(IDC_BUTTON_ROBOTTASK);
|
pItem->GetClientRect(rcItem);
|
pItem->MoveWindow(x, (rcClient.Height() - rcItem.Height()) / 2, rcItem.Width(), rcItem.Height());
|
x += rcItem.Width();
|
|
x += 8;
|
pItem = GetDlgItem(IDC_LABEL_CIM);
|
pItem->GetClientRect(rcItem);
|
pItem->MoveWindow(x, (rcClient.Height() - rcItem.Height()) / 2, rcItem.Width(), rcItem.Height());
|
x += rcItem.Width();
|
|
x += 8;
|
pItem = GetDlgItem(IDC_BUTTON_CIM);
|
pItem->GetClientRect(rcItem);
|
pItem->MoveWindow(x, (rcClient.Height() - rcItem.Height()) / 2, rcItem.Width(), rcItem.Height());
|
x += rcItem.Width();
|
|
x += 8;
|
pItem = GetDlgItem(IDC_LABEL_JOBSTATE);
|
if (pItem != nullptr) {
|
pItem->GetClientRect(rcItem);
|
pItem->MoveWindow(x, (rcClient.Height() - rcItem.Height()) / 2, rcItem.Width(), rcItem.Height());
|
x += rcItem.Width();
|
}
|
}
|