// AlarmPopupDlg.cpp : ʵÏÖÎļþ
|
//
|
|
#include "stdafx.h"
|
#include "BoounionPLC.h"
|
#include "AlarmPopupDlg.h"
|
#include "afxdialogex.h"
|
#include "HorizontalLine.h"
|
#include "AlarmMonitor.h"
|
|
|
// CAlarmPopupDlg ¶Ô»°¿ò
|
|
IMPLEMENT_DYNAMIC(CAlarmPopupDlg, CDialogEx)
|
|
CAlarmPopupDlg::CAlarmPopupDlg(CWnd* pParent /*=NULL*/)
|
: CDialogEx(IDD_DIALOG_POPUP_ALARM, pParent)
|
{
|
m_pPLC = nullptr;
|
|
m_crBkgnd = RGB(225, 225, 225);
|
m_hbrBkgnd = nullptr;
|
m_pActiveAlarm = nullptr;
|
m_pObserver = nullptr;
|
}
|
|
CAlarmPopupDlg::~CAlarmPopupDlg()
|
{
|
}
|
|
void CAlarmPopupDlg::SetPLC(CPLC* pPLC)
|
{
|
ASSERT(pPLC);
|
m_pPLC = pPLC;
|
}
|
|
|
void CAlarmPopupDlg::DoDataExchange(CDataExchange* pDX)
|
{
|
CDialogEx::DoDataExchange(pDX);
|
}
|
|
|
BEGIN_MESSAGE_MAP(CAlarmPopupDlg, CDialogEx)
|
ON_WM_CTLCOLOR()
|
ON_WM_DESTROY()
|
ON_WM_SIZE()
|
ON_BN_CLICKED(IDC_BUTTON_CLOSE, &CAlarmPopupDlg::OnBnClickedButtonClose)
|
ON_BN_CLICKED(IDC_BUTTON_SOUND_OFF, &CAlarmPopupDlg::OnBnClickedButtonSoundOff)
|
ON_BN_CLICKED(IDC_BUTTON_ALARM_OFF, &CAlarmPopupDlg::OnBnClickedButtonAlarmOff)
|
END_MESSAGE_MAP()
|
|
|
// CAlarmPopupDlg ÏûÏ¢´¦Àí³ÌÐò
|
|
|
void CAlarmPopupDlg::InitRxWindows()
|
{
|
/* code */
|
// ¶©ÔÄÊý¾Ý
|
IRxWindows* pRxWindows = RX_GetRxWindows();
|
pRxWindows->enableLog(5);
|
if (m_pObserver == NULL) {
|
m_pObserver = pRxWindows->allocObserver([&](IAny* pAny) -> void {
|
// onNext
|
pAny->addRef();
|
int code = pAny->getCode();
|
if (RX_CODE_BEEP == code) {
|
int nValue = 0;
|
if (pAny->getIntValue("exCode", nValue)) {
|
SetButtonBackgroundColors(nValue == 0);
|
}
|
}
|
pAny->release();
|
}, [&]() -> void {
|
// onComplete
|
}, [&](IThrowable* pThrowable) -> void {
|
// onErrorm
|
pThrowable->printf();
|
});
|
|
theApp.m_model.getObservable()->observeOn(pRxWindows->mainThread())
|
->subscribe(m_pObserver);
|
}
|
}
|
|
BOOL CAlarmPopupDlg::OnInitDialog()
|
{
|
CDialogEx::OnInitDialog();
|
|
|
// ×ÖÌå
|
HFONT hFontDefault = (HFONT)GetStockObject(DEFAULT_GUI_FONT);
|
LOGFONT lf;
|
|
::GetObject(hFontDefault, sizeof(LOGFONT), &lf);
|
lf.lfHeight -= 8;
|
lf.lfWeight = 700;
|
m_fontTitle.CreateFontIndirect(&lf);
|
|
::GetObject(hFontDefault, sizeof(LOGFONT), &lf);
|
lf.lfHeight -= 8;
|
m_fontLevel.CreateFontIndirect(&lf);
|
|
::GetObject(hFontDefault, sizeof(LOGFONT), &lf);
|
lf.lfHeight -= 16;
|
m_fontName.CreateFontIndirect(&lf);
|
|
::GetObject(hFontDefault, sizeof(LOGFONT), &lf);
|
lf.lfHeight -= 8;
|
m_fontDescription.CreateFontIndirect(&lf);
|
|
GetDlgItem(IDC_LABEL_TITLE)->SetFont(&m_fontTitle);
|
GetDlgItem(IDC_LABEL_LEVEL)->SetFont(&m_fontLevel);
|
GetDlgItem(IDC_LABEL_NAME)->SetFont(&m_fontName);
|
GetDlgItem(IDC_LABEL_DESCRIPTION)->SetFont(&m_fontDescription);
|
|
|
// ͼ±ê
|
CString strIcon1;
|
HICON hIcon;
|
CStatic* pStatic;
|
|
strIcon1.Format(_T("%s\\Res\\Alarm_o_24.ico"), theApp.m_strAppDir);
|
pStatic = (CStatic*)GetDlgItem(IDC_ICON_TITLE);
|
hIcon = (HICON)::LoadImage(AfxGetInstanceHandle(),
|
strIcon1, IMAGE_ICON, 24, 24,
|
LR_LOADFROMFILE | LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
|
pStatic->SetIcon(hIcon);
|
|
strIcon1.Format(_T("%s\\Res\\Alarm_o_64.ico"), theApp.m_strAppDir);
|
pStatic = (CStatic*)GetDlgItem(IDC_ICON_ALARM);
|
hIcon = (HICON)::LoadImage(AfxGetInstanceHandle(),
|
strIcon1, IMAGE_ICON, 64, 64,
|
LR_LOADFROMFILE | LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
|
pStatic->SetIcon(hIcon);
|
|
|
// ¹Ø±Õ°´Å¥
|
strIcon1.Format(_T("%s\\Res\\close_blcak_24.ico"), theApp.m_strAppDir);
|
pStatic = (CStatic*)GetDlgItem(IDC_ICON_ALARM);
|
hIcon = (HICON)::LoadImage(AfxGetInstanceHandle(),
|
strIcon1, IMAGE_ICON, 128, 128,
|
LR_LOADFROMFILE | LR_DEFAULTCOLOR | LR_CREATEDIBSECTION | LR_DEFAULTSIZE);
|
m_btnClose.SubclassDlgItem(IDC_BUTTON_CLOSE, this);
|
m_btnClose.SetIcon(hIcon, hIcon, 24);
|
|
|
// ½â³ý¾¯¸æ°´Å¥
|
m_btnAlarmOff.SubclassDlgItem(IDC_BUTTON_ALARM_OFF, this);
|
m_btnAlarmOff.SetFrameColor(BS_NORMAL, BTN_ALARM_OFF_FRAME_NORMAL);
|
m_btnAlarmOff.SetFrameColor(BS_HOVER, BTN_ALARM_OFF_FRAME_HOVER);
|
m_btnAlarmOff.SetFrameColor(BS_PRESS, BTN_ALARM_OFF_FRAME_PRESS);
|
m_btnAlarmOff.SetBkgndColor(BS_NORMAL, BTN_ALARM_OFF_BKGND_NORMAL);
|
m_btnAlarmOff.SetBkgndColor(BS_HOVER, BTN_ALARM_OFF_BKGND_HOVER);
|
m_btnAlarmOff.SetBkgndColor(BS_PRESS, BTN_ALARM_OFF_BKGND_PRESS);
|
|
|
// ¾²Òô°´Å¥
|
bool bMute = FALSE;// theApp.m_model.getBonder().isMute();
|
m_btnSoundOff.SubclassDlgItem(IDC_BUTTON_SOUND_OFF, this);
|
m_btnSoundOff.SetFrameColor(BS_NORMAL, BTN_SOUND_OFF_FRAME_NORMAL);
|
m_btnSoundOff.SetFrameColor(BS_HOVER, BTN_SOUND_OFF_FRAME_HOVER);
|
m_btnSoundOff.SetFrameColor(BS_PRESS, BTN_SOUND_OFF_FRAME_PRESS);
|
SetButtonBackgroundColors(bMute);
|
|
// ºáÏß1
|
CHorizontalLine* pLine = CHorizontalLine::Hook(GetDlgItem(IDC_LINE1)->m_hWnd);
|
pLine->SetBkgndColor(RGB(225, 225, 225));
|
pLine->SetLineColor(RGB(168, 168, 168));
|
|
pLine = CHorizontalLine::Hook(GetDlgItem(IDC_LINE2)->m_hWnd);
|
pLine->SetBkgndColor(RGB(225, 225, 225));
|
pLine->SetLineColor(RGB(168, 168, 168));
|
|
|
InitRxWindows();
|
return TRUE; // return TRUE unless you set the focus to a control
|
// Òì³£: OCX ÊôÐÔÒ³Ó¦·µ»Ø FALSE
|
}
|
|
|
HBRUSH CAlarmPopupDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
|
{
|
HBRUSH hbr = CDialogEx::OnCtlColor(pDC, pWnd, nCtlColor);
|
|
if (nCtlColor == CTLCOLOR_STATIC) {
|
pDC->SetBkColor(m_crBkgnd);
|
pDC->SetTextColor(RGB(0, 0, 0));
|
}
|
|
if (m_hbrBkgnd == nullptr) {
|
m_hbrBkgnd = CreateSolidBrush(m_crBkgnd);
|
}
|
|
return m_hbrBkgnd;
|
}
|
|
|
void CAlarmPopupDlg::OnDestroy()
|
{
|
CDialogEx::OnDestroy();
|
|
if (m_hbrBkgnd != nullptr) {
|
::DeleteObject(m_hbrBkgnd);
|
}
|
|
if (m_pActiveAlarm != nullptr) {
|
m_pActiveAlarm->release();
|
m_pActiveAlarm = nullptr;
|
}
|
|
if (m_pObserver != nullptr) {
|
m_pObserver->unsubscribe();
|
m_pObserver = NULL;
|
}
|
}
|
|
|
void CAlarmPopupDlg::OnSize(UINT nType, int cx, int cy)
|
{
|
CDialogEx::OnSize(nType, cx, cy);
|
|
// TODO: ÔÚ´Ë´¦Ìí¼ÓÏûÏ¢´¦Àí³ÌÐò´úÂë
|
}
|
|
void CAlarmPopupDlg::AlarmOn()
|
{
|
ShowFirstAlarm();
|
}
|
|
void CAlarmPopupDlg::AlarmOff()
|
{
|
ShowFirstAlarm();
|
}
|
|
void CAlarmPopupDlg::OnBnClickedButtonClose()
|
{
|
// OnCancel();
|
ShowWindow(SW_HIDE);
|
}
|
|
void CAlarmPopupDlg::ShowFirstAlarm()
|
{
|
// È¡³ö¾¯¸æÐÅÏ¢Ê×Ìõ²¢ÏÔʾ
|
if (m_pActiveAlarm != nullptr) {
|
m_pActiveAlarm->release();
|
}
|
|
CString strText;
|
CAlarmMonitor* pAlarmMonitor = m_pPLC->getAlarmMonitor();
|
m_pActiveAlarm = pAlarmMonitor->getActiveAlarm();
|
if (m_pActiveAlarm != nullptr) {
|
m_pActiveAlarm->addRef();
|
SetDlgItemText(IDC_LABEL_NAME, pAlarmMonitor->getAlarmText(m_pActiveAlarm->getId()));
|
strText.Format(_T("ID: %d"), m_pActiveAlarm->getId());
|
SetDlgItemText(IDC_LABEL_LEVEL, strText);
|
ShowWindow(SW_SHOW);
|
}
|
else {
|
ShowWindow(SW_HIDE);
|
}
|
}
|
|
void CAlarmPopupDlg::SetButtonBackgroundColors(bool bMute)
|
{
|
if (!bMute) {
|
m_btnSoundOff.SetBkgndColor(BS_NORMAL, BTN_SOUND_OFF_BKGND_NORMAL);
|
m_btnSoundOff.SetBkgndColor(BS_HOVER, BTN_SOUND_OFF_BKGND_HOVER);
|
m_btnSoundOff.SetBkgndColor(BS_PRESS, BTN_SOUND_OFF_BKGND_PRESS);
|
m_btnSoundOff.Invalidate();
|
}
|
else {
|
m_btnSoundOff.SetBkgndColor(BS_NORMAL, BTN_SOUND_ON_BKGND_NORMAL);
|
m_btnSoundOff.SetBkgndColor(BS_HOVER, BTN_SOUND_ON_BKGND_HOVER);
|
m_btnSoundOff.SetBkgndColor(BS_PRESS, BTN_SOUND_ON_BKGND_PRESS);
|
m_btnSoundOff.Invalidate();
|
}
|
}
|
|
void CAlarmPopupDlg::OnBnClickedButtonSoundOff()
|
{
|
// TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë
|
if (m_pPLC == nullptr || !m_pPLC->isConnected()) {
|
return;
|
}
|
|
// Ïò PLC дÈëÐźÅ
|
bool bMute = m_pPLC->isMute();
|
char szWrite[4] = { 0x1, 0x0, 0x0, 0x0 };
|
szWrite[0] = !bMute;
|
m_pPLC->writeData(MC::M, 1003, szWrite, 2, [](IMcChannel* pChannel, int nAddr, DWORD nValue, int nFlag) {
|
if (nFlag == 0) {
|
TRACE("²Ù×÷³É¹¦£ºµØÖ·=1003\n", nAddr);
|
}
|
else {
|
TRACE("²Ù×÷ʧ°Ü£ºµØÖ·=1003£¬´íÎóÂë=%d\n", nFlag);
|
}
|
});
|
}
|
|
void CAlarmPopupDlg::OnBnClickedButtonAlarmOff()
|
{
|
// TODO: ÔÚ´ËÌí¼Ó¿Ø¼þ֪ͨ´¦Àí³ÌÐò´úÂë
|
if (m_pPLC == nullptr || !m_pPLC->isConnected()) {
|
return;
|
}
|
|
// Ïò PLC дÈëÐźÅ
|
char szWrite[4] = { 0x1, 0x0, 0x0, 0x0 };
|
m_pPLC->writeData(MC::M, 1009, szWrite, 2, [](IMcChannel* pChannel, int nAddr, DWORD nValue, int nFlag) {
|
if (nFlag == 0) {
|
TRACE("²Ù×÷³É¹¦£ºµØÖ·=1009\n", nAddr);
|
}
|
else {
|
TRACE("²Ù×÷ʧ°Ü£ºµØÖ·=1009£¬´íÎóÂë=%d\n", nFlag);
|
}
|
});
|
|
Sleep(500);
|
|
szWrite[0] = 0x0;
|
m_pPLC->writeData(MC::M, 1009, szWrite, 2, [](IMcChannel* pChannel, int nAddr, DWORD nValue, int nFlag) {
|
if (nFlag == 0) {
|
TRACE("²Ù×÷³É¹¦£ºµØÖ·=1009\n", nAddr);
|
}
|
else {
|
TRACE("²Ù×÷ʧ°Ü£ºµØÖ·=1009£¬´íÎóÂë=%d\n", nFlag);
|
}
|
});
|
}
|