287 lines
7.7 KiB
C++
287 lines
7.7 KiB
C++
// FindTargetWndDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "HookMsg.h"
|
|
#include "FindTargetWndDlg.h"
|
|
#include <afxctl.h>
|
|
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CFindTargetWndDlg dialog
|
|
|
|
CFindTargetWndDlg::CFindTargetWndDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CFindTargetWndDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CFindTargetWndDlg)
|
|
//}}AFX_DATA_INIT
|
|
|
|
for( int i=0; i<MAX_FIND; i++ )
|
|
m_hFindWindow[i] = NULL;
|
|
|
|
m_bFinding = FALSE;
|
|
m_hLastFind = NULL;
|
|
m_nFindNow = -1;
|
|
|
|
m_idHANDLE = IDC_H_HANDLE_STATIC1;
|
|
m_idCAPTION = IDC_H_CAPTION_STATIC1;
|
|
m_idCLASS = IDC_H_CLASS_STATIC1;
|
|
}
|
|
|
|
void CFindTargetWndDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CFindTargetWndDlg)
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CFindTargetWndDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CFindTargetWndDlg)
|
|
ON_WM_LBUTTONDOWN()
|
|
ON_WM_MOUSEMOVE()
|
|
ON_WM_LBUTTONUP()
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CFindTargetWndDlg message handlers
|
|
BOOL CFindTargetWndDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
ModifyStyleEx(NULL, WS_EX_TOPMOST);
|
|
|
|
RECT rect ;
|
|
GetWindowRect(&rect) ;
|
|
MoveWindow( 0, 200, rect.right-rect.left, rect.bottom-rect.top) ;
|
|
|
|
CWnd* pWnd = (CWnd*)GetDlgItem(IDC_ACTION_PICTURE);
|
|
pWnd->ShowWindow(FALSE);
|
|
|
|
if( ::IsWindow(m_hFindWindow[0]) )
|
|
SetDlgItemText( IDC_H_HANDLE_STATIC1, "유효합니다." );
|
|
else
|
|
SetDlgItemText( IDC_H_HANDLE_STATIC1, "<미지정>" );
|
|
if( ::IsWindow(m_hFindWindow[1]) )
|
|
SetDlgItemText( IDC_H_HANDLE_STATIC2, "유효합니다." );
|
|
else
|
|
SetDlgItemText( IDC_H_HANDLE_STATIC2, "<미지정>" );
|
|
if( ::IsWindow(m_hFindWindow[2]) )
|
|
SetDlgItemText( IDC_H_HANDLE_STATIC3, "유효합니다." );
|
|
else
|
|
SetDlgItemText( IDC_H_HANDLE_STATIC3, "<미지정>." );
|
|
if( ::IsWindow(m_hFindWindow[3]) )
|
|
SetDlgItemText( IDC_H_HANDLE_STATIC4, "유효합니다." );
|
|
else
|
|
SetDlgItemText( IDC_H_HANDLE_STATIC4, "<미지정>" );
|
|
if( ::IsWindow(m_hFindWindow[4]) )
|
|
SetDlgItemText( IDC_H_HANDLE_STATIC5, "유효합니다." );
|
|
else
|
|
SetDlgItemText( IDC_H_HANDLE_STATIC5, "<미지정>" );
|
|
if( ::IsWindow(m_hFindWindow[5]) )
|
|
SetDlgItemText( IDC_H_HANDLE_STATIC6, "유효합니다." );
|
|
else
|
|
SetDlgItemText( IDC_H_HANDLE_STATIC6, "<미지정>" );
|
|
|
|
UpdateData(FALSE);
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CFindTargetWndDlg::OnOK()
|
|
{
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
void CFindTargetWndDlg::OnCancel()
|
|
{
|
|
CDialog::OnCancel();
|
|
}
|
|
|
|
void CFindTargetWndDlg::OnLButtonDown(UINT nFlags, CPoint point)
|
|
{
|
|
CRect rcFindWnd[ MAX_FIND ];
|
|
|
|
GetDlgItem(IDC_H_PICTURE1)->GetWindowRect(rcFindWnd[0]);
|
|
ScreenToClient(rcFindWnd[0]);
|
|
GetDlgItem(IDC_H_PICTURE2)->GetWindowRect(rcFindWnd[1]);
|
|
ScreenToClient(rcFindWnd[1]);
|
|
GetDlgItem(IDC_H_PICTURE3)->GetWindowRect(rcFindWnd[2]);
|
|
ScreenToClient(rcFindWnd[2]);
|
|
GetDlgItem(IDC_H_PICTURE4)->GetWindowRect(rcFindWnd[3]);
|
|
ScreenToClient(rcFindWnd[3]);
|
|
GetDlgItem(IDC_H_PICTURE5)->GetWindowRect(rcFindWnd[4]);
|
|
ScreenToClient(rcFindWnd[4]);
|
|
GetDlgItem(IDC_H_PICTURE6)->GetWindowRect(rcFindWnd[5]);
|
|
ScreenToClient(rcFindWnd[5]);
|
|
|
|
CWnd* pActPic = (CWnd*)GetDlgItem(IDC_ACTION_PICTURE);
|
|
|
|
if (m_bFinding == FALSE)
|
|
{
|
|
if( rcFindWnd[0].PtInRect(point) == TRUE)
|
|
{
|
|
m_nFindNow = 0; m_hFindWindow[0] = NULL;
|
|
m_idHANDLE = IDC_H_HANDLE_STATIC1;
|
|
m_idCAPTION = IDC_H_CAPTION_STATIC1;
|
|
m_idCLASS = IDC_H_CLASS_STATIC1;
|
|
pActPic->MoveWindow(rcFindWnd[0]);
|
|
}
|
|
else if( rcFindWnd[1].PtInRect(point) == TRUE)
|
|
{
|
|
m_nFindNow = 1; m_hFindWindow[1] = NULL;
|
|
m_idHANDLE = IDC_H_HANDLE_STATIC2;
|
|
m_idCAPTION = IDC_H_CAPTION_STATIC2;
|
|
m_idCLASS = IDC_H_CLASS_STATIC2;
|
|
pActPic->MoveWindow(rcFindWnd[1]);
|
|
}
|
|
else if( rcFindWnd[2].PtInRect(point) == TRUE)
|
|
{
|
|
m_nFindNow = 2; m_hFindWindow[2] = NULL;
|
|
m_idHANDLE = IDC_H_HANDLE_STATIC3;
|
|
m_idCAPTION = IDC_H_CAPTION_STATIC3;
|
|
m_idCLASS = IDC_H_CLASS_STATIC3;
|
|
pActPic->MoveWindow(rcFindWnd[2]);
|
|
}
|
|
else if( rcFindWnd[3].PtInRect(point) == TRUE)
|
|
{
|
|
m_nFindNow = 3; m_hFindWindow[3] = NULL;
|
|
m_idHANDLE = IDC_H_HANDLE_STATIC4;
|
|
m_idCAPTION = IDC_H_CAPTION_STATIC4;
|
|
m_idCLASS = IDC_H_CLASS_STATIC4;
|
|
pActPic->MoveWindow(rcFindWnd[3]);
|
|
}
|
|
else if( rcFindWnd[4].PtInRect(point) == TRUE)
|
|
{
|
|
m_nFindNow = 4; m_hFindWindow[4] = NULL;
|
|
m_idHANDLE = IDC_H_HANDLE_STATIC5;
|
|
m_idCAPTION = IDC_H_CAPTION_STATIC5;
|
|
m_idCLASS = IDC_H_CLASS_STATIC5;
|
|
pActPic->MoveWindow(rcFindWnd[4]);
|
|
}
|
|
else if( rcFindWnd[5].PtInRect(point) == TRUE)
|
|
{
|
|
m_nFindNow = 5; m_hFindWindow[5] = NULL;
|
|
m_idHANDLE = IDC_H_HANDLE_STATIC6;
|
|
m_idCAPTION = IDC_H_CAPTION_STATIC6;
|
|
m_idCLASS = IDC_H_CLASS_STATIC6;
|
|
pActPic->MoveWindow(rcFindWnd[5]);
|
|
}
|
|
else
|
|
{
|
|
CDialog::OnLButtonDown(nFlags, point);
|
|
return;
|
|
}
|
|
|
|
SetDlgItemText(m_idHANDLE, "Finding...");
|
|
SetDlgItemText(m_idCAPTION, "");
|
|
SetDlgItemText(m_idCLASS, "");
|
|
pActPic->ShowWindow( TRUE );
|
|
|
|
m_bFinding = TRUE;
|
|
m_hLastFind = NULL;
|
|
SetCapture();
|
|
}
|
|
|
|
CDialog::OnLButtonDown(nFlags, point);
|
|
}
|
|
|
|
void CFindTargetWndDlg::OnLButtonUp(UINT nFlags, CPoint point)
|
|
{
|
|
if (m_bFinding) {
|
|
|
|
CWnd* pActPic = (CWnd*)GetDlgItem(IDC_ACTION_PICTURE);
|
|
pActPic->ShowWindow( FALSE );
|
|
|
|
m_bFinding = FALSE;
|
|
ReleaseCapture();
|
|
if (m_hLastFind) DrawBorder(m_hLastFind);
|
|
}
|
|
|
|
CDialog::OnLButtonUp(nFlags, point);
|
|
}
|
|
|
|
void CFindTargetWndDlg::OnMouseMove(UINT nFlags, CPoint point)
|
|
{
|
|
if (m_bFinding) {
|
|
SetCursor(AfxGetApp()->LoadCursor(IDC_FINDCURSOR));
|
|
CPoint pt = point;
|
|
ClientToScreen(&pt);
|
|
CWnd* pWnd = CWnd::WindowFromPoint(pt);
|
|
if (pWnd && pWnd != this && pWnd != this->GetParent())
|
|
{
|
|
CString strClass;
|
|
::GetClassName(pWnd->GetSafeHwnd(), strClass.GetBuffer(256), 256);
|
|
strClass.ReleaseBuffer();
|
|
|
|
if( strClass==_T("SysTabControl32") ||
|
|
(strClass==_T("Button") && pWnd->GetStyle() & BS_GROUPBOX) )
|
|
{
|
|
pWnd->SetWindowPos( &wndBottom, 0,0,0,0, SWP_NOMOVE|SWP_NOSIZE|SWP_NOREDRAW );
|
|
|
|
CWnd *pWnd2 = CWnd::WindowFromPoint(pt);
|
|
if( pWnd2 )
|
|
{
|
|
UpdateEditBox(pWnd2, TRUE);
|
|
}
|
|
|
|
CDialog::OnMouseMove(nFlags, point);
|
|
return;
|
|
}
|
|
|
|
UpdateEditBox(pWnd, TRUE);
|
|
}
|
|
}
|
|
|
|
CDialog::OnMouseMove(nFlags, point);
|
|
}
|
|
|
|
void CFindTargetWndDlg::UpdateEditBox(CWnd* pWnd, BOOL bDrawBorder)
|
|
{
|
|
if (m_hLastFind == pWnd->GetSafeHwnd()) return;
|
|
|
|
if (m_hLastFind) DrawBorder(m_hLastFind);
|
|
if (bDrawBorder) DrawBorder(pWnd->GetSafeHwnd());
|
|
|
|
m_hFindWindow[ m_nFindNow ] = m_hLastFind = pWnd->GetSafeHwnd();
|
|
|
|
CString strHandle;
|
|
strHandle.Format(_T("0x%08x"), pWnd->GetSafeHwnd());
|
|
CString strCaption;
|
|
pWnd->GetWindowText(strCaption);
|
|
CString strClass;
|
|
::GetClassName(pWnd->GetSafeHwnd(), strClass.GetBuffer(256), 256);
|
|
strClass.ReleaseBuffer();
|
|
|
|
SetDlgItemText(m_idHANDLE, strHandle);
|
|
SetDlgItemText(m_idCAPTION, strCaption);
|
|
SetDlgItemText(m_idCLASS, strClass);
|
|
}
|
|
|
|
void CFindTargetWndDlg::DrawBorder(HWND hWnd)
|
|
{
|
|
HDC hDC = ::GetWindowDC(hWnd);
|
|
int nOldROP = ::SetROP2(hDC, R2_NOT);
|
|
|
|
CRect rect;
|
|
::GetWindowRect(hWnd, &rect);
|
|
rect.OffsetRect(-rect.left, -rect.top);
|
|
for (int i=0; i<3; i++) {
|
|
::MoveToEx(hDC, rect.left, rect.top, NULL);
|
|
::LineTo( hDC, rect.right, rect.top);
|
|
::LineTo( hDC, rect.right, rect.bottom);
|
|
::LineTo( hDC, rect.left, rect.bottom);
|
|
::LineTo( hDC, rect.left, rect.top);
|
|
rect.DeflateRect(1,1,1,1);
|
|
}
|
|
|
|
::SetROP2(hDC, nOldROP);
|
|
::ReleaseDC(hWnd, hDC);
|
|
}
|