// FindTargetWndDlg.cpp : implementation file // #include "stdafx.h" #include "HookMsg.h" #include "FindTargetWndDlg.h" #include #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; iShowWindow(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); }