dlgfullscreen.cpp
来自「简单的远程控制工具,分为服务器与客户斋,让你了解socket编程的知识.」· C++ 代码 · 共 437 行
CPP
437 行
// DlgFullScreen.cpp : implementation file
//
#include "resource.H"
#include "stdafx.h"
#include "Ctrl_Clnt9.h"
#include "DlgFullScreen.h"
#include "Windowsx.h"
#include "key.h"
#include "SendMsg.H"
#include "..\\CtrlSrvr2\\jpegfile.H"
#include "DlgGetPos.h"
//DEL #include "Key.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CDlgFullScreen dialog
CDlgFullScreen::CDlgFullScreen(CWnd* pParent /*=NULL*/)
: CDialog(CDlgFullScreen::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgFullScreen)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
m_pParent =(CDlgGetPos *) pParent;
m_nID = CDlgFullScreen::IDD;
m_way = 0;
// m_nID = IDD_DIALOG_FULLSCREEN;
}
BOOL CDlgFullScreen::Create(CCtrl_Clnt9Doc * pDoc)
{
m_pDoc = pDoc;
//DEL if (CmdProc_LogHook() == FALSE) {
//DEL AfxMessageBox("Error in create key hook!!!");
//DEL return FALSE;
//DEL }
//Save Old
HDC hDC;
hDC = CreateDC("DISPLAY",NULL,NULL,NULL);
m_nOldBits = GetDeviceCaps(hDC, BITSPIXEL);
m_nOldBits = m_nOldBits * GetDeviceCaps(hDC, PLANES);
DeleteDC (hDC);
m_rcOldArea = CRect(0,0,GetSystemMetrics (SM_CXSCREEN),GetSystemMetrics (SM_CYSCREEN));
//Set New
DEVMODE lpDevMode;
lpDevMode.dmBitsPerPel=pDoc->m_nSrvrBits;
lpDevMode.dmPelsWidth=pDoc->m_SrvrArea.Width();
lpDevMode.dmPelsHeight=pDoc->m_SrvrArea.Height();
lpDevMode.dmSize=sizeof(lpDevMode);
lpDevMode.dmFields =DM_PELSWIDTH|DM_PELSHEIGHT|DM_BITSPERPEL;
LONG result;
result=ChangeDisplaySettings(&lpDevMode,0);
return CDialog::Create(m_nID, m_pParent);
}
void CDlgFullScreen::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgFullScreen)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgFullScreen, CDialog)
//{{AFX_MSG_MAP(CDlgFullScreen)
ON_WM_PAINT()
ON_WM_RBUTTONDOWN()
ON_WM_LBUTTONDBLCLK()
ON_WM_LBUTTONDOWN()
ON_WM_RBUTTONDBLCLK()
ON_WM_LBUTTONUP()
ON_WM_RBUTTONUP()
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgFullScreen message handlers
void CDlgFullScreen::PostNcDestroy()
{
// TODO: Add your specialized code here and/or call the base class
delete this;
}
void CDlgFullScreen::OnPaint()
{
CPaintDC dc(this); // device context for painting
Set_BackGroud_Image();
/* // TODO: Add your message handler code here
CDlgGetPos *pWnd = (CDlgGetPos *)m_pParent;
int nLeft = 0, nTop = 0, nWidth, nHeight;
CRect rc;
GetClientRect (&rc);
nLeft = rc.left;
nTop = rc.top;
if (pWnd->m_nBmpWidth <= rc.Width ())
{
nWidth = pWnd->m_nBmpWidth;
nLeft = (rc.Width()-pWnd->m_nBmpWidth)/2;
}
else
nWidth = rc.Width ();
if (pWnd->m_nBmpHeight <= rc.Height ())
{
nHeight = pWnd->m_nBmpHeight;
nTop = (rc.Height()-pWnd->m_nBmpHeight)/2;
}
else
nHeight = rc.Height ();
if (m_hMemDC !=NULL)
StretchBlt (dc.m_hDC, nLeft, nTop, nWidth, nHeight,
m_hMemDC,0,0,pWnd->m_nBmpWidth,pWnd->m_nBmpHeight,SRCCOPY);
*/
// Do not call CDialog::OnPaint() for painting messages
}
void CDlgFullScreen::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (m_pParent->m_bChkControl)
{
m_pDoc->m_dwHookFlags = MOUSEEVENTF_RIGHTDOWN;
m_pDoc->m_dwHookParam1 = point.x;
m_pDoc->m_dwHookParam2 = point.y;
SendMsg (CMD_MOUSE_HOOK);
return;
}
((CDlgGetPos *)m_pParent)->m_pDlgFullScreen = NULL;
DestroyWindow ();
}
BOOL CDlgFullScreen::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
// SetWindowPos (NULL,0,0,500,600,0);
ShowWindow (SW_SHOWMAXIMIZED);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CDlgFullScreen::PreTranslateMessage(MSG* pMsg)
{
CDlgGetPos *pWnd = (CDlgGetPos *)m_pParent;
// TODO: Add your specialized code here and/or call the base class
if (pMsg->message == WM_KEYDOWN)
{
if (pMsg->wParam == VK_F12)
{
((CDlgGetPos *)m_pParent)->m_pDlgFullScreen = NULL;
DestroyWindow ();
return TRUE;
}
}
if(pMsg->message == WM_SENDKEY_DOWN)
{
BYTE vKey,nScan;
vKey = (BYTE) pMsg->wParam;
nScan = (BYTE) (pMsg->lParam & 0x00ff0000)>>16;
m_pDoc->m_dwHookFlags = 0;
m_pDoc->m_dwHookParam1 = vKey;
m_pDoc->m_dwHookParam2 = nScan;
SendMsg (CMD_KEY_HOOK);
}
// if(pMsg->message == WM_KEYUP ||
// pMsg->message == WM_SYSKEYUP)
if(pMsg->message == WM_SENDKEY_UP)
{
BYTE vKey,nScan;
vKey = (BYTE) pMsg->wParam;
nScan = (BYTE) (pMsg->lParam & 0x00ff0000)>>16;
m_pDoc->m_dwHookFlags = KEYEVENTF_KEYUP;
m_pDoc->m_dwHookParam1 = vKey;
m_pDoc->m_dwHookParam2 = nScan;
SendMsg (CMD_KEY_HOOK);
}
if((pMsg->message == WM_KEYDOWN ||
pMsg->message == WM_SYSKEYDOWN ||
pMsg->message == WM_KEYUP ||
pMsg->message == WM_SYSKEYUP) &&
pWnd->m_bChkControl == TRUE)
return true;
/* if( pMsg->message == WM_LBUTTONDOWN || pMsg->message == WM_LBUTTONUP ||
pMsg->message == WM_RBUTTONDOWN || pMsg->message == WM_RBUTTONUP)
{
CPoint pt;
pt = CPoint (GET_X_LPARAM (pMsg->lParam),GET_Y_LPARAM (pMsg->lParam));
m_pDoc->m_dwHookFlags = MOUSEEVENTF_MOVE | MOUSEEVENTF_ABSOLUTE;
m_pDoc->m_dwHookParam1 = pt.x;
m_pDoc->m_dwHookParam2 = pt.y;
SendMsg (CMD_MOUSE_HOOK);
switch (pMsg->message)
{
case WM_LBUTTONDOWN:
m_pDoc->m_dwHookFlags = MOUSEEVENTF_LEFTDOWN;
break;
case WM_LBUTTONUP:
m_pDoc->m_dwHookFlags = MOUSEEVENTF_LEFTUP;
break;
case WM_RBUTTONDOWN:
m_pDoc->m_dwHookFlags = MOUSEEVENTF_RIGHTDOWN;
break;
case WM_RBUTTONUP:
m_pDoc->m_dwHookFlags = MOUSEEVENTF_RIGHTUP;
break;
default:
break;
}
// m_oStaArea.ClientToScreen (&pt);
m_pDoc->m_dwHookFlags |= MOUSEEVENTF_ABSOLUTE;
m_pDoc->m_dwHookParam1 = pt.x;
m_pDoc->m_dwHookParam2 = pt.y;
// m_pDoc->SendMsg (CMD_MOUSE_HOOK);
SendMsg (CMD_MOUSE_HOOK);
}
*/
return CDialog::PreTranslateMessage(pMsg);
}
BOOL CDlgFullScreen::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
//DEL CmdProc_EndHook();
//DEL m_pDoc->m_iSendPoint = 0;
//DEL m_pDoc->m_bBusy = FALSE;
m_pParent->m_pDlgFullScreen = NULL;
m_pParent->m_bFullScreen = FALSE;
//Resore
DEVMODE lpDevMode;
lpDevMode.dmBitsPerPel=m_nOldBits;
lpDevMode.dmPelsWidth=m_rcOldArea.right;
lpDevMode.dmPelsHeight=m_rcOldArea.bottom;
lpDevMode.dmSize=sizeof(lpDevMode);
lpDevMode.dmFields =DM_PELSWIDTH|DM_PELSHEIGHT|DM_BITSPERPEL;
LONG result;
result=ChangeDisplaySettings(&lpDevMode,0);
return CDialog::DestroyWindow();
}
void CDlgFullScreen::Set_BackGroud_Image()
{
if (m_pParent->m_lpImageData==NULL) return;
// CDC *theDC = m_oStaArea.GetWindowDC ();
CDC *theDC = GetWindowDC();
if (theDC!=NULL) {
// a 24-bit DIB is DWORD-aligned, vertically flipped and
// has Red and Blue bytes swapped. we already did the
// RGB->BGR and the flip when we read the images, now do
// the DWORD-align
BYTE *tmp = m_pParent->m_lpImageData;
// DWORD-align for display
/* UINT m_widthDW;
tmp = JpegFile::MakeDwordAlignedBuf((BYTE *)m_pParent->m_lpImageData,
m_pParent->m_nBmpWidth,
m_pParent->m_nBmpHeight,
&m_widthDW);
if (tmp == NULL) return;
*/
// set up a DIB
BITMAPINFOHEADER bmiHeader;
bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmiHeader.biWidth = m_pParent->m_nBmpWidth;
bmiHeader.biHeight = m_pParent->m_nBmpHeight;
bmiHeader.biPlanes = 1;
bmiHeader.biBitCount = 24;
bmiHeader.biCompression = BI_RGB;
bmiHeader.biSizeImage = 0;
bmiHeader.biXPelsPerMeter = 0;
bmiHeader.biYPelsPerMeter = 0;
bmiHeader.biClrUsed = 0;
bmiHeader.biClrImportant = 0;
// now blast it to the CDC passed in.
// lines returns the number of lines actually displayed
int lines = StretchDIBits(theDC->m_hDC,
m_pParent->m_nBmpTop,
m_pParent->m_nBmpLeft,/*0, 0,*/
bmiHeader.biWidth,
bmiHeader.biHeight,
0,0,
bmiHeader.biWidth,
bmiHeader.biHeight,
tmp,
(LPBITMAPINFO)&bmiHeader,
DIB_RGB_COLORS,
SRCCOPY);
ReleaseDC(theDC);
}
// CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
/* CDC* pDC;
pDC = GetWindowDC();
CDlgGetPos *pWnd = (CDlgGetPos *)m_pParent;
int nLeft = 0, nTop = 0, nWidth, nHeight;
CRect rc;
GetClientRect (&rc);
nLeft = rc.left;
nTop = rc.top;
if (pWnd->m_nBmpWidth <= rc.Width ())
{
nWidth = pWnd->m_nBmpWidth;
nLeft = (rc.Width()-pWnd->m_nBmpWidth)/2;
}
else
nWidth = rc.Width ();
if (pWnd->m_nBmpHeight <= rc.Height ())
{
nHeight = pWnd->m_nBmpHeight;
nTop = (rc.Height()-pWnd->m_nBmpHeight)/2;
}
else
nHeight = rc.Height ();
if (m_hMemDC !=NULL)
StretchBlt (pDC->m_hDC, nLeft, nTop, nWidth, nHeight,
m_hMemDC,0,0,pWnd->m_nBmpWidth,pWnd->m_nBmpHeight,SRCCOPY);
*/
}
void CDlgFullScreen::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (m_pParent->m_bChkControl)
{
m_pDoc->m_dwHookFlags = CMD_MOUSE_LDBCLICK;
m_pDoc->m_dwHookParam1 = point.x;
m_pDoc->m_dwHookParam2 = point.y;
SendMsg (CMD_MOUSE_DBHOOK);
return;
}
CDialog::OnLButtonDblClk(nFlags, point);
}
void CDlgFullScreen::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (m_pParent->m_bChkControl)
{
m_pDoc->m_dwHookFlags = MOUSEEVENTF_LEFTDOWN;
m_pDoc->m_dwHookParam1 = point.x;
m_pDoc->m_dwHookParam2 = point.y;
SendMsg (CMD_MOUSE_HOOK);
return;
}
CDialog::OnLButtonDown(nFlags, point);
}
void CDlgFullScreen::OnRButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (m_pParent->m_bChkControl)
{
m_pDoc->m_dwHookFlags = CMD_MOUSE_RDBCLICK;
m_pDoc->m_dwHookParam1 = point.x;
m_pDoc->m_dwHookParam2 = point.y;
SendMsg (CMD_MOUSE_DBHOOK);
return;
}
CDialog::OnRButtonDblClk(nFlags, point);
}
void CDlgFullScreen::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (m_pParent->m_bChkControl)
{
m_pDoc->m_dwHookFlags = MOUSEEVENTF_LEFTUP;
m_pDoc->m_dwHookParam1 = point.x;
m_pDoc->m_dwHookParam2 = point.y;
SendMsg (CMD_MOUSE_HOOK);
return;
}
CDialog::OnLButtonUp(nFlags, point);
}
void CDlgFullScreen::OnRButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (m_pParent->m_bChkControl)
{
m_pDoc->m_dwHookFlags = MOUSEEVENTF_RIGHTUP;
m_pDoc->m_dwHookParam1 = point.x;
m_pDoc->m_dwHookParam2 = point.y;
SendMsg (CMD_MOUSE_HOOK);
return;
}
CDialog::OnRButtonUp(nFlags, point);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?