我想围绕窗体中的按钮控件画一个矩形,然后在矩形里填充图片或颜色,用API怎么做?高分

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我想围绕窗体中的按钮控件画一个矩形,然后在矩形里填充图片或颜色,用API怎么做?高分相关的知识,希望对你有一定的参考价值。

是用VB喔,这个问题困了我好久了````一旦采用,另外追加分
画矩形我是画了,围绕控件,问题是,无法在控件上进行填充色或者图片,感觉很晕,还有,控件透明也实现不了,很晕,查了好久的API,找不出
如果能给出代码,追加两百分。

参考技术A 首先 获取窗体按钮的坐标,然后绘制矩形 用dc绘图就好了 并且在窗口重绘事件中执行此程序就好!感觉这个思路就能实现追问

画矩形我是画了,围绕控件,问题是,无法在控件上进行填充色或者图片,感觉很晕,还有,控件透明也实现不了,很晕,查了好久的API,找不出
如果能给出代码,追加两百分。

追答

这个我没有写过!但是 可以用api给你实现在button上绘制图形! 不知道你 为什么非要在button上实现这样的功能 为什么不用picturebox呢

追问

我是想做一个皮肤控件,目前,能获得窗体所有的控件,所有的窗体句柄,只有这一个难题了,
使终得不到解决`````
Button上绘制图形的API是哪一个?有没有代码呀?

追答

http://wenku.baidu.com/view/c4faea8da0116c175f0e4825.html
这里有个c++的代码 你看一下吧 你了解api 这个代码应该对你有帮助的
获取按钮的句柄 然后 用根据这个句柄获取dc 然后将位图选择为画刷 ,调用dc的fillrectangle 就能实现你说的要求 里边应该还可以是先透明的

追问

刚刚抽空看了下,没有找到我要的API呀```也有可能是我不知道API在C中的用法

追答

'这个程序演示如何将一个BMP位图作为刷子填充整个窗口

Private Type LOGBRUSH
lbStyle As Integer
lbColor As Long
lbHatch As Long
End Type

Private Type POINTAPI
x As Long
y As Long
End Type

Private Declare Function MoveToEx Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, lpPoint As POINTAPI) As Long
Private Declare Function LineTo Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
Private Declare Function ExtFloodFill Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long, ByVal wFillType As Long) As Long

Private Declare Function CreateBrushIndirect Lib "gdi32" (lpLogBrush As LOGBRUSH) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function CreatePatternBrush Lib "gdi32" (ByVal hBitmap As Long) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function ExtCreatePen Lib "gdi32" (ByVal dwPenStyle As Long, ByVal dwWidth As Long, lplb As Any, ByVal dwStyleCount As Long, ByVal lpStyle As Any) As Long

Const PS_GEOMETRIC = &H10000
Const PS_SOLID = 0
Const PS_ENDCAP_MASK = &HF00

Const BS_PATTERN = 3
Const BS_PATTERN8X8 = 7

Const DIB_RGB_COLORS = 0

Private Sub Form_Load()
Picture1.Visible = False
End Sub

Private Sub Form_Paint()
Dim lOldBrush As Long
Dim lOldPen As Long
Dim lBrush As Long
Dim lPen As Long
Dim l1 As Long
Dim ap As POINTAPI
Dim tLogBrush As LOGBRUSH

lBrush = CreatePatternBrush(Picture1.Image)
lOldBrush = SelectObject(Me.hdc, lBrush)
If ExtFloodFill(Me.hdc, 3, 0, 25&, 0&) Then
End If
lBrush = SelectObject(Me.hdc, lOldBrush)
If DeleteObject(lBrush) Then
End If
End Sub

追问

这个我是会的,我不知道的两个问题:
1.如何让控件透明
2.如何在控件上用图片做为刷子填充整个控件````
完毕``

追答

那你要重写button喽
你获取了控件的坐标 画个矩形填充不就好了,上边不是有图片做刷子的例子吗
c++里边就是这样实现的 当你重绘窗口的时候 再填充就好了

追问

额```我就是在填充这一步上卡住了,始终无法填充上去````我都快吐血了

在python中的openCV中绘制一个旋转的框

【中文标题】在python中的openCV中绘制一个旋转的框【英文标题】:Draw a rotated box in openCV in python 【发布时间】:2018-03-14 20:38:16 【问题描述】:

我想画一个旋转的矩形,我有左上角和右下角,盒子的宽度和高度。还有角度。但我似乎无法弄清楚如何在 Python 中使用 OpenCV 绘制旋转矩形。请注意,我不想旋转图像。

谢谢

【问题讨论】:

计算另外两个角的坐标,然后画一个封闭的polyline连接它们。 【参考方案1】:

在 OpenCV 中有很多方法可以绘制矩形。

来自 OpenCV 文档:Drawing Functions

矩形

绘制一个简单的、粗的或填充的右上矩形。

所以这个函数没有帮助,因为你想旋转它。

矩形只不过是一个特殊的 4 边多边形。因此,只需使用绘制多边形的函数即可。

折线

绘制多条多边形曲线。

Python:

cv2.polylines(img, pts, isClosed, color[, thickness[, lineType[, shift]]]) → img

并插入旋转矩形的 4 个顶点

或使用分别绘制 4 个边

绘制连接两点的线段。

drawContours

绘制轮廓轮廓或填充轮廓。

可以使用简单的数学或例如使用 OpenCV 的 RotatedRect https://docs.opencv.org/2.4/modules/core/doc/basic_structures.html#rotatedrect 获得点数

【讨论】:

【参考方案2】:
   class Point:

        def __init__(self, x, y):
            self.x = int(x)
            self.y = int(y)


    class Rectangle:

        def __init__(self, x, y, w, h, angle):

            # Center Point
            self.x = x
            self.y = y
            # Height and Width
            self.w = w
            self.h = h
            self.angle = angle

        def rotate_rectangle(self, theta):
            pt0, pt1, pt2, pt3 = self.get_vertices_points()

            # Point 0
            rotated_x = math.cos(theta) * (pt0.x - self.x) - math.sin(theta) * (pt0.y - self.y) + self.x
            rotated_y = math.sin(theta) * (pt0.x - self.x) + math.cos(theta) * (pt0.y - self.y) + self.y
            point_0 = Point(rotated_x, rotated_y)

            # Point 1
            rotated_x = math.cos(theta) * (pt1.x - self.x) - math.sin(theta) * (pt1.y - self.y) + self.x
            rotated_y = math.sin(theta) * (pt1.x - self.x) + math.cos(theta) * (pt1.y - self.y) + self.y
            point_1 = Point(rotated_x, rotated_y)

            # Point 2
            rotated_x = math.cos(theta) * (pt2.x - self.x) - math.sin(theta) * (pt2.y - self.y) + self.x
            rotated_y = math.sin(theta) * (pt2.x - self.x) + math.cos(theta) * (pt2.y - self.y) + self.y
            point_2 = Point(rotated_x, rotated_y)

            # Point 3
            rotated_x = math.cos(theta) * (pt3.x - self.x) - math.sin(theta) * (pt3.y - self.y) + self.x
            rotated_y = math.sin(theta) * (pt3.x - self.x) + math.cos(theta) * (pt3.y - self.y) + self.y
            point_3 = Point(rotated_x, rotated_y)

            return point_0, point_1, point_2, point_3

返回已被 theta 翻译的四个新点

https://github.com/rij12/YOPO/blob/yopo/darkflow/net/yopo/calulating_IOU.py

【讨论】:

以上是关于我想围绕窗体中的按钮控件画一个矩形,然后在矩形里填充图片或颜色,用API怎么做?高分的主要内容,如果未能解决你的问题,请参考以下文章

c# winform中怎么画出圆角矩形或者就有这样的控件,求指点

C# DevExpress 窗体控件 gridcontrol 获取单元格显示区域的矩形, 然后得到坐标的方法 是啥?

MFC绘制矩形

MFC 画一个圆角的 矩形 我要的不是按钮注意 只是画图!

MFC怎么绘制一个圆角矩形

画一个可拖动的矩形