Feat: copy selected message log rows to clipboard as CSV
This commit is contained in:
@@ -861,6 +861,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)
|
||||||
@@ -8993,11 +8994,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 +9026,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();
|
||||||
|
|||||||
@@ -538,6 +538,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);
|
||||||
|
|||||||
@@ -1746,6 +1746,7 @@ 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
|
||||||
FRPS 运行在本机=FRPS runs on localhost
|
FRPS 运行在本机=FRPS runs on localhost
|
||||||
内网地址:=LAN Address:
|
内网地址:=LAN Address:
|
||||||
|
|||||||
@@ -1739,6 +1739,7 @@ Ghostִ
|
|||||||
代理=代理
|
代理=代理
|
||||||
勾选: 对下级隐藏 灰色: 上级已禁用=勾選: 對下級隱藏 灰色: 上級已禁用
|
勾选: 对下级隐藏 灰色: 上级已禁用=勾選: 對下級隱藏 灰色: 上級已禁用
|
||||||
删除选中=刪除選中
|
删除选中=刪除選中
|
||||||
|
复制选中=复制選中
|
||||||
清空日志=清空日誌
|
清空日志=清空日誌
|
||||||
FRPS 运行在本机=FRPS 运行在本机
|
FRPS 运行在本机=FRPS 运行在本机
|
||||||
内网地址:=内網地址:
|
内网地址:=内網地址:
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user