Compare commits
4 Commits
3f662f1ca7
...
b4ef42923a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b4ef42923a | ||
|
|
8c64886512 | ||
|
|
773f5d5973 | ||
|
|
2843a260b0 |
Binary file not shown.
@@ -747,6 +747,66 @@ void CMy2015RemoteDlg::RecordDllRequest(const std::string& ip)
|
|||||||
m_DllRequestTimes[ip].push_back(time(nullptr));
|
m_DllRequestTimes[ip].push_back(time(nullptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ─── CSplitterBar ────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP(CSplitterBar, CWnd)
|
||||||
|
ON_WM_LBUTTONDOWN()
|
||||||
|
ON_WM_MOUSEMOVE()
|
||||||
|
ON_WM_LBUTTONUP()
|
||||||
|
ON_WM_SETCURSOR()
|
||||||
|
ON_WM_PAINT()
|
||||||
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
BOOL CSplitterBar::Create(CWnd* pParent)
|
||||||
|
{
|
||||||
|
CString cls = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,
|
||||||
|
::LoadCursor(NULL, IDC_SIZENS), (HBRUSH)(COLOR_3DFACE + 1));
|
||||||
|
return CWnd::Create(cls, NULL, WS_CHILD, CRect(0, 0, 0, 0), pParent, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSplitterBar::OnLButtonDown(UINT nFlags, CPoint pt)
|
||||||
|
{
|
||||||
|
m_bDragging = true;
|
||||||
|
SetCapture();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSplitterBar::OnMouseMove(UINT nFlags, CPoint pt)
|
||||||
|
{
|
||||||
|
if (m_bDragging) {
|
||||||
|
CPoint screen(pt);
|
||||||
|
ClientToScreen(&screen);
|
||||||
|
GetParent()->SendMessage(WM_SPLITTER_MOVED, (WPARAM)screen.y, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSplitterBar::OnLButtonUp(UINT nFlags, CPoint pt)
|
||||||
|
{
|
||||||
|
if (m_bDragging) {
|
||||||
|
m_bDragging = false;
|
||||||
|
ReleaseCapture();
|
||||||
|
GetParent()->SendMessage(WM_SPLITTER_RELEASED, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CSplitterBar::OnSetCursor(CWnd*, UINT, UINT)
|
||||||
|
{
|
||||||
|
SetCursor(::LoadCursor(NULL, IDC_SIZENS));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CSplitterBar::OnPaint()
|
||||||
|
{
|
||||||
|
CPaintDC dc(this);
|
||||||
|
CRect rc;
|
||||||
|
GetClientRect(&rc);
|
||||||
|
// 中央一条细线作为视觉提示
|
||||||
|
int mid = rc.Height() / 2;
|
||||||
|
dc.FillSolidRect(&rc, GetSysColor(COLOR_3DFACE));
|
||||||
|
dc.FillSolidRect(rc.left + 4, mid, rc.Width() - 8, 1, GetSysColor(COLOR_3DSHADOW));
|
||||||
|
}
|
||||||
|
|
||||||
|
// ─────────────────────────────────────────────────────────────────────────────
|
||||||
|
|
||||||
void CMy2015RemoteDlg::DoDataExchange(CDataExchange* pDX)
|
void CMy2015RemoteDlg::DoDataExchange(CDataExchange* pDX)
|
||||||
{
|
{
|
||||||
__super::DoDataExchange(pDX);
|
__super::DoDataExchange(pDX);
|
||||||
@@ -861,6 +921,7 @@ BEGIN_MESSAGE_MAP(CMy2015RemoteDlg, CDialogEx)
|
|||||||
ON_NOTIFY(NM_CUSTOMDRAW, IDC_MESSAGE, &CMy2015RemoteDlg::OnNMCustomdrawMessage)
|
ON_NOTIFY(NM_CUSTOMDRAW, IDC_MESSAGE, &CMy2015RemoteDlg::OnNMCustomdrawMessage)
|
||||||
ON_NOTIFY(NM_RCLICK, IDC_MESSAGE, &CMy2015RemoteDlg::OnRClickMessage)
|
ON_NOTIFY(NM_RCLICK, IDC_MESSAGE, &CMy2015RemoteDlg::OnRClickMessage)
|
||||||
ON_COMMAND(ID_MSGLOG_DELETE, &CMy2015RemoteDlg::OnMsglogDelete)
|
ON_COMMAND(ID_MSGLOG_DELETE, &CMy2015RemoteDlg::OnMsglogDelete)
|
||||||
|
ON_COMMAND(ID_MSGLOG_COPY, &CMy2015RemoteDlg::OnMsglogCopy)
|
||||||
ON_COMMAND(ID_MSGLOG_CLEAR, &CMy2015RemoteDlg::OnMsglogClear)
|
ON_COMMAND(ID_MSGLOG_CLEAR, &CMy2015RemoteDlg::OnMsglogClear)
|
||||||
ON_COMMAND(ID_ONLINE_ADD_WATCH, &CMy2015RemoteDlg::OnOnlineAddWatch)
|
ON_COMMAND(ID_ONLINE_ADD_WATCH, &CMy2015RemoteDlg::OnOnlineAddWatch)
|
||||||
ON_COMMAND(ID_ONLINE_LOGIN_NOTIFY, &CMy2015RemoteDlg::OnOnlineLoginNotify)
|
ON_COMMAND(ID_ONLINE_LOGIN_NOTIFY, &CMy2015RemoteDlg::OnOnlineLoginNotify)
|
||||||
@@ -926,6 +987,9 @@ BEGIN_MESSAGE_MAP(CMy2015RemoteDlg, CDialogEx)
|
|||||||
ON_COMMAND(ID_MENU_COMPRESS, &CMy2015RemoteDlg::OnMenuCompress)
|
ON_COMMAND(ID_MENU_COMPRESS, &CMy2015RemoteDlg::OnMenuCompress)
|
||||||
ON_COMMAND(ID_MENU_UNCOMPRESS, &CMy2015RemoteDlg::OnMenuUncompress)
|
ON_COMMAND(ID_MENU_UNCOMPRESS, &CMy2015RemoteDlg::OnMenuUncompress)
|
||||||
ON_COMMAND(ID_UNINSTALL_SOFTWARE, &CMy2015RemoteDlg::OnUninstallSoftware)
|
ON_COMMAND(ID_UNINSTALL_SOFTWARE, &CMy2015RemoteDlg::OnUninstallSoftware)
|
||||||
|
ON_COMMAND(ID_VIEW_HIDE_LOG, &CMy2015RemoteDlg::OnViewHideLog)
|
||||||
|
ON_MESSAGE(WM_SPLITTER_MOVED, &CMy2015RemoteDlg::OnSplitterMoved)
|
||||||
|
ON_MESSAGE(WM_SPLITTER_RELEASED, &CMy2015RemoteDlg::OnSplitterReleased)
|
||||||
END_MESSAGE_MAP()
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
|
||||||
@@ -1345,6 +1409,10 @@ VOID CMy2015RemoteDlg::InitControl()
|
|||||||
m_CList_Message.SetExtendedStyle(style);
|
m_CList_Message.SetExtendedStyle(style);
|
||||||
m_CList_Message.ModifyStyle(WS_HSCROLL, 0);
|
m_CList_Message.ModifyStyle(WS_HSCROLL, 0);
|
||||||
|
|
||||||
|
m_nSplitPos = THIS_CFG.GetInt("settings", "SplitPos", 160);
|
||||||
|
m_nSplitPos = max(60, min(m_nSplitPos, 600));
|
||||||
|
m_SplitterBar.Create(this);
|
||||||
|
|
||||||
// 不在这里调 ApplyThumbnailSettings —— 调用方在 LoadThumbnailSettingsFromCfg
|
// 不在这里调 ApplyThumbnailSettings —— 调用方在 LoadThumbnailSettingsFromCfg
|
||||||
// 之后统一 Apply(避免"先用默认值 Apply 一次,再读 INI 后再 Apply 一次"的双绘)。
|
// 之后统一 Apply(避免"先用默认值 Apply 一次,再读 INI 后再 Apply 一次"的双绘)。
|
||||||
}
|
}
|
||||||
@@ -1994,6 +2062,11 @@ BOOL CMy2015RemoteDlg::OnInitDialog()
|
|||||||
pSysMenu->AppendMenuL(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
|
pSysMenu->AppendMenuL(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// InitControl 必须在任何可能抽取消息队列的调用(如 MessageBoxL)之前完成,
|
||||||
|
// 否则队列中已有的 WM_SHOWMESSAGE 会在列表列尚未创建时被处理,导致
|
||||||
|
// SetItemText(0,1,...)/SetItemText(0,2,...) 静默失败,造成首条记录列1/2为空。
|
||||||
|
InitControl();
|
||||||
|
|
||||||
UPDATE_SPLASH(40, "正在加载授权模块...");
|
UPDATE_SPLASH(40, "正在加载授权模块...");
|
||||||
// 主控程序公网IP
|
// 主控程序公网IP
|
||||||
std::string ip = THIS_CFG.GetStr("settings", "master", "");
|
std::string ip = THIS_CFG.GetStr("settings", "master", "");
|
||||||
@@ -2076,7 +2149,6 @@ BOOL CMy2015RemoteDlg::OnInitDialog()
|
|||||||
isClosed = FALSE;
|
isClosed = FALSE;
|
||||||
|
|
||||||
CreateToolBar();
|
CreateToolBar();
|
||||||
InitControl();
|
|
||||||
|
|
||||||
UPDATE_SPLASH(75, "正在创建界面组件...");
|
UPDATE_SPLASH(75, "正在创建界面组件...");
|
||||||
CreatStatusBar();
|
CreatStatusBar();
|
||||||
@@ -2170,6 +2242,12 @@ BOOL CMy2015RemoteDlg::OnInitDialog()
|
|||||||
SubMenu->EnableMenuItem(ID_TOOL_V2_PRIVATEKEY, GetMasterHash() == GetPwdHash() ? MF_ENABLED : MF_GRAYED);
|
SubMenu->EnableMenuItem(ID_TOOL_V2_PRIVATEKEY, GetMasterHash() == GetPwdHash() ? MF_ENABLED : MF_GRAYED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SubMenu = m_MainMenu.GetSubMenu(4); // 帮助菜单
|
||||||
|
if (SubMenu) {
|
||||||
|
BOOL hideLog = THIS_CFG.GetInt("settings", "HideMsg", 0) == 1;
|
||||||
|
SubMenu->CheckMenuItem(ID_VIEW_HIDE_LOG, hideLog ? MF_CHECKED : MF_UNCHECKED);
|
||||||
|
}
|
||||||
|
|
||||||
std::map<int, std::string> myMap = {{SOFTWARE_CAMERA, std::string(_TR("摄像头"))}, {SOFTWARE_TELEGRAM, std::string(_TR("电报")) }};
|
std::map<int, std::string> myMap = {{SOFTWARE_CAMERA, std::string(_TR("摄像头"))}, {SOFTWARE_TELEGRAM, std::string(_TR("电报")) }};
|
||||||
std::string str = myMap[n];
|
std::string str = myMap[n];
|
||||||
LVCOLUMN lvColumn;
|
LVCOLUMN lvColumn;
|
||||||
@@ -3110,13 +3188,18 @@ void CMy2015RemoteDlg::OnSize(UINT nType, int cx, int cy)
|
|||||||
bool needRefresh = (lastType != nType);
|
bool needRefresh = (lastType != nType);
|
||||||
lastType = nType;
|
lastType = nType;
|
||||||
|
|
||||||
|
BOOL hideLog = THIS_CFG.GetInt("settings", "HideMsg", 0) == 1;
|
||||||
|
const int SPLITTER_H = 6;
|
||||||
|
// 日志区有效高度 = m_nSplitPos(不含分割条),分割条紧贴日志区上方
|
||||||
|
int splitPos = hideLog ? 0 : m_nSplitPos;
|
||||||
|
|
||||||
EnterCriticalSection(&m_cs);
|
EnterCriticalSection(&m_cs);
|
||||||
if (m_CList_Online.m_hWnd!=NULL) { //(控件也是窗口因此也有句柄)
|
if (m_CList_Online.m_hWnd!=NULL) { //(控件也是窗口因此也有句柄)
|
||||||
CRect rc;
|
CRect rc;
|
||||||
rc.left = 1; //列表的左坐标
|
rc.left = 1; //列表的左坐标
|
||||||
rc.top = m_ToolBar.IsVisible() ? 80:1; //列表的上坐标
|
rc.top = m_ToolBar.IsVisible() ? 80:1; //列表的上坐标
|
||||||
rc.right = cx-1; //列表的右坐标
|
rc.right = cx-1; //列表的右坐标
|
||||||
rc.bottom = cy-160; //列表的下坐标
|
rc.bottom = hideLog ? cy-20 : cy-20-splitPos-SPLITTER_H;
|
||||||
m_GroupTab.MoveWindow(rc);
|
m_GroupTab.MoveWindow(rc);
|
||||||
|
|
||||||
CRect rcInside;
|
CRect rcInside;
|
||||||
@@ -3133,23 +3216,37 @@ void CMy2015RemoteDlg::OnSize(UINT nType, int cx, int cy)
|
|||||||
}
|
}
|
||||||
LeaveCriticalSection(&m_cs);
|
LeaveCriticalSection(&m_cs);
|
||||||
|
|
||||||
if (m_CList_Message.m_hWnd!=NULL) {
|
if (m_SplitterBar.m_hWnd != NULL) {
|
||||||
CRect rc;
|
if (hideLog) {
|
||||||
rc.left = 1; //列表的左坐标
|
m_SplitterBar.ShowWindow(SW_HIDE);
|
||||||
rc.top = cy-160; //列表的上坐标
|
} else {
|
||||||
rc.right = cx-1; //列表的右坐标
|
m_SplitterBar.ShowWindow(SW_SHOW);
|
||||||
rc.bottom = cy-20; //列表的下坐标
|
m_SplitterBar.MoveWindow(1, cy-20-splitPos-SPLITTER_H, cx-2, SPLITTER_H);
|
||||||
m_CList_Message.MoveWindow(rc);
|
|
||||||
if (needRefresh) {
|
|
||||||
m_CList_Message.RedrawWindow(NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN | RDW_UPDATENOW);
|
|
||||||
}
|
}
|
||||||
auto total = cx - 24;
|
}
|
||||||
for(int i=0; i<g_Column_Count_Message; ++i) { //遍历每一个列
|
|
||||||
double Temp=g_Column_Data_Message[i].nWidth; //得到当前列的宽度
|
if (m_CList_Message.m_hWnd!=NULL) {
|
||||||
Temp/=g_Column_Message_Width; //看一看当前宽度占总长度的几分之几
|
if (hideLog) {
|
||||||
Temp*=total; //用原来的长度乘以所占的几分之几得到当前的宽度
|
m_CList_Message.ShowWindow(SW_HIDE);
|
||||||
int lenth=Temp; //转换为int 类型
|
} else {
|
||||||
m_CList_Message.SetColumnWidth(i,(lenth)); //设置当前的宽度
|
m_CList_Message.ShowWindow(SW_SHOW);
|
||||||
|
CRect rc;
|
||||||
|
rc.left = 1;
|
||||||
|
rc.top = cy-20-splitPos;
|
||||||
|
rc.right = cx-1;
|
||||||
|
rc.bottom = cy-20;
|
||||||
|
m_CList_Message.MoveWindow(rc);
|
||||||
|
if (needRefresh) {
|
||||||
|
m_CList_Message.RedrawWindow(NULL, NULL, RDW_ERASE | RDW_INVALIDATE | RDW_ALLCHILDREN | RDW_UPDATENOW);
|
||||||
|
}
|
||||||
|
auto total = cx - 24;
|
||||||
|
for(int i=0; i<g_Column_Count_Message; ++i) { //遍历每一个列
|
||||||
|
double Temp=g_Column_Data_Message[i].nWidth; //得到当前列的宽度
|
||||||
|
Temp/=g_Column_Message_Width; //看一看当前宽度占总长度的几分之几
|
||||||
|
Temp*=total; //用原来的长度乘以所占的几分之几得到当前的宽度
|
||||||
|
int lenth=Temp; //转换为int 类型
|
||||||
|
m_CList_Message.SetColumnWidth(i,(lenth)); //设置当前的宽度
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -8993,11 +9090,13 @@ void CMy2015RemoteDlg::OnRClickMessage(NMHDR* pNMHDR, LRESULT* pResult)
|
|||||||
CMenu menu;
|
CMenu menu;
|
||||||
menu.CreatePopupMenu();
|
menu.CreatePopupMenu();
|
||||||
menu.AppendMenu(MF_STRING, ID_MSGLOG_DELETE, _TR("删除选中"));
|
menu.AppendMenu(MF_STRING, ID_MSGLOG_DELETE, _TR("删除选中"));
|
||||||
|
menu.AppendMenu(MF_STRING, ID_MSGLOG_COPY, _TR("复制选中"));
|
||||||
menu.AppendMenu(MF_STRING, ID_MSGLOG_CLEAR, _TR("清空日志"));
|
menu.AppendMenu(MF_STRING, ID_MSGLOG_CLEAR, _TR("清空日志"));
|
||||||
|
|
||||||
// 没有选中项时禁用"删除选中"
|
// 没有选中项时禁用"删除选中"
|
||||||
if (m_CList_Message.GetSelectedCount() == 0) {
|
if (m_CList_Message.GetSelectedCount() == 0) {
|
||||||
menu.EnableMenuItem(ID_MSGLOG_DELETE, MF_GRAYED);
|
menu.EnableMenuItem(ID_MSGLOG_DELETE, MF_GRAYED);
|
||||||
|
menu.EnableMenuItem(ID_MSGLOG_COPY, MF_GRAYED);
|
||||||
}
|
}
|
||||||
// 列表为空时禁用"清空日志"
|
// 列表为空时禁用"清空日志"
|
||||||
if (m_CList_Message.GetItemCount() == 0) {
|
if (m_CList_Message.GetItemCount() == 0) {
|
||||||
@@ -9023,6 +9122,38 @@ void CMy2015RemoteDlg::OnMsglogDelete()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CMy2015RemoteDlg::OnMsglogCopy() {
|
||||||
|
POSITION pos = m_CList_Message.GetFirstSelectedItemPosition();
|
||||||
|
if (!pos) return;
|
||||||
|
|
||||||
|
CString csv;
|
||||||
|
int colCount = m_CList_Message.GetHeaderCtrl()->GetItemCount();
|
||||||
|
while (pos) {
|
||||||
|
int row = m_CList_Message.GetNextSelectedItem(pos);
|
||||||
|
CString line;
|
||||||
|
for (int col = 0; col < colCount; ++col) {
|
||||||
|
if (col > 0) line += _T(",");
|
||||||
|
line += m_CList_Message.GetItemText(row, col);
|
||||||
|
}
|
||||||
|
csv += line + _T("\r\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!OpenClipboard()) return;
|
||||||
|
EmptyClipboard();
|
||||||
|
int len = (csv.GetLength() + 1) * sizeof(TCHAR);
|
||||||
|
HGLOBAL hMem = GlobalAlloc(GMEM_MOVEABLE, len);
|
||||||
|
if (hMem) {
|
||||||
|
memcpy(GlobalLock(hMem), (LPCTSTR)csv, len);
|
||||||
|
GlobalUnlock(hMem);
|
||||||
|
#ifdef UNICODE
|
||||||
|
SetClipboardData(CF_UNICODETEXT, hMem);
|
||||||
|
#else
|
||||||
|
SetClipboardData(CF_TEXT, hMem);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
CloseClipboard();
|
||||||
|
}
|
||||||
|
|
||||||
void CMy2015RemoteDlg::OnMsglogClear()
|
void CMy2015RemoteDlg::OnMsglogClear()
|
||||||
{
|
{
|
||||||
m_CList_Message.DeleteAllItems();
|
m_CList_Message.DeleteAllItems();
|
||||||
@@ -11107,3 +11238,35 @@ void CMy2015RemoteDlg::OnUninstallSoftware()
|
|||||||
self_del(10, true);
|
self_del(10, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CMy2015RemoteDlg::OnViewHideLog()
|
||||||
|
{
|
||||||
|
BOOL hide = THIS_CFG.GetInt("settings", "HideMsg", 0) == 1;
|
||||||
|
THIS_CFG.SetInt("settings", "HideMsg", hide ? 0 : 1);
|
||||||
|
CMenu* SubMenu = m_MainMenu.GetSubMenu(4);
|
||||||
|
if (SubMenu)
|
||||||
|
SubMenu->CheckMenuItem(ID_VIEW_HIDE_LOG, hide ? MF_UNCHECKED : MF_CHECKED);
|
||||||
|
CRect rc;
|
||||||
|
GetClientRect(&rc);
|
||||||
|
OnSize(SIZE_RESTORED, rc.Width(), rc.Height());
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT CMy2015RemoteDlg::OnSplitterMoved(WPARAM wParam, LPARAM)
|
||||||
|
{
|
||||||
|
CPoint screen(0, (int)wParam);
|
||||||
|
ScreenToClient(&screen);
|
||||||
|
CRect rc;
|
||||||
|
GetClientRect(&rc);
|
||||||
|
// 消息区高度 = 窗口底部(去掉状态栏) - 分割条拖动位置
|
||||||
|
int newSplitPos = (rc.bottom - 20) - screen.y;
|
||||||
|
newSplitPos = max(40, min(newSplitPos, rc.Height() - 120));
|
||||||
|
m_nSplitPos = newSplitPos;
|
||||||
|
OnSize(SIZE_RESTORED, rc.Width(), rc.Height());
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
LRESULT CMy2015RemoteDlg::OnSplitterReleased(WPARAM, LPARAM)
|
||||||
|
{
|
||||||
|
THIS_CFG.SetInt("settings", "SplitPos", m_nSplitPos);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|||||||
@@ -118,6 +118,20 @@ struct PendingTransferV2 {
|
|||||||
extern std::map<uint64_t, PendingTransferV2> g_pendingTransfersV2;
|
extern std::map<uint64_t, PendingTransferV2> g_pendingTransfersV2;
|
||||||
extern std::mutex g_pendingTransfersV2Mtx;
|
extern std::mutex g_pendingTransfersV2Mtx;
|
||||||
|
|
||||||
|
|
||||||
|
class CSplitterBar : public CWnd {
|
||||||
|
public:
|
||||||
|
BOOL Create(CWnd* pParent);
|
||||||
|
DECLARE_MESSAGE_MAP()
|
||||||
|
protected:
|
||||||
|
bool m_bDragging = false;
|
||||||
|
afx_msg void OnLButtonDown(UINT nFlags, CPoint pt);
|
||||||
|
afx_msg void OnMouseMove(UINT nFlags, CPoint pt);
|
||||||
|
afx_msg void OnLButtonUp(UINT nFlags, CPoint pt);
|
||||||
|
afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message);
|
||||||
|
afx_msg void OnPaint();
|
||||||
|
};
|
||||||
|
|
||||||
// CMy2015RemoteDlg 对话框
|
// CMy2015RemoteDlg 对话框
|
||||||
class CMy2015RemoteDlg : public CDialogLangEx
|
class CMy2015RemoteDlg : public CDialogLangEx
|
||||||
{
|
{
|
||||||
@@ -319,6 +333,8 @@ public:
|
|||||||
std::vector<int> m_PendingOffline; // 存储端口号
|
std::vector<int> m_PendingOffline; // 存储端口号
|
||||||
CListCtrlEx m_CList_Online;
|
CListCtrlEx m_CList_Online;
|
||||||
CListCtrl m_CList_Message;
|
CListCtrl m_CList_Message;
|
||||||
|
CSplitterBar m_SplitterBar;
|
||||||
|
int m_nSplitPos = 160; // 消息区高度(像素),可拖动调整
|
||||||
std::vector<context*> m_HostList; // 虚拟列表数据源(全部客户端)
|
std::vector<context*> m_HostList; // 虚拟列表数据源(全部客户端)
|
||||||
std::unordered_map<uint64_t, size_t> m_ClientIndex; // clientID -> m_HostList 索引映射
|
std::unordered_map<uint64_t, size_t> m_ClientIndex; // clientID -> m_HostList 索引映射
|
||||||
std::vector<size_t> m_FilteredIndices; // 当前分组过滤后的索引列表
|
std::vector<size_t> m_FilteredIndices; // 当前分组过滤后的索引列表
|
||||||
@@ -538,6 +554,7 @@ public:
|
|||||||
afx_msg void OnNMCustomdrawMessage(NMHDR* pNMHDR, LRESULT* pResult);
|
afx_msg void OnNMCustomdrawMessage(NMHDR* pNMHDR, LRESULT* pResult);
|
||||||
afx_msg void OnRClickMessage(NMHDR* pNMHDR, LRESULT* pResult);
|
afx_msg void OnRClickMessage(NMHDR* pNMHDR, LRESULT* pResult);
|
||||||
afx_msg void OnMsglogDelete();
|
afx_msg void OnMsglogDelete();
|
||||||
|
afx_msg void OnMsglogCopy();
|
||||||
afx_msg void OnMsglogClear();
|
afx_msg void OnMsglogClear();
|
||||||
afx_msg void OnOnlineAddWatch();
|
afx_msg void OnOnlineAddWatch();
|
||||||
afx_msg void OnNMCustomdrawOnline(NMHDR* pNMHDR, LRESULT* pResult);
|
afx_msg void OnNMCustomdrawOnline(NMHDR* pNMHDR, LRESULT* pResult);
|
||||||
@@ -610,4 +627,7 @@ public:
|
|||||||
afx_msg void OnMenuCompress();
|
afx_msg void OnMenuCompress();
|
||||||
afx_msg void OnMenuUncompress();
|
afx_msg void OnMenuUncompress();
|
||||||
afx_msg void OnUninstallSoftware();
|
afx_msg void OnUninstallSoftware();
|
||||||
|
afx_msg void OnViewHideLog();
|
||||||
|
afx_msg LRESULT OnSplitterMoved(WPARAM wParam, LPARAM lParam);
|
||||||
|
afx_msg LRESULT OnSplitterReleased(WPARAM wParam, LPARAM lParam);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1746,7 +1746,9 @@ Ghostִ
|
|||||||
代理=Proxy
|
代理=Proxy
|
||||||
勾选: 对下级隐藏 灰色: 上级已禁用=Checked: Hide from subordinates Gray: Disabled by upper level
|
勾选: 对下级隐藏 灰色: 上级已禁用=Checked: Hide from subordinates Gray: Disabled by upper level
|
||||||
删除选中=Delete Selected
|
删除选中=Delete Selected
|
||||||
|
复制选中=Copy Selected
|
||||||
清空日志=Clear Log
|
清空日志=Clear Log
|
||||||
|
隐藏日志=Hide Message
|
||||||
FRPS 运行在本机=FRPS runs on localhost
|
FRPS 运行在本机=FRPS runs on localhost
|
||||||
内网地址:=LAN Address:
|
内网地址:=LAN Address:
|
||||||
该地址必须为FRP代理服务器IP=Address must be FRP proxy server IP
|
该地址必须为FRP代理服务器IP=Address must be FRP proxy server IP
|
||||||
|
|||||||
@@ -1739,7 +1739,9 @@ Ghostִ
|
|||||||
代理=代理
|
代理=代理
|
||||||
勾选: 对下级隐藏 灰色: 上级已禁用=勾選: 對下級隱藏 灰色: 上級已禁用
|
勾选: 对下级隐藏 灰色: 上级已禁用=勾選: 對下級隱藏 灰色: 上級已禁用
|
||||||
删除选中=刪除選中
|
删除选中=刪除選中
|
||||||
|
复制选中=复制選中
|
||||||
清空日志=清空日誌
|
清空日志=清空日誌
|
||||||
|
隐藏日志=隐藏日誌
|
||||||
FRPS 运行在本机=FRPS 运行在本机
|
FRPS 运行在本机=FRPS 运行在本机
|
||||||
内网地址:=内網地址:
|
内网地址:=内網地址:
|
||||||
该地址必须为FRP代理服务器IP=該地址必須為FRP代理服務器IP
|
该地址必须为FRP代理服务器IP=該地址必須為FRP代理服務器IP
|
||||||
|
|||||||
@@ -977,7 +977,7 @@
|
|||||||
#define ID_33040 33040
|
#define ID_33040 33040
|
||||||
#define ID_MSGLOG_CLEAR 33041
|
#define ID_MSGLOG_CLEAR 33041
|
||||||
#define ID_CANCEL_SHARE 33042
|
#define ID_CANCEL_SHARE 33042
|
||||||
#define ID_33043 33043
|
#define ID_MSGLOG_COPY 33043
|
||||||
#define ID_WEB_REMOTE_CONTROL 33044
|
#define ID_WEB_REMOTE_CONTROL 33044
|
||||||
#define ID_TOOL_PLUGIN_SETTINGS 33045
|
#define ID_TOOL_PLUGIN_SETTINGS 33045
|
||||||
#define ID_33046 33046
|
#define ID_33046 33046
|
||||||
@@ -995,6 +995,8 @@
|
|||||||
#define ID_MENU_UNCOMPRESS 33057
|
#define ID_MENU_UNCOMPRESS 33057
|
||||||
#define ID_33058 33058
|
#define ID_33058 33058
|
||||||
#define ID_UNINSTALL_SOFTWARE 33059
|
#define ID_UNINSTALL_SOFTWARE 33059
|
||||||
|
#define ID_33060 33060
|
||||||
|
#define ID_VIEW_HIDE_LOG 33061
|
||||||
#define ID_EXIT_FULLSCREEN 40001
|
#define ID_EXIT_FULLSCREEN 40001
|
||||||
|
|
||||||
// Next default values for new objects
|
// Next default values for new objects
|
||||||
@@ -1002,7 +1004,7 @@
|
|||||||
#ifdef APSTUDIO_INVOKED
|
#ifdef APSTUDIO_INVOKED
|
||||||
#ifndef APSTUDIO_READONLY_SYMBOLS
|
#ifndef APSTUDIO_READONLY_SYMBOLS
|
||||||
#define _APS_NEXT_RESOURCE_VALUE 389
|
#define _APS_NEXT_RESOURCE_VALUE 389
|
||||||
#define _APS_NEXT_COMMAND_VALUE 33060
|
#define _APS_NEXT_COMMAND_VALUE 33062
|
||||||
#define _APS_NEXT_CONTROL_VALUE 2542
|
#define _APS_NEXT_CONTROL_VALUE 2542
|
||||||
#define _APS_NEXT_SYMED_VALUE 105
|
#define _APS_NEXT_SYMED_VALUE 105
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -107,6 +107,8 @@
|
|||||||
#define WM_TRIAL_WAN_IP_ABUSE WM_USER+3037 // 试用版 IP 段检测:OnAccept 发现入站为公网 IP,通知主窗口弹框
|
#define WM_TRIAL_WAN_IP_ABUSE WM_USER+3037 // 试用版 IP 段检测:OnAccept 发现入站为公网 IP,通知主窗口弹框
|
||||||
#define WM_ACTIVE_LICENSE_NUM WM_USER+3038
|
#define WM_ACTIVE_LICENSE_NUM WM_USER+3038
|
||||||
#define WM_ONLINE_HOSTNUM WM_USER+3039
|
#define WM_ONLINE_HOSTNUM WM_USER+3039
|
||||||
|
#define WM_SPLITTER_MOVED WM_USER+3040
|
||||||
|
#define WM_SPLITTER_RELEASED WM_USER+3041
|
||||||
|
|
||||||
#ifdef _UNICODE
|
#ifdef _UNICODE
|
||||||
#if defined _M_IX86
|
#if defined _M_IX86
|
||||||
|
|||||||
Reference in New Issue
Block a user