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;


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

    :(

  • 相关阅读:
    万能转换器boost::lexical_cast
    6.1.5 文本文件与二进制文件
    HDU4002 Find the maximum [数论]
    HDU4001 To Miss Our Children Time [DP]
    HDU3247 Resource Archiver [AC自动机+DP]
    HDU2457 DNA repair [AC自动机+DP]
    HDU2825 Wireless Password [AC自动机+压缩DP]
    ZOJ3228 Searching the String [AC自动机]
    HDU4003 Find Metal Mineral [树形DP]
    ZOJ3494 BCD Code [AC自动机+DP]
  • 原文地址:https://www.cnblogs.com/kevinzhwl/p/3878954.html
Copyright © 2011-2022 走看看