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;


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

    :(

  • 相关阅读:
    调用外部程序主窗体做子窗体
    查看window编码
    c# 数据库更新和界面刷新的问题
    c# datagridview代码(网上的)
    winform DataGridView控件的打印
    西电ubuntu更新软件源
    C++ primer 学习笔记(2):函数
    C++ Primer 学习笔记(1)——迭代器,数组
    查询表属于哪个数据
    oracle 实用语句
  • 原文地址:https://www.cnblogs.com/kevinzhwl/p/3878954.html
Copyright © 2011-2022 走看看