您的位置:逆风者 VC++ 正文
原作者:南京 宋陈三 添加时间:2007-09-08 原文发表:2007-09-08 人气:783 来源:vckbase.com

本文章共8424字,分5页,当前第2页,快速翻页:
 

FromHandle(g_hMe)->SetTimer(1,600,NULL);

  在定时器中,我们要实现桌面范围内的矩形绘制。代码如下:

POINT pnt;
RECT rc;
HWND DeskHwnd = ::GetDesktopWindow(); //取得桌面句柄
HDC DeskDC = ::GetWindowDC(DeskHwnd); //取得桌面设备场景
int oldRop2 = SetROP2(DeskDC, R2_NOTXORPEN);
::GetCursorPos(&pnt); //取得鼠标坐标
HWND UnHwnd = ::WindowFromPoint(pnt) ; //取得鼠标指针处窗口句柄
g_hWnd=UnHwnd;
::GetWindowRect(g_hWnd, &rc); //获得窗口矩形
if( rc.left < 0 ) rc.left = 0;
if (rc.top < 0 ) rc.top = 0;
HPEN newPen = ::CreatePen(0, 3, 0); //建立新画笔,载入DeskDC
HGDIOBJ oldPen = ::SelectObject(DeskDC, newPen);
::Rectangle(DeskDC, rc.left, rc.top, rc.right, rc.bottom); //在窗口周围显示闪烁矩形
Sleep(400); //设置闪烁时间间隔
::Rectangle( DeskDC, rc.left, rc.top, rc.right, rc.bottom);
::SetROP2(DeskDC, oldRop2);
::SelectObject( DeskDC, oldPen);
::DeleteObject(newPen);
::ReleaseDC( DeskHwnd, DeskDC);
DeskDC = NULL;

逆@风@者
  到此,探测器功能全部完成。

  二、两个复选框
  第一个复选框是"总在最上面",代码如下:

void CSpyXXDlg::OnChktop() 
{
    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);
}

  第二个复选框是"16进制"。因为其值影响到多个属性页对话框的内容,所以,也用一全局变量g_nHex保存之:

void CSpyXXDlg::OnChkhex() 
{
    g_nHex=((CButton*)GetDlgItem(IDC_CHKHEX))->GetCheck();
}

  这里,我们还建立了一个全局函数Display,来输出16进制和10进制时的句柄值:

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));
    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);

   然后在选项卡消息TCN_SELCHANGE响应函数中控制它们的显示:

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;
}
 
本文章更多内容<<上一页 - 1 - 2 - 3 - 4 - 5 - 下一页>>
相关文章

汉诺塔游戏的设计
关于控件注册和使用许可问题的解决办法
基于MFC对话框的NT服务程序框架
计算MDI子窗口数,仅显示文件夹的打开对话框
PE文件格式详解(下)
GDI和GDI 对象的相互转换
软件框架的利器、TangramMini组件应用教程二
C语言高效编程的几招
VC 操作 SQL Server 主从表
软件测试悖论
WIN32程序挂钩SetLastError,输出错误描述到
超强仿QQ自动伸缩窗口
VC实用小知识总结 (一)
VC实用小知识总结 (二)
BMP图象解析
让你的软件界面更漂亮(五)
MFC中基于对话框程序快捷键的实现
用递归的方法画分形图
利用IJG JPEG Library压缩图像为jpg格式
软件框架的利器、TangramMini组件应用教程六

相关评论


本文章所属分类:首页 VC++

  热门关键字: