// TouchBoardDlg.h : Çì´õ ÆÄÀÏ // #pragma once #include "TouchSetupDlg.h" #include "TouchButton.h" #include "LogEdit.h" #include "afxwin.h" #include "ColorButton.h" #include "RoundButton2.h" #include "RoundButtonStyle.h" #undef PSAPI_VERSION #define PSAPI_VERSION 1 #include #pragma comment(lib, "psapi.lib") #define USE_ROUND_BUTTON2 1 //#define USE_DO_PACKET_DUMP 1 //#define USE_PACKET_DUMP_FILE 1 //#define USE_DUMMY_DATA_FOR_UI 1 #define TBD_SETTING_FILE "tbd.ini" #define TBD_CLIENT_DEFAULT_PORT 17080 #define TBD_RECV_BUFSIZE (1024 * 512) #define TBD_SEND_BUFSIZE (1024 * 512) #define TBD_STANDARD_WIDTH 1280 #define TBD_STANDARD_HEIGHT 1024 #if TBD_BUTTON_UI_STYLE == 2 #define TBD_BTN_WIDTH 152 #define TBD_BTN_HEIGHT 45 #define TBD_BTN_ICON_WIDTH 30 #define TBD_BTN_ICON_HEIGHT 45 #else #define TBD_BTN_WIDTH 152 #define TBD_BTN_HEIGHT 45 #define TBD_BTN_ICON_WIDTH 30 #define TBD_BTN_ICON_HEIGHT 45 //#define TBD_BTN_HEIGHT 60 //#define TBD_BTN_ICON_WIDTH 15 //#define TBD_BTN_ICON_HEIGHT 15 #endif #if TBD_BUTTON_UI_STYLE == 2 #define TBD_BTN_SUB_MARGIN_X 6 #define TBD_BTN_SUB_MARGIN_Y 6 #if USE_ROUND_BUTTON2 #define TBD_BTN_GROUP_START_X 206 #else #define TBD_BTN_GROUP_START_X 235 #endif #define TBD_BTN_GROUP_START_Y 95 #define TBD_BTN_SUB_START_X 210 #if USE_ROUND_BUTTON2 #define TBD_BTN_SUB_START_Y 230 #else #define TBD_BTN_SUB_START_Y 220 #endif #define TBD_BTN_SUB_COLUMN_SIZE 5 #define TBD_BTN_GROUP_MARGIN_Y 12 #else #define TBD_BTN_SUB_MARGIN_X 8 #define TBD_BTN_SUB_MARGIN_Y 8 #define TBD_BTN_GROUP_START_X 240 #define TBD_BTN_GROUP_START_Y 110 #define TBD_BTN_SUB_START_X 210 #define TBD_BTN_SUB_START_Y 260 #define TBD_BTN_SUB_COLUMN_SIZE 5 #define TBD_BTN_GROUP_MARGIN_Y 20 #endif #define TBD_BTN_GROUP_LINE_BASE_COLOR RGB(150, 150, 150) #define TBD_BTN_GROUP_LINE_CHECK_COLOR RGB(200, 0, 0) //#define ACT_BTN_REGION_BACK_COLOR RGB(0, 50, 150) //#define ACT_BTN_REGION_BACK_COLOR RGB(20, 40, 65) #define ACT_BTN_REGION_BACK_COLOR RGB(58, 58, 67) #define STATUS_BTN_GOOD_BACK_COLOR RGB(57, 119, 206) #define TOPBAR_BACK_COLOR RGB(58, 58, 67) #define GLOBAL_BACK_COLOR RGB(232, 242, 247) #define TBD_MAX_STATION_COUNT 1000 #define TBD_MAX_GROUP_COUNT 30 #define TBD_SERVER_COMMAND_STATION_INFORM 10000 #define TBD_SERVER_COMMAND_STATION_NOTIFY 10001 #define TBD_SERVER_COMMAND_CAST_STATUS 10002 #define TBD_SERVER_COMMAND_DEVICE_STATUS 10003 #define TBD_REQUEST_CAST_TYPE_ALL 100 #define TBD_REQUEST_CAST_TYPE_FIRE 101 #define TBD_REQUEST_CAST_TYPE_RESQUE 102 #define TBD_REQUEST_CAST_TYPE_EMERGENCY 103 #define TBD_REQUEST_CAST_TYPE_GENERAL 104 #define TBD_REQUEST_CAST_TYPE_WHOLE 105 #define TBD_TIMER_EVENT_SOCKET 1000 typedef struct _tMonitor { int nWidth; // Width int nHeight; // Height int nWidthVirtual; // Width Virtual int nHeightVirtual; // Height Virtual int nBitPerPixel; // BitPerPixel int nRefresh; // Refresh int nMonitor; // Monitors int nMegaPixel; // MegaPixel BOOL bSameDisplayFormat; // SameDisplayFormat RECT rcVirtual; CArray< MONITORINFOEX, MONITORINFOEX > aryMonitors; } TMONITOR; class CStationInfo { public: int mGroupIdx; int mSubGroupId; int mWardId; // ¼­ID int mUpWardId; // »óÀ§ ½ºÅ×ÀÌ¼Ç ID int mStationId; // ½ºÅ×ÀÌ¼Ç ID int mLevel; int mSubCount; // ÇÏÀ§ ½ºÅ×ÀÌ¼Ç °³¼ö int mCallerNo; // ¿¬°áÁßÀÎ Á¢¼ö´ë ¹øÈ£ int mCallerCviNo; // ¿¬°áÁßÀÎ CT CVI ¹øÈ£ int mNickIndex; // ÅÍÄ¡ ±×·ì Á¤·Ä À妽º boolean mIsHeader; CString mNickName; CString mIpAddr; int mBtnPosX; int mBtnPosY; int mBtnGroupRow; // added by ritoseo - 2022-02-03 int mBtnShiftRow; // added by ritoseo - 2022-02-03 boolean mGrouping; RECT mGroupBox; CTouchButton* m_pButton; }; // CTouchBoardDlg ´ëÈ­ »óÀÚ class CTouchBoardDlg : public CDialogEx { // »ý¼ºÀÔ´Ï´Ù. public: CTouchBoardDlg(CWnd* pParent = NULL); // Ç¥ÁØ »ý¼ºÀÚÀÔ´Ï´Ù. // ´ëÈ­ »óÀÚ µ¥ÀÌÅÍÀÔ´Ï´Ù. enum { IDD = IDD_TOUCHBOARD_DIALOG }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV Áö¿øÀÔ´Ï´Ù. // ±¸ÇöÀÔ´Ï´Ù. protected: HICON m_hIcon; CString m_strServerAddr; CString m_strESAddr; CString m_strPSAddr; SOCKET m_sock; INT32 m_port; TMONITOR m_infoMonitor; CString m_strDeviceName; CString m_strCviNo; CString m_strWardId; CMutex m_infoMutex; char m_sendBuffer[TBD_SEND_BUFSIZE]; char m_recvBuffer[TBD_RECV_BUFSIZE]; INT32 m_sendSize; INT32 m_recvSize; INT32 m_iRequestWaitFlag; BOOL m_bIsActive; CMutex m_sockMutex; CWinThread *m_pReceiveThread; CWinThread *m_pPingThread; CTouchSetupDlg m_setupDlg; CxImage m_ciSymbol; CxImage m_ciBackground; CDC* m_pMemDC; CBitmap* m_pDCBitmap; CPen* m_pDidLinePen; INT32 m_iSelectGroup; CStationInfo *m_pStationList[TBD_MAX_STATION_COUNT]; INT32 m_stationCount; INT32 m_iGroupBtnCount; CTouchButton *m_pGroupBtn[TBD_MAX_GROUP_COUNT]; INT32 m_iScreenWidth; INT32 m_iScreenHeight; BOOL m_bIsFullHD; // »ý¼ºµÈ ¸Þ½ÃÁö ¸Ê ÇÔ¼ö virtual BOOL OnInitDialog(); afx_msg void OnSysCommand(UINT nID, LPARAM lParam); afx_msg void OnPaint(); afx_msg HCURSOR OnQueryDragIcon(); DECLARE_MESSAGE_MAP() void WideToMultiByte(const wchar_t *src, char* dest); void MultiByteToWide(const char* src, wchar_t *dest, int buffersize); in_addr* atoaddr(char *address); SOCKET ConnectRequest(char *pAddress, int port); INT32 SocketSend(char *sendData, int datasize); INT32 PacketDizest(char *pBuffer); int GetMonitorInformation(void); void UpdateSettingToVariable(); void UpdateSubGroupList(); void UpdateTouchButtonList(); void CalcButtonPositioning(); void RequestCastOrder(INT32 iCastType); ULONG ProcIDFromWnd(HWND hwnd); HWND GetWinHandle(ULONG pid); void PrintProcessNameAndID(DWORD processID, CString& strPath); BOOL EnumProcessAndFocus(CString processPath); void MoveWindowDirection(CWnd *pWnd, INT32 xpos, INT32 ypos); static UINT SocketReceiveThread(LPVOID aParam); static UINT SocketConnectionThread(LPVOID aParam); static UINT PingCheckThread(LPVOID aParam); public: CFont m_titleFont; CFont m_topFont; CFont m_castFont; CFont m_btnFont; CFont m_btnSmallFont; CFont m_logFont; CFont m_btnUnderFont; CLogEdit m_logEdit; #if USE_ROUND_BUTTON2 CRoundButtonStyle m_tButtonStyle; CRoundButtonStyle m_tTopStyle[5]; CRoundButtonStyle m_tActStyle[8]; CRoundButton2 *m_pTopButton[5]; CRoundButton2 *m_pActButton[8]; #else CColorButton *m_pTopButton[5]; CColorButton *m_pActButton[8]; #endif CColorButton *m_pStatusButton[3]; CString getStrWardId() { CString strResult; m_infoMutex.Lock(); strResult = m_strWardId; m_infoMutex.Unlock(); return strResult; } CString getStrDeviceName() { CString strResult; m_infoMutex.Lock(); strResult = m_strDeviceName; m_infoMutex.Unlock(); return strResult; } INT32 SocketSendExceptionHandle(char *sendData, int datasize); afx_msg void OnBnClickedButtonSetup(); afx_msg void OnDestroy(); afx_msg LRESULT OnTbdSetupSave(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnTbdUpdateLevel2(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnTbdLevel2Push(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnTbdLogUpdate(WPARAM wParam, LPARAM lParam); afx_msg LRESULT OnTbdSubGrouping(WPARAM wParam, LPARAM lParam); afx_msg BOOL OnEraseBkgnd(CDC* pDC); afx_msg void OnBnClickedButtonCastAll(); afx_msg void OnBnClickedButtonCastFire(); afx_msg void OnBnClickedButtonCastRescue(); afx_msg void OnBnClickedButtonCastEmergency(); afx_msg void OnBnClickedButtonCastNormal(); afx_msg void OnBnClickedButtonRestore(); afx_msg void OnBnClickedButtonWireless(); afx_msg void OnBnClickedButtonCall(); afx_msg void OnClose(); afx_msg void OnBnClickedButtonCastWhole(); afx_msg void OnTimer(UINT_PTR nIDEvent); afx_msg void OnBnClickedButtonMicvolMinus(); afx_msg void OnBnClickedButtonMicvolPlus(); afx_msg void OnBnClickedButtonSpkvolMinus(); afx_msg void OnBnClickedButtonSpkvolPlus(); afx_msg HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor); };