-3

我想用 C# 为 AutoIt 编写一个 GUI 编辑器,但我对 C# 不够好。当按下 GUI 中的任何对象时,我想在对象周围绘制一个正方形(聚焦)。像这样:

http://i.imgur.com/c9TB8.png

是否有任何库可以更轻松地编写这种东西?

4

2 回答 2

1

Square 是使用DrawRectangle函数之一绘制的。他们每个人都需要一支笔。通常我们使用普通的实心笔,但是你需要一个改变了DashStyle属性的笔。对于虚线,将此属性更改为DashStyle.Dot。您还可以试验DashPattern属性。

要在大正方形周围绘制小正方形,您需要FillRectangle函数之一。他们每个人都需要一把刷子。您需要一个白色画笔,这是为您方便地预定义的。填充一个矩形后,您必须在其上绘制一个具有相同尺寸的矩形。这两个函数一起给人一种空的和有线条的矩形的印象。

要使小方块像图像中一样圆润,您必须更改调用 DrawRectangle 时使用的 pen 参数。试验LineJoinPen类的其他属性。

于 2012-10-23T22:21:55.933 回答
0

这对于您发布的一个简单问题来说非常困难。有很多事情你需要照顾。

  1. 首先,我建议创建一个具有Rectangle属性的类,因为您不能将 Rectangle 子类化,因为它是一个结构。
  2. 您将需要处理绘图,这是其他答案中提到的最简单的任务,因此我不会对此进行具体说明。
  3. 由于您有指示矩形可以调整大小的小方块,因此您必须实现检查鼠标点是否在大矩形或某些小矩形内的方法。在这种情况下,您应该更改光标以指示调整大小的可能性。
  4. 要处理矩形的移动(但不调整大小),您必须制作一个带有向所有方向移动的标志的新小正方形,或者当鼠标位置在大矩形内时使用光标来处理。
  5. 主要问题是在调整大小时确定要更改的内容,您有两个选择:(1) 更改LocationSize属性或更改X,YWidth(2)Height矩形的属性。例如,当您移动右上角时,您应该在第一种情况下更改位置和大小,或者在使用第二个选项时更改 Y 和宽度。
  6. 在单击鼠标时移动鼠标时,应注意鼠标移动的方向。如果将视口拆分为矩形中心是笛卡尔坐标系中心的象限,通过识别鼠标在哪个象限中,您将知道需要移动象限的哪个角(或边缘)。
  7. 每次鼠标移动都必须调用 Invalidate() 因为您不能像在 C++ 中那样使用 Xor。因此,当您的 Rectangle 显示时,您应该处于一种特殊模式,其中不移动的所有内容(不更改,除 Rectangle 和选定控件之外的所有内容)都应该绘制到在两次重绘之间使用的位图上,并且您应该只绘制什么是移动。

如您所见,有很多事情需要注意。只有在确定您已经实现了程序的其他部分之后,您才应该从这里开始。

于 2012-10-23T23:06:56.853 回答