This commit is contained in:
2013-07-20 23:23:05 +00:00
parent a739b95eee
commit 86d57b6f02

291
HookMsg/LockControlDlg.cpp Normal file
View File

@@ -0,0 +1,291 @@
// LockControlDlg.cpp : implementation file
//
#include "stdafx.h"
#include "hookmsg.h"
#include "LockControlDlg.h"
#include "HookMsgDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CLockControlDlg dialog
CLockControlDlg::CLockControlDlg()
{
m_bInitSuccess = FALSE;
m_pHookMsgDlg = NULL;
}
void CLockControlDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CLockControlDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CLockControlDlg, CDialog)
//{{AFX_MSG_MAP(CLockControlDlg)
ON_BN_CLICKED(IDC_CONTROL_CHK2, OnControlChk2)
ON_WM_NCHITTEST()
ON_WM_CONTEXTMENU()
ON_WM_ERASEBKGND()
ON_WM_CTLCOLOR()
ON_COMMAND(IDM_CONTROL_DLG_CLOSE, OnControlDlgClose)
ON_WM_SIZE()
ON_WM_CLOSE()
ON_COMMAND(IDM_CONTROL_DLG_SHOWMAIN, OnControlDlgShowmain)
ON_WM_NCLBUTTONDBLCLK()
//}}AFX_MSG_MAP
ON_COMMAND_RANGE(IDM_CONTROL_DLG_TRANSPARENT1, IDM_CONTROL_DLG_TRANSPARENT8, OnControlDlgTransParent)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CLockControlDlg message handlers
/////////////////////////////////////////////////////////////////////////////
void CLockControlDlg::OnClose()
{
SaveWindowPlacement();
CDialog::OnClose();
DestroyWindow ();
}
//DEL void CLockControlDlg::OnOK()
//DEL {
//DEL SaveWindowPlacement();
//DEL DestroyWindow ();
//DEL }
//DEL void CLockControlDlg::OnCancel()
//DEL {
//DEL SaveWindowPlacement();
//DEL DestroyWindow ();
//DEL }
void CLockControlDlg::PostNcDestroy()
{
((CHookMsgDlg*) AfxGetMainWnd ())->m_pLCDlg = NULL;
delete this;
}
LRESULT CLockControlDlg::OnNcHitTest(CPoint point)
{
UINT nHitTest = CDialog::OnNcHitTest(point);
if ((nHitTest == HTCLIENT) && (::GetAsyncKeyState (MK_LBUTTON) < 0))
nHitTest = HTCAPTION;
return nHitTest;
}
BOOL CLockControlDlg::OnEraseBkgnd(CDC* pDC)
{
CRect rc;
GetWindowRect(rc);
ScreenToClient(rc);
CButton * pButton = (CButton*)GetDlgItem(IDC_CONTROL_CHK2);
BOOL bCheck = pButton->GetCheck();
if( bCheck )
{
pDC->FillSolidRect( &rc, RGB(0, 0, 255) );
}
else
{
pDC->FillSolidRect( &rc, RGB(255, 0, 0) );
}
return TRUE;
}
HBRUSH CLockControlDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// if (pWnd->GetDlgCtrlID() == IDC_CONTROL_CHK2)
// {
// CButton * pButton = (CButton*)pWnd;
// BOOL bCheck = pButton->GetCheck();
// if( bCheck )
// {
// pDC->SetTextColor(RGB(0, 0, 255));
// }
// else
// {
// pDC->SetTextColor(RGB(255, 0, 0));
// }
//
// pDC->SetBkMode(TRANSPARENT);
// hbr = m_brush;
// }
// if (nCtlColor == CTLCOLOR_DLG)
// {
// CButton * pButton = (CButton*)pWnd;
// BOOL bCheck = pButton->GetCheck();
// if( bCheck )
// hbr = m_brBlue;
// else
// hbr = m_brRed;
// }
return hbr;
}
BOOL CLockControlDlg::Create( UINT nIDTemplate, CWnd* pParentWnd )
{
m_pHookMsgDlg = (CHookMsgDlg*)pParentWnd;
return CDialog::Create( nIDTemplate, pParentWnd );
}
BOOL CLockControlDlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_bInitSuccess = TRUE;
g_theApp.m_bShowLockContorlDlg = TRUE;
m_brRed.CreateSolidBrush(RGB(255,0,0));
m_brBlue.CreateSolidBrush(RGB(0,0,255));
if( GetOsVersion() == VER_PLATFORM_WIN32_NT )
{
if( g_hUserDll == NULL )
g_hUserDll = ::LoadLibrary(_T("USER32.dll"));
::SetWindowLong(m_hWnd, GWL_EXSTYLE, ::GetWindowLong(m_hWnd, GWL_EXSTYLE) | WS_EX_LAYERED );
SetTransparent(m_hWnd, 0, 255 * 70/100 , LWA_ALPHA );
}
RestoreWindowPlacement();
SetHookMsgState( m_pHookMsgDlg->m_bMonitorStatus );
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CLockControlDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu menu, *pSubMenu;
if (!menu.LoadMenu(IDR_CONTROL_DLG_MENU)) return ;
if (!(pSubMenu = menu.GetSubMenu(0))) return ;
CPoint pos;
GetCursorPos(&pos);
SetForegroundWindow();
// 컨텍스트 메뉴 출력
pSubMenu->TrackPopupMenu(TPM_RIGHTALIGN, pos.x, pos.y, this);
menu.DestroyMenu();
}
void CLockControlDlg::OnControlDlgClose()
{
PostMessage(WM_CLOSE);
}
void CLockControlDlg::OnControlDlgTransParent(UINT nID)
{
if( GetOsVersion() == VER_PLATFORM_WIN32_NT )
{
int nValue=100;
if( IDM_CONTROL_DLG_TRANSPARENT1 == nID ) nValue=100;
else if( IDM_CONTROL_DLG_TRANSPARENT2 == nID ) nValue=70;
else if( IDM_CONTROL_DLG_TRANSPARENT3 == nID ) nValue=60;
else if( IDM_CONTROL_DLG_TRANSPARENT4 == nID ) nValue=50;
else if( IDM_CONTROL_DLG_TRANSPARENT5 == nID ) nValue=40;
else if( IDM_CONTROL_DLG_TRANSPARENT6 == nID ) nValue=30;
else if( IDM_CONTROL_DLG_TRANSPARENT7 == nID ) nValue=20;
else if( IDM_CONTROL_DLG_TRANSPARENT8 == nID ) nValue=10;
SetTransparent(m_hWnd, 0, 255 * nValue/100 , LWA_ALPHA );
}
else
{
AfxMessageBox( "반투명 윈도우 기능은 Windows 2000, XP, NT 계열만 지원합니다." );
}
}
/////////////////////////////////////////////////////////////////////
void CLockControlDlg::SetHookMsgState(BOOL bLock)
{
CButton * pButton = (CButton*)GetDlgItem(IDC_CONTROL_CHK2);
if( bLock )
{
pButton->SetWindowText( "풀림" );
pButton->SetCheck(TRUE);
}
else
{
pButton->SetWindowText( "잠김" );
pButton->SetCheck(FALSE);
}
Invalidate();
}
void CLockControlDlg::OnControlChk2()
{
if( m_pHookMsgDlg->m_bMonitorStatus )
{
m_pHookMsgDlg->OnMonitorPause();
}
else
{
m_pHookMsgDlg->OnMonitorStart();
}
}
void CLockControlDlg::SaveWindowPlacement()
{
WINDOWPLACEMENT wp;
GetWindowPlacement(&wp);
g_theApp.WriteProfileBinary("Settings", "CLockControlDlg", (LPBYTE)&wp, sizeof(wp));
}
void CLockControlDlg::RestoreWindowPlacement()
{
WINDOWPLACEMENT *lwp;
UINT nl;
if(g_theApp.GetProfileBinary("Settings", "CLockControlDlg", (LPBYTE*)&lwp, &nl))
{
SetWindowPlacement(lwp);
delete [] lwp;
}
else {
CenterWindow(GetDesktopWindow());
}
}
void CLockControlDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
if( m_bInitSuccess )
{
GetDlgItem(IDC_CONTROL_CHK2)->MoveWindow( 2, 2, cx-4, cy-4 );
}
}
void CLockControlDlg::OnControlDlgShowmain()
{
if( m_pHookMsgDlg )
{
m_pHookMsgDlg->SendMessage(WM_COMMAND, IDM_MAINWINDOW_SHOW, 0);
}
}
void CLockControlDlg::OnNcLButtonDblClk(UINT nHitTest, CPoint point)
{
if( m_pHookMsgDlg )
{
m_pHookMsgDlg->SendMessage(WM_COMMAND, IDM_MAINWINDOW_SHOW, 0);
}
CDialog::OnNcLButtonDblClk(nHitTest, point);
}