设为首页 加入收藏

TOP

用Visual C++设计窗体探测器(一)
2012-11-04 15:17:56 】 浏览:798
Tags:Visual 设计 窗体 探测器

资费:包月5元
手机:


  最近心血来潮,对spy深感兴趣,便准备进行一次间谍行动,目标很简单,利用EnableWindow函数激活不可用或无效的控件按钮,当然,这窗体探测器是必不可少了,原以为很简单,但实际行动起来,却遇到不少麻烦,现将经过记录下来,供有兴趣的朋友参考。

  我们大都见过spyxx中的窗体探测器,当鼠标在窗体探测器上按下左键时,更改鼠标样式,同时捕获鼠标,探测鼠标下的窗体直到鼠标左键松开。这样我们可以写出代码框架了:



case WM_LBUTTONDOWN://鼠标左键按下,检测拖动还是探测
{
 MSG msg;
 //在窗体探测器中按下鼠标
 if(在窗体探测器内==TRUE)//替换光标,探测拖动
 {
  //更改鼠标样式
  SetCursor(...);
  //捕获鼠标
  SetCapture(hWnd);
  hWndNow=NULL;//当前窗体设为空//此为全局变量
  //获取鼠标移动消息
  while(GetMessage(&msg,NULL,WM_MOUSEFIRST,WM_MOUSELAST))
  {
   if((msg.message==WM_MOUSEMOVE)||(msg.message==WM_NCMOUSEMOVE))
   {
    HWND hWndPoint;
    //设置光标
    SetCursor(LoadCursor(hInst, (LPCTSTR)CUR_WINDOWSPY));
    GetCursorPos(&Point);
    //探测当前鼠标点
    if(hWndPoint=WindowFromPoint(Point))
    {
     if(hWndNow!=hWndPoint)//目标已改变
     {
      if(hWndNow)
      {
       //清除旧目标上的黑框
       XorBorder(hWndNow);
      }
      //并且不属于本线程
      if(GetWindowThreadProcessId(hWndPoint,NULL)!=GetCurrentThreadId())
      {
       //将当前窗体画一黑边框
       hWndNow=hWndPoint;
       XorBorder(hWndNow);
      }
      else
      {
       hWndNow=NULL;
      }
      //显示窗体信息
      ShowWindowMessage(hWnd,hWndNow);
     }
    }
    else
    {
     hWndNow=NULL;
     ShowWindowMessage(hWnd,hWndNow);
    }
   }
   //如果左键松开,则跳出
   else if(msg.message==WM_LBUTTONUP)
   {
    break;
   }
  }
  XorBorder(hWndNow);
  //释放鼠标并恢复鼠标样式
  SetCursor(LoadCursor(NULL,(LPCTSTR)IDC_ARROW));
  ReleaseCapture();
 }
 break;
}

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇为OpenFile对话框增添预展功能 下一篇用VC++6.0编写注册表管理程序

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目