基本信息
源码名称:远程视频监控
源码大小:10.08M
文件格式:.rar
开发语言:C/C++
更新时间:2015-10-30
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
// Capture.cpp : Defines the class behaviors for the application. // Download by http://www.codefans.net #include "stdafx.h" #include "Capture.h" #include "CaptureDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif //定义按钮状态 enum ButtonState {bsNormal,bsHot,bsDown}; //按钮包装类 class CDrawButton { public: ButtonState m_State; //按钮当前状态 WNDPROC m_OldProc; //记录按钮的窗口函数 int m_Flag; //是否释放关联按钮的CDrawButton对象 static int m_Style; //按钮风格 public: CDrawButton( ) { m_State = bsNormal; m_OldProc = NULL; m_Flag = 0; } virtual ~CDrawButton() { m_State = bsNormal; m_OldProc = NULL; }; LRESULT OnPaint( HWND hWnd ) { CWnd* pWnd = CWnd::FromHandle(hWnd); CPaintDC dc(pWnd); CString Text; CRect RC; CFont Font; CFont *pOldFont; CBrush Brush; CBrush *pOldBrush; CPoint PT(2,2); dc.SetBkMode( TRANSPARENT ); Font.CreateFont( 12, 0, 0, 0, FW_HEAVY, 0, 0, 0, ANSI_CHARSET, \ OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, \ VARIABLE_PITCH | FF_SWISS, "MS Sans Serif" ); pOldFont = dc.SelectObject( &Font ); if( m_State == bsNormal) { if (m_Style==2) { CBitmap bmp; bmp.LoadBitmap(IDB_BKBUTTON); Brush.CreatePatternBrush(&bmp); } else Brush.CreateSolidBrush( RGB( 200, 200, 200 ) ); dc.SetTextColor( RGB( 80, 80, 80) ); } else if( m_State == bsDown ) { Brush.CreateSolidBrush( RGB( 160, 160, 160 ) ); dc.SetTextColor( RGB( 50, 50, 250 ) ); } else if( m_State == bsHot ) { Brush.CreateSolidBrush( RGB( 100, 100, 180 ) ); dc.SetTextColor( RGB( 250, 250, 0 ) ); } pOldBrush = dc.SelectObject( &Brush ); pWnd->GetClientRect( &RC ); dc.RoundRect( &RC, PT ); HRGN hRgn = CreateRectRgn( RC.left, RC.top, RC.right, RC.bottom ); pWnd->SetWindowRgn( hRgn, TRUE ); DeleteObject( hRgn ); pWnd->GetWindowText(Text ); dc.DrawText( Text, &RC, DT_CENTER | DT_VCENTER | DT_SINGLELINE ); dc.SelectObject( pOldFont ); dc.SelectObject( pOldBrush ); return TRUE; } LRESULT OnLButtonDown( HWND hWnd, UINT nFlags, CPoint point ) { m_State = bsDown; SetCapture(hWnd); SetFocus(hWnd); InvalidateRect(hWnd,NULL,TRUE); return TRUE; } LRESULT OnLButtonUp( HWND hWnd, UINT nFlags, CPoint point ) { if( m_State != bsNormal ) { m_State = bsNormal; ReleaseCapture(); InvalidateRect(hWnd,NULL,TRUE); SendMessage( GetParent(hWnd), WM_COMMAND, GetDlgCtrlID(hWnd), (LPARAM) (hWnd) ); } return TRUE; } LRESULT LoseFocus(HWND hWnd) { m_State = bsNormal; InvalidateRect(hWnd,NULL,TRUE); SendMessage( hWnd, WM_KILLFOCUS, (long)hWnd, 0); return TRUE; } LRESULT OnMouseMove(HWND hWnd, UINT nFlags, CPoint point ) { HRGN hRgn = CreateRectRgn( 0, 0, 0, 0 ); GetWindowRgn( hWnd,hRgn ); BOOL ret = PtInRegion( hRgn, point.x, point.y ); if( ret ) { if( m_State == bsDown) return TRUE; if( m_State != bsHot ) { m_State = bsHot; InvalidateRect(hWnd,NULL,TRUE); UpdateWindow(hWnd); SetCapture(hWnd); } } else { m_State = bsNormal; InvalidateRect(hWnd,NULL,TRUE); ReleaseCapture(); } DeleteObject( hRgn ); return TRUE; } }; HHOOK hWndHook ; int CDrawButton::m_Style = 1; LRESULT __stdcall DefWindowProc1(HWND hWnd,UINT Msg,WPARAM wParam, LPARAM lParam ) { CPoint pt; CDrawButton *pButton=(CDrawButton*)GetWindowLong(hWnd,GWL_USERDATA); switch (Msg) { case WM_LBUTTONDBLCLK: //屏蔽双击事件 { return TRUE; break; } case WM_PAINT: { if (pButton->m_Style>0) return pButton->OnPaint( hWnd); else return CallWindowProc(pButton->m_OldProc, hWnd,Msg,wParam,lParam); break; } case WM_LBUTTONDOWN: { pt.x = LOWORD(lParam); pt.y = HIWORD(lParam); if (pButton->m_Style>0) return pButton->OnLButtonDown( hWnd, 0, pt ); else return CallWindowProc(pButton->m_OldProc, hWnd,Msg,wParam,lParam); break; } case WM_LBUTTONUP: { pt.x = LOWORD(lParam); pt.y = HIWORD(lParam); if (pButton->m_Style>0) return pButton->OnLButtonUp( hWnd, 0,pt ); else return CallWindowProc(pButton->m_OldProc, hWnd,Msg,wParam,lParam); break; } case WM_MOUSEMOVE: { pt.x = LOWORD(lParam); pt.y = HIWORD(lParam); if (pButton->m_Style>0) return pButton->OnMouseMove(hWnd,0, pt); else return CallWindowProc(pButton->m_OldProc, hWnd,Msg,wParam,lParam); break; } case WM_DESTROY: { WNDPROC procOld=pButton->m_OldProc; SetWindowLong(hWnd,GWL_WNDPROC,(long)procOld); //恢复原来的窗口函数 CWnd* pWnd = ::CWnd::FromHandle(hWnd); //将按钮对象与句柄分离 if (pWnd) { pWnd->Detach(); } pButton->m_Flag = 1; //LRESULT ret = ::CallWindowProc(procOld,hWnd,Msg,wParam,lParam); return 1;//ret; } default : { break; } } return CallWindowProc(pButton->m_OldProc, hWnd, Msg, wParam, lParam ); } //定义钩子函数 LRESULT CALLBACK HOOKProc( int nCode, WPARAM wParam, LPARAM lParam ) { PCWPSTRUCT wc = (PCWPSTRUCT) lParam; HWND hWnd = wc->hwnd; if( hWnd ) { char ClassName[MAX_PATH] = ""; GetClassName( hWnd, ClassName, MAX_PATH ); if( strcmp( ClassName, "Button" ) == 0 ) { CWnd *pWnd = CWnd::FromHandle( hWnd ); if ( pWnd->GetStyle() & BS_RADIOBUTTON ) { return 1; } if ( pWnd->GetStyle() & BS_CHECKBOX ) { return 1; } WNDPROC WndProc; WndProc = (WNDPROC) GetWindowLong( hWnd, GWL_WNDPROC ); CDrawButton *pButton=(CDrawButton*)GetWindowLong(hWnd,GWL_USERDATA); if (pButton != NULL&& pButton->m_Flag==1 ) { SetWindowLong(hWnd,GWL_USERDATA,0); SetWindowLong( hWnd, GWL_WNDPROC, (LONG)pButton->m_OldProc ); pButton->m_OldProc = NULL; delete pButton; } else if (pButton == NULL ) { if( WndProc !=DefWindowProc1 ) { pButton = new CDrawButton; pButton->m_OldProc = WndProc; SetWindowLong(hWnd,GWL_USERDATA,(long)pButton); WndProc = (WNDPROC) SetWindowLong( hWnd, GWL_WNDPROC, (LONG) DefWindowProc1); } } } } return CallNextHookEx( hWndHook, nCode, wParam, lParam ); } //安装钩子 BOOL RunHook( HMODULE hModule, DWORD dwThreadID) { hWndHook = SetWindowsHookEx( WH_CALLWNDPROC, (HOOKPROC) HOOKProc, hModule, dwThreadID ); return TRUE; } //卸载钩子 BOOL StopHook() { UnhookWindowsHookEx(hWndHook); return TRUE; } ///////////////////////////////////////////////////////////////////////////// // CCaptureApp BEGIN_MESSAGE_MAP(CCaptureApp, CWinApp) //{{AFX_MSG_MAP(CCaptureApp) // NOTE - the ClassWizard will add and remove mapping macros here. // DO NOT EDIT what you see in these blocks of generated code! //}}AFX_MSG ON_COMMAND(ID_HELP, CWinApp::OnHelp) END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CCaptureApp construction CCaptureApp::CCaptureApp() { // TODO: add construction code here, // Place all significant initialization in InitInstance } ///////////////////////////////////////////////////////////////////////////// // The one and only CCaptureApp object CCaptureApp theApp; ///////////////////////////////////////////////////////////////////////////// // CCaptureApp initialization BOOL CCaptureApp::InitInstance() { AfxEnableControlContainer(); ::CoInitialize(NULL); // Standard initialization // If you are not using these features and wish to reduce the size // of your final executable, you should remove from the following // the specific initialization routines you do not need. #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif //换肤 HINSTANCE hModule = GetModuleHandle( NULL ); RunHook( hModule, GetCurrentThreadId() ); CCaptureDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse == IDOK) { // TODO: Place code here to handle when the dialog is // dismissed with OK } else if (nResponse == IDCANCEL) { // TODO: Place code here to handle when the dialog is // dismissed with Cancel } ::CoUninitialize(); // Since the dialog has been closed, return FALSE so that we exit the // application, rather than start the application's message pump. return FALSE; } int CCaptureApp::ExitInstance() { StopHook(); return CWinApp::ExitInstance(); }