diff --git a/server/2015Remote/2015Remote.rc b/server/2015Remote/2015Remote.rc index 4657c80..d9bb5a9 100644 Binary files a/server/2015Remote/2015Remote.rc and b/server/2015Remote/2015Remote.rc differ diff --git a/server/2015Remote/CIconButton.cpp b/server/2015Remote/CIconButton.cpp index ec28ed9..1b58e2e 100644 --- a/server/2015Remote/CIconButton.cpp +++ b/server/2015Remote/CIconButton.cpp @@ -551,6 +551,18 @@ void CIconButton::DrawIconLetterZ(CDC* pDC, const CRect& rc) DrawLetterIcon(pDC, rc, _T("Z")); } +// Letter C icon (获取剪贴板) +void CIconButton::DrawIconLetterC(CDC* pDC, const CRect& rc) +{ + DrawLetterIcon(pDC, rc, _T("C")); +} + +// Letter P icon (设置剪贴板) +void CIconButton::DrawIconLetterP(CDC* pDC, const CRect& rc) +{ + DrawLetterIcon(pDC, rc, _T("P")); +} + // Audio On: speaker with sound waves void CIconButton::DrawIconAudioOn(CDC* pDC, const CRect& rc) { diff --git a/server/2015Remote/CIconButton.h b/server/2015Remote/CIconButton.h index 67f5b13..bde31d5 100644 --- a/server/2015Remote/CIconButton.h +++ b/server/2015Remote/CIconButton.h @@ -46,6 +46,8 @@ public: static void DrawIconLetterX(CDC* pDC, const CRect& rc); // 字母 X 图标 static void DrawIconLetterY(CDC* pDC, const CRect& rc); // 字母 Y 图标 static void DrawIconLetterZ(CDC* pDC, const CRect& rc); // 字母 Z 图标 + static void DrawIconLetterC(CDC* pDC, const CRect& rc); // 字母 C 图标 (获取剪贴板) + static void DrawIconLetterP(CDC* pDC, const CRect& rc); // 字母 P 图标 (设置剪贴板) static void DrawIconAudioOn(CDC* pDC, const CRect& rc); // 音频开启图标 (喇叭+声波) static void DrawIconAudioOff(CDC* pDC, const CRect& rc); // 音频关闭图标 (喇叭+斜线) diff --git a/server/2015Remote/ToolbarDlg.cpp b/server/2015Remote/ToolbarDlg.cpp index 329301d..670cd8d 100644 --- a/server/2015Remote/ToolbarDlg.cpp +++ b/server/2015Remote/ToolbarDlg.cpp @@ -39,6 +39,8 @@ BEGIN_MESSAGE_MAP(CToolbarDlg, CDialogEx) ON_BN_CLICKED(IDC_BTN_Y, &CToolbarDlg::OnBnClickedY) ON_BN_CLICKED(IDC_BTN_Z, &CToolbarDlg::OnBnClickedZ) ON_BN_CLICKED(IDC_BTN_SCREENSHOT, &CToolbarDlg::OnBnClickedScreenshot) + ON_BN_CLICKED(IDC_BTN_GET_CLIPBOARD, &CToolbarDlg::OnBnClickedGetClipboard) + ON_BN_CLICKED(IDC_BTN_SET_CLIPBOARD, &CToolbarDlg::OnBnClickedSetClipboard) ON_WM_ERASEBKGND() END_MESSAGE_MAP() @@ -88,7 +90,7 @@ void CToolbarDlg::CheckMousePosition() int monWidth = monRight - monLeft; int monHeight = monBottom - monTop; - int btnSize = 32, btnSpacing = 8, btnCount = 16; + int btnSize = 32, btnSpacing = 8, btnCount = 18; if (m_nPosition <= 1) { // 水平模式 (上/下) @@ -153,9 +155,9 @@ void CToolbarDlg::SlideIn() int monWidth = monRight - monLeft; int monHeight = monBottom - monTop; - int hw = 640; // 水平工具栏宽度 (与垂直高度一致) + int hw = 720; // 水平工具栏宽度 (与垂直高度一致) int vw = 40; - int vh = 640; + int vh = 720; // 从边缘展开(改变窗口大小),避免多显示器时跑到相邻屏幕 switch (m_nPosition) { @@ -212,9 +214,9 @@ void CToolbarDlg::SlideOut() int monWidth = monRight - monLeft; int monHeight = monBottom - monTop; - int hw = 640; + int hw = 720; int vw = 40; - int vh = 640; + int vh = 720; CWnd* btns[] = { &m_btnExit, &m_btnControl, @@ -224,9 +226,10 @@ void CToolbarDlg::SlideOut() &m_btnQuality, &m_btnRestoreConsole, &m_btnX, &m_btnY, &m_btnZ, &m_btnScreenshot, + &m_btnGetClipboard, &m_btnSetClipboard, &m_btnMinimize, &m_btnClose, }; - const int N = 16; + const int N = 18; CRect btnRects[N]; for (int i = 0; i < N; i++) { btns[i]->GetWindowRect(&btnRects[i]); @@ -331,6 +334,8 @@ BOOL CToolbarDlg::OnInitDialog() m_btnY.SubclassDlgItem(IDC_BTN_Y, this); m_btnZ.SubclassDlgItem(IDC_BTN_Z, this); m_btnScreenshot.SubclassDlgItem(IDC_BTN_SCREENSHOT, this); + m_btnGetClipboard.SubclassDlgItem(IDC_BTN_GET_CLIPBOARD, this); + m_btnSetClipboard.SubclassDlgItem(IDC_BTN_SET_CLIPBOARD, this); m_btnMinimize.SubclassDlgItem(IDC_BTN_MINIMIZE, this); m_btnClose.SubclassDlgItem(IDC_BTN_CLOSE, this); @@ -343,6 +348,8 @@ BOOL CToolbarDlg::OnInitDialog() // Y按钮图标在 UpdateButtonIcons 中根据音频状态动态设置 m_btnZ.SetIconDrawFunc(CIconButton::DrawIconLetterZ); // 预留按钮 Z m_btnScreenshot.SetIconDrawFunc(CIconButton::DrawIconScreenshot); + m_btnGetClipboard.SetIconDrawFunc(CIconButton::DrawIconLetterC); + m_btnSetClipboard.SetIconDrawFunc(CIconButton::DrawIconLetterP); m_btnMinimize.SetIconDrawFunc(CIconButton::DrawIconMinimize); m_btnClose.SetIconDrawFunc(CIconButton::DrawIconClose); m_btnClose.SetIsCloseButton(true); @@ -367,6 +374,8 @@ BOOL CToolbarDlg::OnInitDialog() m_tooltip.AddTool(&m_btnY, pParent->m_Settings.AudioEnabled ? _TR("关闭系统音频") : _TR("打开系统音频")); m_tooltip.AddTool(&m_btnZ, _TR("选择ROI")); m_tooltip.AddTool(&m_btnScreenshot, _TR("截图")); + m_tooltip.AddTool(&m_btnGetClipboard, _TR("获取剪贴板")); + m_tooltip.AddTool(&m_btnSetClipboard, _TR("设置剪贴板")); m_tooltip.AddTool(&m_btnMinimize, _TR("最小化")); m_tooltip.AddTool(&m_btnClose, _TR("关闭")); @@ -383,9 +392,9 @@ BOOL CToolbarDlg::OnInitDialog() int monWidth = rcMonitor.right - rcMonitor.left; int monHeight = rcMonitor.bottom - rcMonitor.top; - int hw = 640; + int hw = 720; int vw = 40; - int vh = 640; + int vh = 720; int hx = rcMonitor.left + (monWidth - hw) / 2; switch (m_nPosition) { @@ -514,7 +523,7 @@ void CToolbarDlg::LayoutButtons() { int btnSize = 32; int btnSpacing = 8; - int btnCount = 16; + int btnCount = 18; CWnd* btns[] = { &m_btnExit, @@ -531,6 +540,8 @@ void CToolbarDlg::LayoutButtons() &m_btnY, // 预留按钮 Y &m_btnZ, // 预留按钮 Z &m_btnScreenshot, + &m_btnGetClipboard, + &m_btnSetClipboard, &m_btnMinimize, &m_btnClose, }; @@ -588,9 +599,9 @@ void CToolbarDlg::UpdatePosition() int monWidth = rcMonitor.right - rcMonitor.left; int monHeight = rcMonitor.bottom - rcMonitor.top; - int hw = 640; + int hw = 720; int vw = 40; - int vh = 640; + int vh = 720; int hx = rcMonitor.left + (monWidth - hw) / 2; switch (m_nPosition) { @@ -785,6 +796,18 @@ void CToolbarDlg::OnBnClickedScreenshot() } } +void CToolbarDlg::OnBnClickedGetClipboard() +{ + // 与系统菜单 IDM_GET_CLIPBOARD 相同的处理逻辑 + GetParent()->PostMessage(WM_SYSCOMMAND, IDM_GET_CLIPBOARD, 0); +} + +void CToolbarDlg::OnBnClickedSetClipboard() +{ + // 与系统菜单 IDM_SET_CLIPBOARD 相同的处理逻辑 + GetParent()->PostMessage(WM_SYSCOMMAND, IDM_SET_CLIPBOARD, 0); +} + BOOL CToolbarDlg::PreTranslateMessage(MSG* pMsg) { if (m_tooltip.GetSafeHwnd()) { diff --git a/server/2015Remote/ToolbarDlg.h b/server/2015Remote/ToolbarDlg.h index c150fde..c323d50 100644 --- a/server/2015Remote/ToolbarDlg.h +++ b/server/2015Remote/ToolbarDlg.h @@ -39,6 +39,8 @@ public: CIconButton m_btnY; // 预留按钮 Y CIconButton m_btnZ; // 预留按钮 Z CIconButton m_btnScreenshot; + CIconButton m_btnGetClipboard; // 获取剪贴板 + CIconButton m_btnSetClipboard; // 设置剪贴板 CIconButton m_btnMinimize; CIconButton m_btnClose; @@ -80,6 +82,8 @@ public: afx_msg void OnBnClickedY(); // 预留按钮 Y 响应函数 afx_msg void OnBnClickedZ(); // 预留按钮 Z 响应函数 afx_msg void OnBnClickedScreenshot(); + afx_msg void OnBnClickedGetClipboard(); + afx_msg void OnBnClickedSetClipboard(); afx_msg BOOL OnEraseBkgnd(CDC* pDC); virtual BOOL OnInitDialog(); }; diff --git a/server/2015Remote/lang/en_US.ini b/server/2015Remote/lang/en_US.ini index 03b2514..12a898b 100644 --- a/server/2015Remote/lang/en_US.ini +++ b/server/2015Remote/lang/en_US.ini @@ -231,6 +231,8 @@ RTT=RTT =Send Back ͸=Opacity ͼ=Capture +ȡ=Get Clipboard +ü=Set Clipboard ; ============================================ ; Settings Dialog diff --git a/server/2015Remote/lang/zh_TW.ini b/server/2015Remote/lang/zh_TW.ini index 5bc825f..f2247c0 100644 --- a/server/2015Remote/lang/zh_TW.ini +++ b/server/2015Remote/lang/zh_TW.ini @@ -230,6 +230,8 @@ RTT=RTT =Œ ͸=͸ ͼ=XȡΞĻ +ȡ=ȡüN +ü=ON ; ============================================ ; Settings Dialog diff --git a/server/2015Remote/resource.h b/server/2015Remote/resource.h index 6b39021..6360ab1 100644 --- a/server/2015Remote/resource.h +++ b/server/2015Remote/resource.h @@ -582,6 +582,8 @@ #define IDC_BTN_X 2312 #define IDC_BTN_Y 2313 #define IDC_BTN_Z 2314 +#define IDC_BTN_GET_CLIPBOARD 2315 +#define IDC_BTN_SET_CLIPBOARD 2316 #define IDC_STATIC_ABOUTBOX_YamaV12_2340 2340 #define IDC_STATIC_ABOUTBOX_Copyleft__2341 2341 #define IDC_STATIC_FILE_MANAGER_LOCAL_PATH 2342