Spy++原理初探
http://tech.ddvip.com 2007年09月02日 社区交流
内容摘要:用Visual Studio搞开发的朋友对Spy++这个工具一定不陌生,它可以分析窗体结构、进程和窗口消息,对开发工作有很大辅助作用。我们需要研究某个对象时,只要调出其查找窗口,拖动探测器的指针到指定窗口/控件上释放即可。下面,笔者就和大家一起,用VC打造一个属于自己的Spy++。
第一个复选框是"总在最上面",代码如下:
void CSpyXXDlg::OnChktop() 第二个复选框是"16进制"。因为其值影响到多个属性页对话框的内容,所以,也用一全局变量g_nHex保存之:
{
int nTop=((CButton*)GetDlgItem(IDC_CHKTOP))->GetCheck();
if(nTop==1)
:: SetWindowPos(m_hWnd,HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
else
::SetWindowPos(m_hWnd,HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE);
}void CSpyXXDlg::OnChkhex() 这里,我们还建立了一个全局函数Display,来输出16进制和10进制时的句柄值:
{
g_nHex=((CButton*)GetDlgItem(IDC_CHKHEX))->GetCheck();
}CString Display(int nVal) 三、选项卡控件
{
CString str;
if(g_nHex==1)
{
str.Format("%x",nVal);
str.MakeUpper();
}
else
str.Format("%d",nVal);
return str;
}
选项卡控件中,5个标签页对应5个属性页对话框,与它们关联的类分别取名为CPage0、CPage1、CPage2、CPage3、CPage4。在CSpyXXDlg中建立私有成员变量m_page0、m_page1、m_page2、m_page3、m_page4。在其初始化过程中建立这5个属性页对话框: m_page0.Create(IDD_OLE_PROPPAGE_LARGE,GetDlgItem(IDC_TAB1)); 然后在选项卡消息TCN_SELCHANGE响应函数中控制它们的显示:
m_page1.Create(IDD_OLE_PROPPAGE_LARGE1,GetDlgItem(IDC_TAB1));
m_page2.Create(IDD_OLE_PROPPAGE_LARGE2,GetDlgItem(IDC_TAB1));
m_page3.Create(IDD_OLE_PROPPAGE_LARGE3,GetDlgItem(IDC_TAB1));
m_page4.Create(IDD_OLE_PROPPAGE_LARGE4,GetDlgItem(IDC_TAB1));
CRect rs;
m_tab.GetClientRect(rs);
rs.top+=20;
rs.bottom-=3;
rs.left+=3;
rs.right-=3;
m_page0.MoveWindow(rs);
m_page1.MoveWindow(rs);
m_page2.MoveWindow(rs);
m_page3.MoveWindow(rs);
m_page4.MoveWindow(rs);
m_page0.ShowWindow(SW_SHOW);
m_tab.SetCurSel(0);void CSpyXXDlg::OnSelchangeTab1(NMHDR* pNMHDR, LRESULT* pResult) 四、常规标签页
{
// TODO: Add your control notification handler code here
int i=m_tab.GetCurSel();
switch(i)
{
case 0:
m_page0.ShowWindow(SW_SHOW);
m_page1.ShowWindow(SW_HIDE);
m_page2.ShowWindow(SW_HIDE);
m_page3.ShowWindow(SW_HIDE);
m_page4.ShowWindow(SW_HIDE);
break;
case 1:
m_page0.ShowWindow(SW_HIDE);
m_page1.ShowWindow(SW_SHOW);
m_page2.ShowWindow(SW_HIDE);
m_page3.ShowWindow(SW_HIDE);
m_page4.ShowWindow(SW_HIDE);
break;
case 2:
……
default:
;
}
*pResult = 0;
}
来源:vckbase 作者:宋陈三 责编:豆豆技术应用
- VC/VC++按钮设计专题
- VC/VC++ 菜单专题
- VC/VC++ 工具条专题
- VC/VC++ 对话框教程
- VC/VC++ 报表教程
- VC/VC++ 控件
- VC/VC++ GDI
- Visual Studio 2008
- VC/VC++ MFC教程
- VC/VC++ QQ
- VC/VC++ Socket编程
- VC/VC++ 钩子编程
- TangramMini组件应用教程
- VC/VC++ 窗体
- VC/VC++ ADO 教程
- Windows CE 教程
- VC/VC++ DLL(动态链接库)编程
- VC/VC++ PDFlib
- VC与MATLAB编程
- VC/VC++ DirectShow 教程
- VC++入门视频教程
- VC/VC++ COM组件设计与应用
- VC/VC++ ATL
- VC/VC++ WTL
- VC/VC++ 定制调试诊断工具和程序
- VC/VC++ 进程
- VC/VC++ Win32
- VC/VC++ WMI
- VC/VC++ 消息
- 更多VC/VC++专题……