zoukankan      html  css  js  c++  java
  • 实现 SPY++ 的 FindWindow Tool 的高亮

    CSDN=>FAQ=>FAQ 展示  问题内容:实现 SPY++ 的 FindWindow Tool 的高亮(highlight)一个应用程序的窗体或内部 Object 的边缘
    原讨论链接:http://community.csdn.net/expert/topicview1.asp?id=1887333
    所属论坛:Windows SDK/API     审核组:Delphi
    提问者:shuixin13     解决者:shuixin13
    感谢:lion_lh、firetoucher、Intelement
    关键字:
    答案:
    方法一:
    通过 SelectObject 来实现

    procedure InvertTracker(hwndDest: HWND);
    //画边框
    var
     hdcDest   : HWND;
     hPen      : HWND;
     hOldPen   : HWND;
     hOldBrush : HWND;
     cr        : HWND;
     rc        : TRect;
    begin
     GetWindowRect(hwndDest, rc);
     hdcDest := GetWindowDC(hwndDest);
     SetROP2(hdcDest,R2_NOT);
     cr    := clBlack;
     hPen  := CreatePen(PS_INSIDEFRAME,2,cr);

     hOldPen   := SelectObject(hdcDest, hPen);
     hOldBrush := SelectObject(hdcDest, GetStockObject(NULL_BRUSH));
     Rectangle(hdcDest, 0, 0, rc.Right - rc.Left, rc.Bottom - rc.Top);
     SelectObject(hdcDest, hOldBrush);
     SelectObject(hdcDest, hOldPen);

     ReleaseDC(hwndDest, hdcDest);
     DeleteObject(hPen);
    end;  


    方法二:
    将边框区域颜色取反

    procedure HighlightWindow(hWndWindow: HWND);
    var hDCWindow: HDC;
       RECT: TRect;
       DINV: Integer;
    begin
     if (hWndWindow = 0) or (Not IsWindow(hWndWindow)) then
       Exit
     else begin
       hDCWindow := GetWindowDC(hWndWindow);
       Windows.GetWindowRect(hWndWindow, RECT);
       OffsetRect(RECT, -RECT.Left,-RECT.Top);

       DINV := 4;
       if Not IsRectEmpty(RECT) then
       begin
         PatBlt(hDCWindow, RECT.Left, RECT.Top, RECT.Right - RECT.Left, DINV, DSTINVERT);
         PatBlt(hDCWindow, RECT.left, RECT.bottom - DINV, DINV,
               -(RECT.bottom - RECT.top - 2 * DINV), DSTINVERT);
         PatBlt(hDCWindow, RECT.right - DINV, RECT.top + DINV, DINV,
               RECT.bottom - RECT.top - 2 * DINV, DSTINVERT);
         PatBlt(hDCWindow, RECT.right, RECT.bottom - DINV, -(RECT.right - RECT.left),
               DINV, DSTINVERT);
       end;
       ReleaseDC(hWndWindow, hDCWindow);
     end;
    end;


    不过这两个都无法实现异型窗体的高亮,

    :(

  • 相关阅读:
    [轉]mysql命令大全
    [轉]常用MYSQL管理工具收集windows
    [轉]Oracle 数据类型及存储方式
    [轉]mysql函数集
    [轉]Mysqldump备份还原和mysqldump导入导出语句大全详解
    JavaScript定义类的几种方式
    [轉]NoSQL数据库探讨之一 - 为什么要用非关系数据库?
    FLV文件介绍
    XAMPP维基百科,自由的百科全书
    [轉]dom table
  • 原文地址:https://www.cnblogs.com/kevinzhwl/p/3878954.html
Copyright © 2011-2022 走看看