// CPageCtrlState.cpp: 实现文件
|
//
|
|
#include "stdafx.h"
|
#include "Servo.h"
|
#include "CPageCtrlState.h"
|
#include "afxdialogex.h"
|
#include "Common.h"
|
#include "Model.h"
|
#include "ColorTransfer.h"
|
|
|
// CPageCtrlState 对话框
|
|
IMPLEMENT_DYNAMIC(CPageCtrlState, CDialogEx)
|
|
CPageCtrlState::CPageCtrlState(CWnd* pParent /*=nullptr*/)
|
: CDialogEx(IDD_PROD_CTRL_STATE, pParent)
|
{
|
|
}
|
|
CPageCtrlState::~CPageCtrlState()
|
{
|
}
|
|
void CPageCtrlState::DoDataExchange(CDataExchange* pDX)
|
{
|
CDialogEx::DoDataExchange(pDX);
|
DDX_Control(pDX, IDC_BUTTON_OFFLINE, m_btnOffline);
|
DDX_Control(pDX, IDC_BUTTON_ONLINE_LOCAL, m_btnOnlineLocal);
|
DDX_Control(pDX, IDC_BUTTON_ONLINE_REMOTE, m_btnOnlineRemote);
|
}
|
|
|
BEGIN_MESSAGE_MAP(CPageCtrlState, CDialogEx)
|
ON_WM_CTLCOLOR()
|
ON_WM_SIZE()
|
ON_WM_DESTROY()
|
ON_BN_CLICKED(IDC_BUTTON_OFFLINE, &CPageCtrlState::OnBnClickedOffline)
|
ON_BN_CLICKED(IDC_BUTTON_ONLINE_LOCAL, &CPageCtrlState::OnBnClickedOnlineLocal)
|
ON_BN_CLICKED(IDC_BUTTON_ONLINE_REMOTE, &CPageCtrlState::OnBnClickedOnlineRemote)
|
END_MESSAGE_MAP()
|
|
|
// CPageCtrlState 消息处理程序
|
|
void CPageCtrlState::InitRxWindows()
|
{
|
IRxWindows* pRxWindows = RX_GetRxWindows();
|
if (m_pObserver == nullptr) {
|
m_pObserver = pRxWindows->allocObserver([this](IAny* pAny) -> void {
|
pAny->addRef();
|
const int code = pAny->getCode();
|
if (code == RX_CODE_CONTROL_STATE_CHANGED && ::IsWindow(m_hWnd)) {
|
UpdateButtonStyles();
|
}
|
pAny->release();
|
}, [&]() -> void {
|
// onComplete
|
}, [&](IThrowable* pThrowable) -> void {
|
// onError
|
pThrowable->printf();
|
});
|
|
theApp.m_model.getObservable()->observeOn(pRxWindows->mainThread())
|
->subscribe(m_pObserver);
|
}
|
}
|
|
void CPageCtrlState::ApplyButtonTheme(CBlButton& btn, bool active)
|
{
|
const COLORREF text = active ? RGB(255, 255, 255) : RGB(0, 0, 0);
|
const COLORREF normal = active ? RGB(34, 177, 76) : RGB(222, 222, 222);
|
const COLORREF hover = CColorTransfer::ApproximateColor(normal, active ? 0.08 : 0.05);
|
const COLORREF press = CColorTransfer::ApproximateColor(normal, active ? -0.10 : -0.12);
|
const COLORREF frame = active ? CColorTransfer::ApproximateColor(normal, -0.18) : RGB(168, 168, 168);
|
|
btn.SetRoundWidth(6);
|
btn.SetTextColor(BS_NORMAL, text);
|
btn.SetTextColor(BS_HOVER, text);
|
btn.SetTextColor(BS_PRESS, text);
|
btn.SetTextColor(BS_DISABLE, RGB(120, 120, 120));
|
|
btn.SetBkgndColor(BS_NORMAL, normal);
|
btn.SetBkgndColor(BS_HOVER, hover);
|
btn.SetBkgndColor(BS_PRESS, press);
|
btn.SetBkgndColor(BS_DISABLE, RGB(210, 210, 210));
|
|
btn.SetFrameColor(BS_NORMAL, frame);
|
btn.SetFrameColor(BS_HOVER, frame);
|
btn.SetFrameColor(BS_PRESS, frame);
|
btn.SetFrameColor(BS_DISABLE, RGB(180, 180, 180));
|
}
|
|
void CPageCtrlState::UpdateButtonStyles()
|
{
|
const auto state = theApp.m_model.getControlState();
|
ApplyButtonTheme(m_btnOffline, state == ControlState::OfflineEquipment || state == ControlState::OfflineHost);
|
ApplyButtonTheme(m_btnOnlineLocal, state == ControlState::OnlineLocal);
|
ApplyButtonTheme(m_btnOnlineRemote, state == ControlState::OnlineRemote);
|
|
Invalidate();
|
UpdateWindow();
|
}
|
|
BOOL CPageCtrlState::OnInitDialog()
|
{
|
CDialogEx::OnInitDialog();
|
|
// TODO: 在此添加额外的初始化
|
InitRxWindows();
|
UpdateButtonStyles();
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
// 异常: OCX 属性页应返回 FALSE
|
}
|
|
|
HBRUSH CPageCtrlState::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
|
{
|
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
|
|
// TODO: 在此更改 DC 的任何特性
|
|
// TODO: 如果默认的不是所需画笔,则返回另一个画笔
|
return hbr;
|
}
|
|
void CPageCtrlState::OnSize(UINT nType, int cx, int cy)
|
{
|
CDialogEx::OnSize(nType, cx, cy);
|
|
// TODO: 在此处添加消息处理程序代码
|
}
|
|
void CPageCtrlState::OnDestroy()
|
{
|
CDialogEx::OnDestroy();
|
|
// TODO: 在此处添加消息处理程序代码
|
}
|
|
void CPageCtrlState::OnBnClickedOffline()
|
{
|
theApp.m_model.setControlState(ControlState::OfflineEquipment);
|
}
|
|
void CPageCtrlState::OnBnClickedOnlineLocal()
|
{
|
theApp.m_model.setControlState(ControlState::OnlineLocal);
|
}
|
|
void CPageCtrlState::OnBnClickedOnlineRemote()
|
{
|
theApp.m_model.setControlState(ControlState::OnlineRemote);
|
}
|