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 + -
显示快捷键?