dlggetpos.cpp
来自「简单的远程控制工具,分为服务器与客户斋,让你了解socket编程的知识.」· C++ 代码 · 共 1,263 行 · 第 1/3 页
CPP
1,263 行
// DlgGetPos.cpp : implementation file
//
#include "resource.H"
#include "stdafx.h"
#include "Windowsx.h"
#include "math.H"
#include "key.h"
#include "WzdThread.H"
#include "Ctrl_Clnt9.h"
#include "DlgGetPos.h"
#include "GetImage.h"
#include "SendMsg.H"
#include "..\\CtrlSrvr2\\jpegfile.H"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#define IDC_GET_SCREEN WM_USER + 300
/////////////////////////////////////////////////////////////////////////////
// CDlgGetPos dialog
CDlgGetPos::CDlgGetPos(CWnd* pParent /*=NULL*/)
: CDialog(CDlgGetPos::IDD, pParent)
{
//{{AFX_DATA_INIT(CDlgGetPos)
m_nEdtSecond = 1000;
m_bChkContinue = FALSE;
m_bChkControl = FALSE;
m_bFullScreen = FALSE;
m_CTRL = FALSE;
m_SHIFT = FALSE;
m_WIN = FALSE;
m_ALT = FALSE;
m_sNote = _T("");
m_nWidth = 0;
m_nTop = 0;
m_nHeight = 0;
m_nLeft = 0;
m_nCellSize = 0;
m_bLock = FALSE;
//}}AFX_DATA_INIT
m_pDlgFullScreen = NULL;
m_pWzdThread = NULL;
m_ptBmpDraw = CPoint (0,0);
m_hMemDC = NULL;
m_lpImageData = NULL;
m_nBmpTop = 0;
m_nBmpLeft = 0;
m_lFrame = 0;
m_nRdoCut = 0;
m_bImageLocked = false;
}
CDlgGetPos::Create (CCtrl_Clnt9Doc *pDoc)
{
m_pDoc = pDoc;
g_pDoc = (CDocument *) pDoc;
}
void CDlgGetPos::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CDlgGetPos)
DDX_Control(pDX, IDC_QUALITY, m_SliderQ);
DDX_Control(pDX, IDC_HSCROLLBAR, m_hScrollBar);
DDX_Control(pDX, IDC_VSCROLLBAR, m_vScrollBar);
DDX_Control(pDX, IDC_STATIC_AREA, m_oStaArea);
DDX_Control(pDX, IDC_COMBO_COLORS, m_oCboColors);
DDX_Control(pDX, IDC_COMBO_AREA, m_oCboArea);
DDX_Control(pDX, IDC_COMBO_COMPRESS, m_oCboCompress);
DDX_Text(pDX, IDC_EDIT_SECOND, m_nEdtSecond);
DDX_Check(pDX, IDC_CHECK_CONTINUE, m_bChkContinue);
DDX_Check(pDX, IDC_CHECK_CONTROL, m_bChkControl);
DDX_Check(pDX, IDC_CHECK_CTRL, m_CTRL);
DDX_Check(pDX, IDC_CHECK_SHIFT, m_SHIFT);
DDX_Check(pDX, IDC_CHECK_WIN, m_WIN);
DDX_Check(pDX, IDC_CHECK_ALT, m_ALT);
DDX_Text(pDX, IDC_NOTE, m_sNote);
DDX_Text(pDX, IDC_EDIT_WIDTH, m_nWidth);
DDX_Text(pDX, IDC_EDIT_TOP, m_nTop);
DDX_Text(pDX, IDC_EDIT_HEIGHT, m_nHeight);
DDX_Text(pDX, IDC_EDIT_LEFT, m_nLeft);
DDX_Text(pDX, IDC_EDIT_CELLSIZE, m_nCellSize);
DDX_Check(pDX, IDC_CHECK_LOCK, m_bLock);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CDlgGetPos, CDialog)
//{{AFX_MSG_MAP(CDlgGetPos)
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
ON_WM_LBUTTONUP()
ON_WM_PAINT()
ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN_SECOND, OnDeltaposSpinSecond)
ON_BN_CLICKED(IDC_BUTTON_FULLSCREEN, OnButtonFullscreen)
ON_BN_CLICKED(IDC_CHECK_CONTINUE, OnCheckContinue)
ON_BN_CLICKED(IDC_RADIO_CUT, OnRadioCut)
ON_BN_CLICKED(IDC_RADIO_IMAGE, OnRadioImage)
ON_EN_CHANGE(IDC_EDIT_SECOND, OnChangeEditSecond)
ON_BN_CLICKED(IDC_CHECK_CONTROL, OnCheckControl)
ON_EN_CHANGE(IDC_EDIT_CELLSIZE, OnChangeEditCellsize)
ON_BN_CLICKED(IDC_BUTTON_SEND, OnButtonSend)
ON_BN_CLICKED(IDC_CHECK_WIN, OnCheckWin)
ON_BN_CLICKED(IDC_CHECK_CTRL, OnCheckCtrl)
ON_BN_CLICKED(IDC_CHECK_ALT, OnCheckAlt)
ON_BN_CLICKED(IDC_CHECK_SHIFT, OnCheckShift)
ON_BN_CLICKED(IDC_BUTTON_CAD, OnButtonCad)
ON_CBN_SELENDOK(IDC_COMBO_COLORS, OnSelendokComboColors)
ON_WM_RBUTTONDBLCLK()
ON_WM_LBUTTONDBLCLK()
ON_CBN_SELENDOK(IDC_COMBO_AREA, OnSelendokComboArea)
ON_CBN_SELENDOK(IDC_COMBO_COMPRESS, OnSelendokComboCompress)
ON_WM_VSCROLL()
ON_WM_HSCROLL()
ON_WM_RBUTTONDOWN()
ON_WM_RBUTTONUP()
ON_BN_CLICKED(IDC_CHECK_LOCK, OnCheckLock)
ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_QUALITY, OnReleasedcaptureQuality)
ON_BN_CLICKED(IDC_BUTTON_RECONNECT, OnButtonReconnect)
ON_MESSAGE(IDC_GET_SCREEN, Get_Screen_Data)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CDlgGetPos message handlers
void CDlgGetPos::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect rcArea;
UpdateData (TRUE);
CWnd* pWnd = ChildWindowFromPoint(point);
if (pWnd && pWnd->GetSafeHwnd() == m_oStaArea.GetSafeHwnd())
{
if (!m_bChkControl)
{
m_oStaArea.GetWindowRect (&rcArea);
m_ptStart = point;
ClientToScreen (&point);
point.x = point.x - rcArea.left+m_hScrollBar.GetScrollPos();
point.y = point.y - rcArea.top+m_vScrollBar.GetScrollPos();
SetCursor(AfxGetApp()->LoadStandardCursor(IDC_CROSS));
ClipCursor(rcArea);
SetCapture();
m_nLeft = (int)point.x ;
m_nTop = (int)point.y;
m_bIsCapturing = TRUE;
UpdateData (FALSE);
}
else
{
fnSendPos(CMD_MOUSE_HOOK, MOUSEEVENTF_LEFTDOWN,
point);
}
}
CDialog::OnLButtonDown(nFlags, point);
}
void CDlgGetPos::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
UpdateData (TRUE);
if (!m_bChkControl && m_bIsCapturing)
{
CRect rcArea;
CClientDC dc(this); // device context for painting
m_oStaArea.GetWindowRect (&rcArea);
m_ptEnd = point;
UpdateData (TRUE);
ClientToScreen (&point);
point.x -= rcArea.left;
point.y -= rcArea.top;
m_nWidth = (int)point.x +m_hScrollBar.GetScrollPos();
m_nHeight = (int)point.y +m_vScrollBar.GetScrollPos();
UpdateData (FALSE);
ScreenToClient (&rcArea);
}
CDialog::OnMouseMove(nFlags, point);
}
void CDlgGetPos::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
UpdateData (TRUE);
CRect rcArea;
CWnd* pWnd = ChildWindowFromPoint(point);
if (!m_bChkControl && m_bIsCapturing)
{
ReleaseCapture();
ClipCursor(NULL);
m_bIsCapturing = FALSE;
Set_BackGroud_Image ();
m_pDoc->m_rcArea =CRect(m_nLeft,m_nTop,
m_nWidth,m_nHeight);
SetCursor(AfxGetApp()->LoadStandardCursor(IDC_ARROW));
}
else
{
/* m_oStaArea.GetWindowRect (&rcArea);
m_ptStart = point;
ClientToScreen (&point);
point.x = point.x - rcArea.left+m_hScrollBar.GetScrollPos();
point.y = point.y - rcArea.top+m_vScrollBar.GetScrollPos();
m_pDoc->m_dwHookFlags = MOUSEEVENTF_LEFTUP;// | \
// MOUSEEVENTF_ABSOLUTE;
m_pDoc->m_dwHookParam1 = point.x;
m_pDoc->m_dwHookParam2 = point.y;
*/
fnSendPos (CMD_MOUSE_HOOK, MOUSEEVENTF_LEFTUP,
point);
}
CDialog::OnLButtonUp(nFlags, point);
}
BOOL CDlgGetPos::OnInitDialog()
{
CDialog::OnInitDialog();
//设置ScrollBar
CRect clientRect;
//GetClientRect(clientRect);
m_oStaArea.GetClientRect (&clientRect);
// clientRect.DeflateRect (2,2);
if (clientRect.Width() >= m_pDoc->m_SrvrArea.Width())
m_hScrollBar.ShowScrollBar(FALSE);
else
m_hScrollBar.SetScrollRange(0,m_pDoc->m_SrvrArea.Width() \
- clientRect.Width());
if (clientRect.Height() >= m_pDoc->m_SrvrArea.Height())
m_vScrollBar.ShowScrollBar(FALSE);
else
m_vScrollBar.SetScrollRange(0,m_pDoc->m_SrvrArea.Height() \
- clientRect.Height());
// TODO: Add extra initialization here
m_bIsCapturing = FALSE;
CRect rc;
m_oStaArea.GetWindowRect (&rc);
// m_dFactor = m_nRmtWidth / (double)rc.Width ();
m_oCboArea.AddString("全屏");
m_oCboArea.AddString("当前窗口");
m_oCboArea.AddString("指定区域");
m_oCboArea.SetCurSel(0);
m_oCboCompress.AddString("不压缩");
m_oCboCompress.AddString("Huffman");
m_oCboCompress.AddString("JPEG");
m_oCboCompress.AddString("动态JPEG");
m_oCboCompress.SetCurSel(3);
m_pDoc->m_nCompress = 3;
m_oCboColors.AddString ("2");
m_oCboColors.AddString ("4");
m_oCboColors.AddString ("16");
m_oCboColors.AddString ("256");
m_oCboColors.AddString ("真彩");
switch(m_pDoc->m_nBits)
{
case 1: m_oCboColors.SetCurSel (0);
break;
case 2: m_oCboColors.SetCurSel (1);
break;
case 4: m_oCboColors.SetCurSel (2);
break;
case 8: m_oCboColors.SetCurSel (3);
break;
default: m_oCboColors.SetCurSel (4);
break;
}
OnSelendokComboColors();
m_pDoc->m_nJpegQ = 80;
m_SliderQ.SetPos(80);
// m_pDoc->m_nBits = 0;
m_pDoc->m_nArea = 0;
m_nCellSize = 1000;
m_pDoc->m_nCellSize = m_nCellSize;
m_bChkContinue = FALSE;
m_sNote.Format("%d-%d %d Bits", m_pDoc->m_SrvrArea.right,
m_pDoc->m_SrvrArea.bottom, m_pDoc->m_nBits);
m_nEdtSecond = 10;
// pDoc->m_SrvrArea = CRect (0, 0, SendMsg.rcArea.right, SendMsg.rcArea.bottom);
m_pDoc->m_rcArea = m_pDoc->m_SrvrArea;
m_pDoc->m_bDlgScreen = TRUE;
m_nBmpWidth = m_pDoc->m_rcArea.Width();
m_nBmpHeight =m_pDoc->m_rcArea.Height();
UpdateData (FALSE);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CDlgGetPos::OnPaint()
{
CPaintDC dc(this); // device context for painting
Set_BackGroud_Image ();
// Do not call CDialog::OnPaint() for painting messages
}
void CDlgGetPos::OnDeltaposSpinSecond(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_UPDOWN* pNMUpDown = (NM_UPDOWN*)pNMHDR;
// TODO: Add your control notification handler code here
if (pNMUpDown->iDelta == 1)
m_nEdtSecond -= 50;
if (pNMUpDown->iDelta == -1)
m_nEdtSecond += 50;
if (m_nEdtSecond < 0)
m_nEdtSecond = 0;
UpdateData (FALSE);
*pResult = 0;
}
void CDlgGetPos::Set_BackGroud_Image ()
{
//void CMfcAppView::DrawBMP()
//{
// if we don't have an image, get out of here
if (m_lpImageData==NULL) return;
// CDC *theDC = GetDC();
CDC *theDC = m_oStaArea.GetWindowDC ();
if (theDC!=NULL) {
CRect clientRect;
//GetClientRect(clientRect);
m_oStaArea.GetClientRect (&clientRect);
// clientRect.DeflateRect (2,2);
// Center It
//DEL int left = max(clientRect.left, ((clientRect.Width() - (int)m_nBmpWidth) / 2));
//DEL int top = max(clientRect.top, ((clientRect.Height() - (int)m_nBmpHeight) / 2));
int left = m_nBmpLeft -m_hScrollBar.GetScrollPos();
int top = m_nBmpTop -m_vScrollBar.GetScrollPos();
// 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_lpImageData;
/* BYTE *tmp;
// DWORD-align for display
UINT m_widthDW;
tmp = JpegFile::MakeDwordAlignedBuf((BYTE *)m_lpImageData,
m_nBmpWidth,
m_nBmpHeight,
&m_widthDW);
if (tmp == NULL) return;
*/ // set up a DIB
BITMAPINFOHEADER bmiHeader;
bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
bmiHeader.biWidth = m_nBmpWidth;
bmiHeader.biHeight = 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,
left, top,
bmiHeader.biWidth,
bmiHeader.biHeight,
0,0,
bmiHeader.biWidth,
bmiHeader.biHeight,
tmp,
(LPBITMAPINFO)&bmiHeader,
DIB_RGB_COLORS,
SRCCOPY);
ReleaseDC(theDC);
// }
}
/* CRect rc;
CDC* pDC;
int nLeft = 0, nTop = 0, nWidth, nHeight;
pDC = m_oStaArea.GetWindowDC ();
m_oStaArea.GetClientRect (&rc);
rc.DeflateRect (2,2);
// pDC->FillSolidRect (rc,GetSysColor (COLOR_BACKGROUND));
nLeft = rc.left;
nTop = rc.top;
if (m_nBmpWidth <= rc.Width ())
{
nWidth = m_nBmpWidth;
nLeft = (rc.Width()-m_nBmpWidth)/2;
}
else
nWidth = rc.Width ();
if (m_nBmpHeight <= rc.Height ())
{
nHeight = m_nBmpHeight;
nTop = (rc.Height()-m_nBmpHeight)/2;
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?