-
Notifications
You must be signed in to change notification settings - Fork 40
/
AppListCtrl.h
148 lines (119 loc) · 3.33 KB
/
AppListCtrl.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#pragma once
#include "afx.h"
#include "socket\SocketClient.h"
#include "AppInfo.h"
#include "cmdList.h"
#include <map>
// 用户自定义消息
enum UserMsg
{
MSG_InsertApp = (WM_USER + 100),
MSG_UpdateApp,
MSG_DeleteApp,
MSG_ChangeColor,
MSG_Infomation, // 收到消息
};
#define COLOR_DEFAULT 2047 // 默认字体颜色
#define COLOR_RED 2048 // 红色字体:程序异常或网络时延较大
#define COLOR_YELLOW 2049 // 黄色字体:窗口异常
#define COLOR_BLUE1 2050 // 蓝色字体:网络或校时异常
#define COLOR_BLUE2 2051 // 深蓝:时间差距较大
// 字符串
class String
{
private:
int *ref;
char *buf;
String& operator = (const String &o) { return *this; }
public:
explicit String(const int size) : ref(new int(1)), buf(new char[size+1])
{
}
String(const String &o)
{
ref = o.ref;
buf = o.buf;
++(*ref);
}
~String()
{
if (0 == --(*ref))
{
delete ref;
delete [] buf;
}
}
operator char*() const { return buf; }
operator const char*() const { return buf; }
char& operator [] (int i) { return buf[i]; }
const char* tolower() { return _strlwr(buf); }
const char* c_str() const { return buf; }
};
// 替代W2A函数
String W_2_A(const CString &wStr);
#define MENU_COUNT 7
// CAppListCtrl
class CAppListCtrl : public CListCtrl
{
DECLARE_DYNAMIC(CAppListCtrl)
int m_nIndex; // 当前选中行
std::map<int, int> m_MapStat; // 各个菜单状态
public:
CAppListCtrl();
virtual ~CAppListCtrl();
// 初始化所有列
void AddColumns(const CString its[], int cols);
// 平均分布各列
void AvgColumnWidth(int cols);
//////////////////////////////////////////////////////////////////////////
// 以下4个函数涉及多线程
// 插入行[m]
void InsertAppItem(const char* port);
// 删除行[m]
void DeleteAppItem(const char* port);
// 更新行[m]
void UpdateAppItem(const char* port, const AppInfo &it);
// 清空所有行[m]
void Clear();
CRITICAL_SECTION m_cs;
inline void Lock() { EnterCriticalSection(&m_cs); }
inline void Unlock() { LeaveCriticalSection(&m_cs); }
std::string getCurSelNo();
// 监视所选程序
void SpyOnSelected(const char *no, int nPort);
// 清理资源、退出线程
void Uninit_ffplay(int nPort);
int GetUdpPort(int base = _BASE_PORT+1);
// 升级选中程序、无二次确认
void UpdateSelected(int row=-1);
struct ffplayInfo
{
int udp_port;
time_t t;
ffplayInfo(int port) : udp_port(port), t(time(NULL)) { }
bool timeout(int timeouttime) const { return time(NULL) - t > timeouttime; }
operator int() const { return udp_port; }
};
std::map<std::string, ffplayInfo> m_ffplayMap;// 每个连接对应的ffplay端口
protected:
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnNMRClick(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void RestartApp();
afx_msg void QueryAppInfo();
afx_msg void OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void StopApp();
afx_msg void StartApp();
afx_msg void UpdateApp();
afx_msg LRESULT MessageInsertApp(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT MessageUpdateApp(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT MessageDeleteApp(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT MessageChangeColor(WPARAM wParam, LPARAM lParam);
afx_msg LRESULT MessageInfomation(WPARAM wParam, LPARAM lParam);
afx_msg void OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult);
afx_msg void OnOpRemote();
afx_msg void OnUpdateOpRemote(CCmdUI *pCmdUI);
afx_msg void OnOpSpy();
afx_msg void OnUpdateOpSpy(CCmdUI *pCmdUI);
afx_msg void RecoveryApp();
};