mirror of
https://github.com/yuanyuanxiang/SimpleRemoter.git
synced 2026-01-24 16:23:11 +08:00
Improve: Remove F11 to leave full screen (Use popup dialog)
This commit is contained in:
Binary file not shown.
@@ -319,6 +319,7 @@
|
|||||||
<ClInclude Include="sys\ServiceInfoDlg.h" />
|
<ClInclude Include="sys\ServiceInfoDlg.h" />
|
||||||
<ClInclude Include="TalkDlg.h" />
|
<ClInclude Include="TalkDlg.h" />
|
||||||
<ClInclude Include="targetver.h" />
|
<ClInclude Include="targetver.h" />
|
||||||
|
<ClInclude Include="ToolbarDlg.h" />
|
||||||
<ClInclude Include="TrueColorToolBar.h" />
|
<ClInclude Include="TrueColorToolBar.h" />
|
||||||
<ClInclude Include="VideoDlg.h" />
|
<ClInclude Include="VideoDlg.h" />
|
||||||
<ClInclude Include="zconf.h" />
|
<ClInclude Include="zconf.h" />
|
||||||
@@ -406,6 +407,7 @@
|
|||||||
<ClCompile Include="sys\MachineDlg.cpp" />
|
<ClCompile Include="sys\MachineDlg.cpp" />
|
||||||
<ClCompile Include="sys\ServiceInfoDlg.cpp" />
|
<ClCompile Include="sys\ServiceInfoDlg.cpp" />
|
||||||
<ClCompile Include="TalkDlg.cpp" />
|
<ClCompile Include="TalkDlg.cpp" />
|
||||||
|
<ClCompile Include="ToolbarDlg.cpp" />
|
||||||
<ClCompile Include="TrueColorToolBar.cpp" />
|
<ClCompile Include="TrueColorToolBar.cpp" />
|
||||||
<ClCompile Include="VideoDlg.cpp" />
|
<ClCompile Include="VideoDlg.cpp" />
|
||||||
<ClCompile Include="ServerServiceWrapper.cpp" />
|
<ClCompile Include="ServerServiceWrapper.cpp" />
|
||||||
|
|||||||
@@ -60,6 +60,7 @@
|
|||||||
<ClCompile Include="ServerServiceWrapper.cpp" />
|
<ClCompile Include="ServerServiceWrapper.cpp" />
|
||||||
<ClCompile Include="ServerSessionMonitor.cpp" />
|
<ClCompile Include="ServerSessionMonitor.cpp" />
|
||||||
<ClCompile Include="SplashDlg.cpp" />
|
<ClCompile Include="SplashDlg.cpp" />
|
||||||
|
<ClCompile Include="ToolbarDlg.cpp" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\client\Audio.h" />
|
<ClInclude Include="..\..\client\Audio.h" />
|
||||||
@@ -133,6 +134,7 @@
|
|||||||
<ClInclude Include="ServerServiceWrapper.h" />
|
<ClInclude Include="ServerServiceWrapper.h" />
|
||||||
<ClInclude Include="ServerSessionMonitor.h" />
|
<ClInclude Include="ServerSessionMonitor.h" />
|
||||||
<ClInclude Include="SplashDlg.h" />
|
<ClInclude Include="SplashDlg.h" />
|
||||||
|
<ClInclude Include="ToolbarDlg.h" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ResourceCompile Include="2015Remote.rc" />
|
<ResourceCompile Include="2015Remote.rc" />
|
||||||
|
|||||||
@@ -22,5 +22,6 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<RESOURCE_FILE>2015Remote.rc</RESOURCE_FILE>
|
<RESOURCE_FILE>2015Remote.rc</RESOURCE_FILE>
|
||||||
|
<ShowAllFiles>false</ShowAllFiles>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
</Project>
|
</Project>
|
||||||
@@ -139,6 +139,8 @@ CScreenSpyDlg::~CScreenSpyDlg()
|
|||||||
m_pCodec = 0;
|
m_pCodec = 0;
|
||||||
// AVFrame需要清除
|
// AVFrame需要清除
|
||||||
av_frame_unref(&m_AVFrame);
|
av_frame_unref(&m_AVFrame);
|
||||||
|
|
||||||
|
SAFE_DELETE(m_pToolbar);
|
||||||
}
|
}
|
||||||
|
|
||||||
void CScreenSpyDlg::DoDataExchange(CDataExchange* pDX)
|
void CScreenSpyDlg::DoDataExchange(CDataExchange* pDX)
|
||||||
@@ -163,6 +165,7 @@ BEGIN_MESSAGE_MAP(CScreenSpyDlg, CDialog)
|
|||||||
ON_WM_LBUTTONDBLCLK()
|
ON_WM_LBUTTONDBLCLK()
|
||||||
ON_WM_ACTIVATE()
|
ON_WM_ACTIVATE()
|
||||||
ON_WM_TIMER()
|
ON_WM_TIMER()
|
||||||
|
ON_COMMAND(ID_EXIT_FULLSCREEN, &CScreenSpyDlg::OnExitFullscreen)
|
||||||
END_MESSAGE_MAP()
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
|
||||||
@@ -692,6 +695,9 @@ void CScreenSpyDlg::OnTimer(UINT_PTR nIDEvent)
|
|||||||
SetTextColor(m_hFullDC, RGB(0xff, 0x00, 0x00));
|
SetTextColor(m_hFullDC, RGB(0xff, 0x00, 0x00));
|
||||||
TextOut(m_hFullDC, 0, 0, lpTipsString, lstrlen(lpTipsString));
|
TextOut(m_hFullDC, 0, 0, lpTipsString, lstrlen(lpTipsString));
|
||||||
}
|
}
|
||||||
|
if (nIDEvent == 1 && m_bFullScreen && m_pToolbar) {
|
||||||
|
m_pToolbar->CheckMousePosition();
|
||||||
|
}
|
||||||
CDialog::OnTimer(nIDEvent);
|
CDialog::OnTimer(nIDEvent);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -717,8 +723,15 @@ BOOL CScreenSpyDlg::PreTranslateMessage(MSG* pMsg)
|
|||||||
case WM_KEYUP:
|
case WM_KEYUP:
|
||||||
case WM_SYSKEYDOWN:
|
case WM_SYSKEYDOWN:
|
||||||
case WM_SYSKEYUP:
|
case WM_SYSKEYUP:
|
||||||
if (pMsg->wParam == VK_F11 && LeaveFullScreen()) // F11: 退出全屏
|
if (pMsg->message == WM_KEYDOWN && m_bFullScreen) {
|
||||||
return TRUE;
|
// Ctrl+Alt+Home 退出全屏(备用)
|
||||||
|
if (pMsg->wParam == VK_HOME &&
|
||||||
|
(GetKeyState(VK_CONTROL) & 0x8000) &&
|
||||||
|
(GetKeyState(VK_MENU) & 0x8000)) {
|
||||||
|
LeaveFullScreen();
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (pMsg->wParam != VK_LWIN && pMsg->wParam != VK_RWIN) {
|
if (pMsg->wParam != VK_LWIN && pMsg->wParam != VK_RWIN) {
|
||||||
SendScaledMouseMessage(pMsg, true);
|
SendScaledMouseMessage(pMsg, true);
|
||||||
}
|
}
|
||||||
@@ -957,8 +970,18 @@ void CScreenSpyDlg::EnterFullScreen()
|
|||||||
SetWindowPos(&CWnd::wndTop, rcMonitor.left, rcMonitor.top, rcMonitor.right - rcMonitor.left,
|
SetWindowPos(&CWnd::wndTop, rcMonitor.left, rcMonitor.top, rcMonitor.right - rcMonitor.left,
|
||||||
rcMonitor.bottom - rcMonitor.top, SWP_NOZORDER | SWP_FRAMECHANGED);
|
rcMonitor.bottom - rcMonitor.top, SWP_NOZORDER | SWP_FRAMECHANGED);
|
||||||
|
|
||||||
|
if (!m_pToolbar) {
|
||||||
|
m_pToolbar = new CToolbarDlg(this);
|
||||||
|
m_pToolbar->Create(IDD_TOOLBAR_DLG, this);
|
||||||
|
int cx = GetSystemMetrics(SM_CXSCREEN);
|
||||||
|
int cy = GetSystemMetrics(SM_CYSCREEN);
|
||||||
|
m_pToolbar->SetWindowPos(&wndTopMost, 0, -40, cx, 40, SWP_HIDEWINDOW);
|
||||||
|
}
|
||||||
|
|
||||||
// 7. 标记全屏模式
|
// 7. 标记全屏模式
|
||||||
m_bFullScreen = true;
|
m_bFullScreen = true;
|
||||||
|
|
||||||
|
SetTimer(1, 200, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -966,6 +989,13 @@ void CScreenSpyDlg::EnterFullScreen()
|
|||||||
bool CScreenSpyDlg::LeaveFullScreen()
|
bool CScreenSpyDlg::LeaveFullScreen()
|
||||||
{
|
{
|
||||||
if (m_bFullScreen) {
|
if (m_bFullScreen) {
|
||||||
|
KillTimer(1);
|
||||||
|
if (m_pToolbar) {
|
||||||
|
m_pToolbar->DestroyWindow();
|
||||||
|
delete m_pToolbar;
|
||||||
|
m_pToolbar = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
// 1. 恢复窗口样式
|
// 1. 恢复窗口样式
|
||||||
LONG lStyle = GetWindowLong(m_hWnd, GWL_STYLE);
|
LONG lStyle = GetWindowLong(m_hWnd, GWL_STYLE);
|
||||||
lStyle |= (WS_CAPTION | WS_THICKFRAME | WS_BORDER);
|
lStyle |= (WS_CAPTION | WS_THICKFRAME | WS_BORDER);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@
|
|||||||
#include "IOCPServer.h"
|
#include "IOCPServer.h"
|
||||||
#include "..\..\client\CursorInfo.h"
|
#include "..\..\client\CursorInfo.h"
|
||||||
#include "VideoDlg.h"
|
#include "VideoDlg.h"
|
||||||
|
#include "ToolbarDlg.h"
|
||||||
|
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
@@ -42,6 +43,7 @@ extern "C"
|
|||||||
class CScreenSpyDlg : public DialogBase
|
class CScreenSpyDlg : public DialogBase
|
||||||
{
|
{
|
||||||
DECLARE_DYNAMIC(CScreenSpyDlg)
|
DECLARE_DYNAMIC(CScreenSpyDlg)
|
||||||
|
CToolbarDlg* m_pToolbar = nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CScreenSpyDlg(CWnd* Parent, Server* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL);
|
CScreenSpyDlg(CWnd* Parent, Server* IOCPServer=NULL, CONTEXT_OBJECT *ContextObject=NULL);
|
||||||
@@ -120,6 +122,9 @@ public:
|
|||||||
afx_msg void OnKillFocus(CWnd* pNewWnd);
|
afx_msg void OnKillFocus(CWnd* pNewWnd);
|
||||||
afx_msg void OnSize(UINT nType, int cx, int cy);
|
afx_msg void OnSize(UINT nType, int cx, int cy);
|
||||||
afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);
|
afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);
|
||||||
|
afx_msg void OnExitFullscreen() {
|
||||||
|
LeaveFullScreen();
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
|
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV ֧<><D6A7>
|
||||||
|
|||||||
108
server/2015Remote/ToolbarDlg.cpp
Normal file
108
server/2015Remote/ToolbarDlg.cpp
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
#include "stdafx.h"
|
||||||
|
#include "ToolbarDlg.h"
|
||||||
|
#include "2015RemoteDlg.h"
|
||||||
|
|
||||||
|
IMPLEMENT_DYNAMIC(CToolbarDlg, CDialogEx)
|
||||||
|
|
||||||
|
CToolbarDlg::CToolbarDlg(CWnd* pParent)
|
||||||
|
: CDialogEx(IDD_TOOLBAR_DLG, pParent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
CToolbarDlg::~CToolbarDlg()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void CToolbarDlg::DoDataExchange(CDataExchange* pDX)
|
||||||
|
{
|
||||||
|
CDialogEx::DoDataExchange(pDX);
|
||||||
|
}
|
||||||
|
|
||||||
|
BEGIN_MESSAGE_MAP(CToolbarDlg, CDialogEx)
|
||||||
|
ON_BN_CLICKED(IDC_BTN_EXIT_FULLSCREEN, &CToolbarDlg::OnBnClickedExitFullscreen)
|
||||||
|
ON_BN_CLICKED(IDC_BTN_MINIMIZE, &CToolbarDlg::OnBnClickedMinimize)
|
||||||
|
ON_BN_CLICKED(IDC_BTN_CLOSE, &CToolbarDlg::OnBnClickedClose)
|
||||||
|
END_MESSAGE_MAP()
|
||||||
|
|
||||||
|
void CToolbarDlg::CheckMousePosition()
|
||||||
|
{
|
||||||
|
CPoint pt;
|
||||||
|
GetCursorPos(&pt);
|
||||||
|
|
||||||
|
if (pt.y <= 2) {
|
||||||
|
if (!m_bVisible) SlideIn();
|
||||||
|
}
|
||||||
|
else if (pt.y > m_nHeight + 20) {
|
||||||
|
if (m_bVisible) SlideOut();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void CToolbarDlg::SlideIn()
|
||||||
|
{
|
||||||
|
m_bVisible = true;
|
||||||
|
ShowWindow(SW_SHOWNOACTIVATE);
|
||||||
|
|
||||||
|
int cx = GetSystemMetrics(SM_CXSCREEN);
|
||||||
|
for (int y = -m_nHeight; y <= 0; y += 8) {
|
||||||
|
SetWindowPos(&wndTopMost, 0, y, cx, m_nHeight, SWP_NOACTIVATE);
|
||||||
|
Sleep(10);
|
||||||
|
}
|
||||||
|
SetWindowPos(&wndTopMost, 0, 0, cx, m_nHeight, SWP_NOACTIVATE);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CToolbarDlg::SlideOut()
|
||||||
|
{
|
||||||
|
int cx = GetSystemMetrics(SM_CXSCREEN);
|
||||||
|
for (int y = 0; y >= -m_nHeight; y -= 8) {
|
||||||
|
SetWindowPos(&wndTopMost, 0, y, cx, m_nHeight, SWP_NOACTIVATE);
|
||||||
|
Sleep(10);
|
||||||
|
}
|
||||||
|
ShowWindow(SW_HIDE);
|
||||||
|
m_bVisible = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CToolbarDlg::OnBnClickedExitFullscreen()
|
||||||
|
{
|
||||||
|
// 通知父窗口退出全屏
|
||||||
|
GetParent()->PostMessage(WM_COMMAND, ID_EXIT_FULLSCREEN, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CToolbarDlg::OnBnClickedMinimize()
|
||||||
|
{
|
||||||
|
GetParent()->ShowWindow(SW_MINIMIZE);
|
||||||
|
SlideOut();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CToolbarDlg::OnBnClickedClose()
|
||||||
|
{
|
||||||
|
GetParent()->PostMessage(WM_CLOSE);
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL CToolbarDlg::OnInitDialog()
|
||||||
|
{
|
||||||
|
CDialogEx::OnInitDialog();
|
||||||
|
|
||||||
|
// 设置分层窗口样式
|
||||||
|
ModifyStyleEx(0, WS_EX_LAYERED);
|
||||||
|
|
||||||
|
// 设置透明度 (0-255)
|
||||||
|
SetLayeredWindowAttributes(0, 100, LWA_ALPHA);
|
||||||
|
|
||||||
|
// 按钮居中代码...
|
||||||
|
int cx = GetSystemMetrics(SM_CXSCREEN);
|
||||||
|
int btnWidth = 80;
|
||||||
|
int btnHeight = 28;
|
||||||
|
int btnSpacing = 10;
|
||||||
|
int totalWidth = btnWidth * 3 + btnSpacing * 2;
|
||||||
|
int startX = (cx - totalWidth) / 2;
|
||||||
|
int y = (m_nHeight - btnHeight) / 2;
|
||||||
|
|
||||||
|
GetDlgItem(IDC_BTN_EXIT_FULLSCREEN)->SetWindowPos(NULL,
|
||||||
|
startX, y, btnWidth, btnHeight, SWP_NOZORDER);
|
||||||
|
GetDlgItem(IDC_BTN_MINIMIZE)->SetWindowPos(NULL,
|
||||||
|
startX + btnWidth + btnSpacing, y, btnWidth, btnHeight, SWP_NOZORDER);
|
||||||
|
GetDlgItem(IDC_BTN_CLOSE)->SetWindowPos(NULL,
|
||||||
|
startX + (btnWidth + btnSpacing) * 2, y, btnWidth, btnHeight, SWP_NOZORDER);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
30
server/2015Remote/ToolbarDlg.h
Normal file
30
server/2015Remote/ToolbarDlg.h
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "Resource.h"
|
||||||
|
|
||||||
|
class CToolbarDlg : public CDialogEx
|
||||||
|
{
|
||||||
|
DECLARE_DYNAMIC(CToolbarDlg)
|
||||||
|
|
||||||
|
public:
|
||||||
|
CToolbarDlg(CWnd* pParent = nullptr);
|
||||||
|
virtual ~CToolbarDlg();
|
||||||
|
|
||||||
|
enum { IDD = IDD_TOOLBAR_DLG };
|
||||||
|
|
||||||
|
int m_nHeight = 40;
|
||||||
|
bool m_bVisible = false;
|
||||||
|
|
||||||
|
void SlideIn();
|
||||||
|
void SlideOut();
|
||||||
|
void CheckMousePosition();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void DoDataExchange(CDataExchange* pDX);
|
||||||
|
DECLARE_MESSAGE_MAP()
|
||||||
|
|
||||||
|
public:
|
||||||
|
afx_msg void OnBnClickedExitFullscreen();
|
||||||
|
afx_msg void OnBnClickedMinimize();
|
||||||
|
afx_msg void OnBnClickedClose();
|
||||||
|
virtual BOOL OnInitDialog();
|
||||||
|
};
|
||||||
Binary file not shown.
Reference in New Issue
Block a user