• WinAPI: InvertRgn 区域颜色取反


    本例效果图:



    代码文件:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
    
    type
      TForm1 = class(TForm)
        CheckBox1: TCheckBox;
        ColorListBox1: TColorListBox;
        procedure FormPaint(Sender: TObject);
        procedure ColorListBox1Click(Sender: TObject);
        procedure CheckBox1Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TForm1.CheckBox1Click(Sender: TObject);
    begin
      Repaint;
    end;
    
    procedure TForm1.ColorListBox1Click(Sender: TObject);
    begin
      Self.Color := ColorListBox1.Selected;
    end;
    
    procedure TForm1.FormPaint(Sender: TObject);
    const
      str = 'A';
    var
      Rgn: HRGN;
      x,y: Integer;
    begin
      Canvas.Font.Size := 120;
      Canvas.Font.Style := [fsBold];
      SetBkMode(Canvas.Handle, TRANSPARENT);
    
      x := (ClientWidth - ColorListBox1.Width - Canvas.TextWidth(str)) div 2;
      y := -20;
    
      {建立路径}
      BeginPath(Canvas.Handle);
      Canvas.TextOut(x, y, str);
      EndPath(Canvas.Handle);
    
      {将路径转换为区域}
      Rgn := PathToRegion(Canvas.Handle);
    
      {区域颜色取反}
      if CheckBox1.Checked then InvertRgn(Canvas.Handle, Rgn);
    
      {绘制}
      Canvas.Brush.Color := clSilver;
      Canvas.Brush.Style := bsDiagCross;
      FillRgn(Canvas.Handle, Rgn, Canvas.Brush.Handle);
      Canvas.Brush.Color := clRed;
      Canvas.Brush.Style := bsSolid;
      FrameRgn(Canvas.Handle, Rgn, Canvas.Brush.Handle, 1, 1);
    
      DeleteObject(Rgn);
    end;
    
    end.
    
    窗体文件:
    object Form1: TForm1
      Left = 366
      Top = 269
      Caption = 'Form1'
      ClientHeight = 179
      ClientWidth = 239
      Color = clBtnFace
      Font.Charset = DEFAULT_CHARSET
      Font.Color = clWindowText
      Font.Height = -11
      Font.Name = 'Tahoma'
      Font.Style = []
      OldCreateOrder = False
      Position = poDesigned
      OnPaint = FormPaint
      PixelsPerInch = 96
      TextHeight = 13
      object CheckBox1: TCheckBox
        Left = 32
        Top = 152
        Width = 97
        Height = 25
        Caption = #21306#22495#39068#33394#21462#21453
        TabOrder = 0
        OnClick = CheckBox1Click
      end
      object ColorListBox1: TColorListBox
        Left = 147
        Top = 0
        Width = 92
        Height = 179
        Align = alRight
        ItemHeight = 16
        TabOrder = 1
        OnClick = ColorListBox1Click
      end
    end
    
  • 相关阅读:
    CF1458D
    CF1415F
    CF612F
    部分博客请移步Gitbub
    Vlc视频插件遮挡弹出框
    kubernetes容器编排YAML详解
    Kubernetes核心技术之Pod
    Kubeadm搭建K8S集群
    博客配套工程公开
    Modelsim联合Matlab搭建FPGA图像仿真平台
  • 原文地址:https://www.cnblogs.com/del/p/1208964.html
Copyright © 2020-2023  润新知