基本信息
源码名称:远程视频监控
源码大小: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();
}