博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WinAPI: SetWindowExtEx、SetViewportExtEx
阅读量:7041 次
发布时间:2019-06-28

本文共 2476 字,大约阅读时间需要 8 分钟。

  hot3.png

相似函数: ScaleWindowExtEx、ScaleViewportExtEx

本例效果图:
26153011_xkOM.gif

代码文件:

unit Unit1;interfaceuses  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  Dialogs, ComCtrls, StdCtrls;type  TForm1 = class(TForm)    procedure FormCreate(Sender: TObject);    procedure FormDestroy(Sender: TObject);    procedure FormPaint(Sender: TObject);    procedure FormMouseDown(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);    procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);    procedure FormMouseUp(Sender: TObject; Button: TMouseButton;      Shift: TShiftState; X, Y: Integer);  end;var  Form1: TForm1;implementation{$R *.dfm}var  cvs: TCanvas;  x1,y1: Real;  wx,wy,vx,vy: Integer;  f: Boolean;procedure TForm1.FormCreate(Sender: TObject);begin  cvs := TCanvas.Create;  cvs.Handle := GetDC(Handle);  wx := ClientWidth;  wy := ClientHeight;  vx := wx;  vy := wy;end;procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  f := True;  x1 := X;  y1 := Y;end;procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,  Y: Integer);begin  if not f then Exit;  x1 := X / x1;  y1 := Y / y1;  vx := Trunc(vx * x1);  vy := Trunc(vy * y1);  Repaint;  x1 := X;  y1 := Y;end;procedure TForm1.FormMouseUp(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);begin  f := False;end;procedure TForm1.FormPaint(Sender: TObject);const  pts: array[0..2] of TPoint = ((X:60; Y:10), (X:60; Y:100), (X:10; Y:100));begin  SetMapMode(cvs.Handle, MM_ANISOTROPIC);  {只能在 MM_ISOTROPIC 或 MM_ANISOTROPIC 模式下使用下面两个函数}  SetWindowExtEx(cvs.Handle, wx, wy, nil);  SetViewportExtEx(cvs.Handle, vx, vy, nil);  cvs.Pen.Width := 3;  cvs.Pen.Color := clRed;  cvs.Brush.Style := bsCross;  cvs.Brush.Color := clSilver;  cvs.Polygon(pts);  cvs.Ellipse(30, 70, 90, 130);end;procedure TForm1.FormDestroy(Sender: TObject);begin  cvs.Free;end;end.
窗体文件:

object Form1: TForm1  Left = 0  Top = 0  Caption = 'Form1'  ClientHeight = 241  ClientWidth = 302  Color = clBtnFace  Font.Charset = DEFAULT_CHARSET  Font.Color = clWindowText  Font.Height = -11  Font.Name = 'Tahoma'  Font.Style = []  OldCreateOrder = False  Position = poDesktopCenter  OnCreate = FormCreate  OnDestroy = FormDestroy  OnMouseDown = FormMouseDown  OnMouseMove = FormMouseMove  OnMouseUp = FormMouseUp  OnPaint = FormPaint  PixelsPerInch = 96  TextHeight = 13end

转载于:https://my.oschina.net/hermer/blog/319142

你可能感兴趣的文章
Oracle死锁处理实例
查看>>
[转]Android Studio创建Xposed模块项目时BridgeApi的正确添加方式
查看>>
【hive】——Hive sql语法详解
查看>>
python 全栈开发,Day50(Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏)...
查看>>
一篇网络流的好blog
查看>>
Python基础之继承与派生
查看>>
filter、map、every函数的使用
查看>>
黑马程序员——iOS学习——UITableView表视图单元样式
查看>>
Bash基础——减号-
查看>>
Android适配文件dimen自动生成代码
查看>>
走马观花--快餐学python笔记
查看>>
jquery轻量级富文本编辑器Trumbowyg
查看>>
(二十八)static关键字
查看>>
转 MySQL数据库基础
查看>>
ubuntu 解压命令全部
查看>>
Chrome教程(一)NetWork面板分析网络请求
查看>>
第十八回  基础才是重中之重~开发人员应学会用throw
查看>>
Swift -- 中文版两大官方文档汇总
查看>>
U3D调用7z解压文件
查看>>
Windows移动开发(二)——闭关修炼
查看>>