添加标题和放大器;位置属性这一习俗ColorDialog类 [英] Adding Title & Location properties to this custom ColorDialog

查看:258
本文介绍了添加标题和放大器;位置属性这一习俗ColorDialog类的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经采取了从自定义ColorDialog类类一块,另一块的其他定制ColorDialog类。

第一类已经实现了Title属性。

这是第一类(标记为答案翻译成VBNET)的我如何改变ColorDialog类的标题?

第二类已经实现了实时挑的颜色。

这是第二类(标记为答案):<一href="http://stackoverflow.com/questions/16583139/get-color-property-while-colordialog-still-open-before-confirming-the-dialog/">Get颜色属性而ColorDialog类仍处于打开状态,确认对话框之前?

Unafortunatelly的位置属性我不知道任何关于如何落实到甚至被搜索的解决方案的对话框。

好了,现在我想合并两件code以获得一个强大的默认ColorDialog类。

自定义ColorDialog类类翻译成VB.NET与Title属性是工作,但是当我尝试合并两类title属性不工作,我可以在属性字段更改标题值,但没有显示任何标题(该ColorDialog类标题是空的)。

我的问题是什么样的变化,我需要作出此类正常工作Title属性,如果我怎么能在ColorDialog类在屏幕上实现一个位置属性来容易移居如果我的愿望,例如: MyColorDialog.Location =新的点(),我已经使用了RECT结构尝试过的事情了。

这就是我所做的更改合并类的重要组成部分:

(Title属性的东西都regioned和评论分开。)

 导入了System.Runtime.InteropServices

公共类Colordialog_Realtime
    继承ColorDialog类

#REGIONTitle属性的东西

    &LT;的DllImport(user32.dll中)&GT; _
    私人共享功能函数SetWindowText(HWND作为IntPtr的,lpString作为字符串)作为布尔
    端功能

    私人m_title作为字符串=的String.Empty
    私人标题设置为布尔= FALSE

    公共属性Title()作为字符串
        得到
            返回m_title
        最终获取
        设置(值作为字符串)
            如果值状态并没有任何AndAlso值小于;&GT; m_title然后
                m_title =价值
                标题设置中=假
            结束如果
        结束设定
    高端物业

#END地区

    公共事件CurrentColor(BYVAL c以彩色)

    私人常量GA_ROOT作为整数= 2
    私人常量WM_CTLCOLOREDIT作为整数=安培; H133

    公开声明函数GetAncestor库user32.dll中_
        (BYVAL的HWND作为IntPtr的,BYVAL gaFlags为整数)作为IntPtr的

    私人EditWindows方式列表(中ApiWindow)=无

    公共子新()
        Me.FullOpen = TRUE
    结束小组

    <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand,名称:=FullTrust的)&GT; _
    受保护的覆盖功能HOOKPROC(BYVAL的HWND作为IntPtr的,BYVAL味精作为整数,BYVAL wParam中的IntPtr,BYVAL lParam中的IntPtr)作为IntPtr的

        Title属性的东西
        如果不那么标题设置
            SetWindowText函数(HWND,m_title)
            标题设置为TRUE
        结束如果
        称号属性的东西完

        选择案例味精
            案例WM_CTLCOLOREDIT
                如果IsNothing(EditWindows)然后
                    昏暗的主窗口作为IntPtr的= GetAncestor(HWND,GA_ROOT)
                    如果不mainWindow.Equals(IntPtr.Zero)然后
                        EditWindows =新名单(中ApiWindow)((新WindowsEnumerator).GetChildWindows(的主窗口,编辑))
                    结束如果
                结束如果

                如果不IsNothing(EditWindows)AndAlso EditWindows.Count = 6于是,
                    DIM strRed的String = WindowsEnumerator.WindowText(EditWindows(3).hWnd)
                    昏暗strGreen作为字符串= WindowsEnumerator.WindowText(EditWindows(4).hWnd)
                    昏暗strBlue作为字符串= WindowsEnumerator.WindowText(EditWindows(5).hWnd)

                    暗淡的红,绿,蓝作为整数
                    如果Integer.TryParse(strRed,红)。然后
                        如果Integer.TryParse(strGreen,绿),然后
                            如果Integer.TryParse(strBlue,蓝)然后
                                的RaiseEvent CurrentColor(Color.FromArgb(红,绿,蓝))
                            结束如果
                        结束如果
                    结束如果
                结束如果
        最终选择

        返回MyBase.HookProc(HWND,味精,的wParam,lParam的)
    端功能

末级
 

这是其他类:

 类ApiWindow
    公众的hWnd作为IntPtr的
    公共类名作为字符串
    公共MainWindowTitle作为字符串
末级

类WindowsEnumerator

私人委托函数EnumCallBackDelegate(BYVAL HWND作为IntPtr的,BYVAL lParam的作为整数)作为整数

私人声明函数EnumWindows的库USER32_
    (BYVAL lpEnumFunc作为EnumCallBackDelegate,BYVAL lParam的作为整数)作为整数

私人声明函数EnumChildWindows库USER32_
    (BYVAL hWndParent作为IntPtr的,BYVAL lpEnumFunc作为EnumCallBackDelegate,BYVAL lParam的作为整数)作为整数

私人声明函数GetClassName库USER32别名GetClassNameA_
    (BYVAL HWND作为IntPtr的,BYVAL lpClassName作为System.Text.StringBuilder,BYVAL nMaxCount为整数)作为整数

私人声明函数IsWindowVisible库USER32(BYVAL HWND作为IntPtr的)作为整数

私人声明函数的getParent库USER32(BYVAL HWND作为IntPtr的)作为整数

私人声明SendMessage函数库USER32别名SendMessageA_
    (BYVAL HWND作为IntPtr的,BYVAL WMSG作为整数,wParam参数BYVAL作为整数,BYVAL lParam的作为整数)作为整数

私人声明SendMessage函数库USER32别名SendMessageA_
    (BYVAL HWND作为IntPtr的,BYVAL WMSG作为整数,wParam参数BYVAL作为整数,BYVAL lParam中System.Text.StringBuilder)作为整数

私人_listChildren作为新的列表(ApiWindow中)
私人_listTopLevel作为新的列表(ApiWindow中)

私人_topLevelClass作为字符串=的String.Empty
私人_childClass作为字符串=的String.Empty

公共重载函数GetTopLevelWindows()作为ApiWindow()
    EnumWindows的(AddressOf EnumWindowProc,和放大器; H0)
    返回_listTopLevel.ToArray
端功能

公共重载函数GetTopLevelWindows(BYVAL类名作为字符串)作为ApiWindow()
    _topLevelClass =的className
    返回Me.GetTopLevelWindows()
端功能

公共重载函数GetChildWindows(BYVAL HWND作为的Int32)作为ApiWindow()
    _listChildren.Clear()
    EnumChildWindows(HWND,AddressOf EnumChildWindowProc,和放大器; H0)
    返回_listChildren.ToArray
端功能

公共重载函数GetChildWindows(BYVAL HWND作为的Int32,BYVAL childClass作为字符串)作为ApiWindow()
    _childClass = childClass
    返回Me.GetChildWindows(HWND)
端功能

专用功能EnumWindowProc(BYVAL HWND作为的Int32,BYVAL lParam中的Int32)作为的Int32
    如果的getParent(HWND)= 0 AndAlso IsWindowVisible(HWND)然后
        昏暗的窗口ApiWindow = GetWindowIdentification(HWND)
        如果_topLevelClass.Length = 0 OrElse运算window.ClassName.ToLower()= _topLevelClass.ToLower(),然后
            _listTopLevel.Add(窗口)
        结束如果
    结束如果
    返回1
端功能

专用功能EnumChildWindowProc(BYVAL HWND作为的Int32,BYVAL lParam中的Int32)作为的Int32
    昏暗的窗口ApiWindow = GetWindowIdentification(HWND)
    如果_childClass.Length = 0 OrElse运算window.ClassName.ToLower()= _childClass.ToLower(),然后
        _listChildren.Add(窗口)
    结束如果
    返回1
端功能

专用功能GetWindowIdentification(BYVAL HWND为整数)作为ApiWindow
    昏暗classBuilder作为新System.Text.StringBuilder(64)
    GetClassName(HWND,classBuilder,64)

    昏暗的窗口作为新ApiWindow
    window.ClassName = classBuilder.ToString()
    window.MainWindowTitle = WindowText(HWND)
    window.hWnd = HWND
    返回窗口
端功能

公共共享功能WindowText(BYVAL HWND作为IntPtr的)作为字符串
    常量W_GETTEXT作为整数=安培;高清
    常量W_GETTEXTLENGTH作为整数=安培;何

    昏暗的SB作为新System.Text.StringBuilder
    昏暗的长度为整数= SendMessage消息(HWND,W_GETTEXTLENGTH,0,0)
    如果长度GT; 0然后
        SB =新System.Text.StringBuilder(长度+ 1)的
        SendMessage消息(HWND,W_GETTEXT,SB.Capacity,SB)
    结束如果
    返回SB.ToString
端功能

末级
 

解决方案

实例:

 私人小组PicBox_Click(发送者为对象,E作为EventArgs的)把手PicBox.Click
    昏暗prevColor对于Color = PicBox.BackColor

    ColorDlg =新Colordialog_Realtime
    ColorDlg.Color = PicBox.backcolor
    ColorDlg.Title =请选择新的颜色:
    ColorDlg.Location =新的点(Me.Location.X + Me.Width,Me.Location.Y)
    如果ColorDlg.ShowDialog()= Windows.Forms.DialogResult.OK然后
        PicBox.BackColor = ColorDlg.Color
    其他
        PicBox.BackColor = prevColor
    结束如果
    ColorDlg =无
结束小组
 

Col​​ordialog_Realtime 类:

 公共类Colordialog_Realtime
    继承ColorDialog类

    公共事件CurrentColor(BYVAL c以彩色)

    私人常量GA_ROOT作为整数= 2
    私人常量WM_PAINT作为整数=放大器; HF
    私人常量WM_CTLCOLOREDIT作为整数=安培; H133

    公开声明函数GetAncestor库user32.dll中_
        (BYVAL的HWND作为IntPtr的,BYVAL gaFlags为整数)作为IntPtr的

    私人EditWindows方式列表(中ApiWindow)=无

    公共子新()
        Me.FullOpen = TRUE
    结束小组

    &LT; Runtime.InteropServices.DllImport(user32.dll中)&GT; _
    私人共享功能函数SetWindowText(HWND作为IntPtr的,lpString作为字符串)作为布尔
    端功能

    私人常量SWP_NOSIZE作为整数=安培; H1
    私人声明函数SetWindowPos库USER32别名SetWindowPos_
        (BYVAL HWND作为IntPtr的,BYVAL hWndInsertAfter作为整数,BYVAL x As中整数,BYVAL y为整数,BYVAL CX作为整数,BYVAL CY作为整数,BYVAL wFlags为整数)作为整数

    私人m_title作为字符串=的String.Empty
    私人标题设置为布尔= FALSE

    公共属性Title()作为字符串
        得到
            返回m_title
        最终获取
        设置(值作为字符串)
            如果值状态并没有任何AndAlso值小于;&GT; m_title然后
                m_title =价值
                标题设置中=假
            结束如果
        结束设定
    高端物业

    私人m_location作为点= Point.Empty
    私人locationSet由于布尔= FALSE

    公共属性Location()为点
        得到
            返回m_location
        最终获取
        设置(值点)
            如果不v​​alue.Equals(Point.Empty)AndAlso不value.Equals(m_location)然后
                m_location =价值
                locationSet =假
            结束如果
        结束设定
    高端物业

    <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand,名称:=FullTrust的)&GT; _
    受保护的覆盖功能HOOKPROC(BYVAL的HWND作为IntPtr的,BYVAL味精作为整数,BYVAL wParam中的IntPtr,BYVAL lParam中的IntPtr)作为IntPtr的
        选择案例味精
            案例WM_PAINT
                如果没有标题设置中AndAlso标题&LT;&GT;的String.Empty然后
                    SetWindowText函数(GetAncestor(HWND,GA_ROOT),标题)
                    标题设置为TRUE
                结束如果
                如果没有locationSet AndAlso不m_location.Equals(Point.Empty)然后
                    SetWindowPos(GetAncestor(HWND,GA_ROOT),0,m_location.X,m_location.Y,0,0,SWP_NOSIZE)
                    locationSet = TRUE
                结束如果

            案例WM_CTLCOLOREDIT
                如果IsNothing(EditWindows)然后
                    昏暗的主窗口作为IntPtr的= GetAncestor(HWND,GA_ROOT)
                    如果不mainWindow.Equals(IntPtr.Zero)然后
                        EditWindows =新名单(中ApiWindow)((新WindowsEnumerator).GetChildWindows(的主窗口,编辑))
                    结束如果
                结束如果

                如果不IsNothing(EditWindows)AndAlso EditWindows.Count = 6于是,
                    DIM strRed的String = WindowsEnumerator.WindowText(EditWindows(3).hWnd)
                    昏暗strGreen作为字符串= WindowsEnumerator.WindowText(EditWindows(4).hWnd)
                    昏暗strBlue作为字符串= WindowsEnumerator.WindowText(EditWindows(5).hWnd)

                    暗淡的红,绿,蓝作为整数
                    如果Integer.TryParse(strRed,红)。然后
                        如果Integer.TryParse(strGreen,绿),然后
                            如果Integer.TryParse(strBlue,蓝)然后
                                的RaiseEvent CurrentColor(Color.FromArgb(红,绿,蓝))
                            结束如果
                        结束如果
                    结束如果
                结束如果
        最终选择

        返回MyBase.HookProc(HWND,味精,的wParam,lParam的)
    端功能

末级
 

I've taken a piece from a custom Colordialog class and another piece of other custom Colordialog.

The first class have implemented the Title property.

This is the first class (The marked answer translated to VBNET) : How do I change the title of ColorDialog?

The second class have implemented the realtime pick of the colors.

This is the second class (The marked answer): Get color property while ColorDialog still open, before confirming the dialog?

Unafortunatelly for the Location property I don't know nothing about how to implement it into a dialog even been searched for a solution.

Well, now I'm trying to merge the two pieces of code to get a powerfull "default" ColorDialog.

The custom ColorDialog class translated to VB.NET with Title property is working but when I try to merge the two classes the title property is not working, I can change the title value in the property field but is not showing any title (the ColorDialog title is empty).

My question is what changes I need to make to this class to work properly the Title property and if how I can implement a "Location" property to easy relocate the ColorDialog over the screen if i desire, for example: MyColorDialog.Location = new point(), I've tried it time ago using the RECT structure.

This is the important part of the merged class where I made changes :

(The Title property things are regioned and commented in separate.)

Imports System.Runtime.InteropServices

Public Class Colordialog_Realtime
    Inherits ColorDialog

#Region " Title property things"

    <DllImport("user32.dll")> _
    Private Shared Function SetWindowText(hWnd As IntPtr, lpString As String) As Boolean
    End Function

    Private m_title As String = String.Empty
    Private titleSet As Boolean = False

    Public Property Title() As String
        Get
            Return m_title
        End Get
        Set(value As String)
            If value IsNot Nothing AndAlso value <> m_title Then
                m_title = value
                titleSet = False
            End If
        End Set
    End Property

#End Region

    Public Event CurrentColor(ByVal c As Color)

    Private Const GA_ROOT As Integer = 2
    Private Const WM_CTLCOLOREDIT As Integer = &H133

    Public Declare Function GetAncestor Lib "user32.dll" _
        (ByVal hWnd As IntPtr, ByVal gaFlags As Integer) As IntPtr

    Private EditWindows As List(Of ApiWindow) = Nothing

    Public Sub New()
        ' Me.FullOpen = True
    End Sub

    <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
    Protected Overrides Function HookProc(ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr

        ' Title property things"
        If Not titleSet Then
            SetWindowText(hWnd, m_title)
            titleSet = True
        End If
        ' End of title property things

        Select Case msg
            Case WM_CTLCOLOREDIT
                If IsNothing(EditWindows) Then
                    Dim mainWindow As IntPtr = GetAncestor(hWnd, GA_ROOT)
                    If Not mainWindow.Equals(IntPtr.Zero) Then
                        EditWindows = New List(Of ApiWindow)((New WindowsEnumerator).GetChildWindows(mainWindow, "Edit"))
                    End If
                End If

                If Not IsNothing(EditWindows) AndAlso EditWindows.Count = 6 Then
                    Dim strRed As String = WindowsEnumerator.WindowText(EditWindows(3).hWnd)
                    Dim strGreen As String = WindowsEnumerator.WindowText(EditWindows(4).hWnd)
                    Dim strBlue As String = WindowsEnumerator.WindowText(EditWindows(5).hWnd)

                    Dim Red, Green, Blue As Integer
                    If Integer.TryParse(strRed, Red) Then
                        If Integer.TryParse(strGreen, Green) Then
                            If Integer.TryParse(strBlue, Blue) Then
                                RaiseEvent CurrentColor(Color.FromArgb(Red, Green, Blue))
                            End If
                        End If
                    End If
                End If
        End Select

        Return MyBase.HookProc(hWnd, msg, wParam, lParam)
    End Function

End Class 

This are the other classes:

Class ApiWindow
    Public hWnd As IntPtr
    Public ClassName As String
    Public MainWindowTitle As String
End Class

Class WindowsEnumerator

Private Delegate Function EnumCallBackDelegate(ByVal hwnd As IntPtr, ByVal lParam As Integer) As Integer

Private Declare Function EnumWindows Lib "user32" _
    (ByVal lpEnumFunc As EnumCallBackDelegate, ByVal lParam As Integer) As Integer

Private Declare Function EnumChildWindows Lib "user32" _
    (ByVal hWndParent As IntPtr, ByVal lpEnumFunc As EnumCallBackDelegate, ByVal lParam As Integer) As Integer

Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" _
    (ByVal hwnd As IntPtr, ByVal lpClassName As System.Text.StringBuilder, ByVal nMaxCount As Integer) As Integer

Private Declare Function IsWindowVisible Lib "user32" (ByVal hwnd As IntPtr) As Integer

Private Declare Function GetParent Lib "user32" (ByVal hwnd As IntPtr) As Integer

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
    (ByVal hwnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As System.Text.StringBuilder) As Integer

Private _listChildren As New List(Of ApiWindow)
Private _listTopLevel As New List(Of ApiWindow)

Private _topLevelClass As String = String.Empty
Private _childClass As String = String.Empty

Public Overloads Function GetTopLevelWindows() As ApiWindow()
    EnumWindows(AddressOf EnumWindowProc, &H0)
    Return _listTopLevel.ToArray
End Function

Public Overloads Function GetTopLevelWindows(ByVal className As String) As ApiWindow()
    _topLevelClass = className
    Return Me.GetTopLevelWindows()
End Function

Public Overloads Function GetChildWindows(ByVal hwnd As Int32) As ApiWindow()
    _listChildren.Clear()
    EnumChildWindows(hwnd, AddressOf EnumChildWindowProc, &H0)
    Return _listChildren.ToArray
End Function

Public Overloads Function GetChildWindows(ByVal hwnd As Int32, ByVal childClass As String) As ApiWindow()
    _childClass = childClass
    Return Me.GetChildWindows(hwnd)
End Function

Private Function EnumWindowProc(ByVal hwnd As Int32, ByVal lParam As Int32) As Int32
    If GetParent(hwnd) = 0 AndAlso IsWindowVisible(hwnd) Then
        Dim window As ApiWindow = GetWindowIdentification(hwnd)
        If _topLevelClass.Length = 0 OrElse window.ClassName.ToLower() = _topLevelClass.ToLower() Then
            _listTopLevel.Add(window)
        End If
    End If
    Return 1
End Function

Private Function EnumChildWindowProc(ByVal hwnd As Int32, ByVal lParam As Int32) As Int32
    Dim window As ApiWindow = GetWindowIdentification(hwnd)
    If _childClass.Length = 0 OrElse window.ClassName.ToLower() = _childClass.ToLower() Then
        _listChildren.Add(window)
    End If
    Return 1
End Function

Private Function GetWindowIdentification(ByVal hwnd As Integer) As ApiWindow
    Dim classBuilder As New System.Text.StringBuilder(64)
    GetClassName(hwnd, classBuilder, 64)

    Dim window As New ApiWindow
    window.ClassName = classBuilder.ToString()
    window.MainWindowTitle = WindowText(hwnd)
    window.hWnd = hwnd
    Return window
End Function

Public Shared Function WindowText(ByVal hwnd As IntPtr) As String
    Const W_GETTEXT As Integer = &HD
    Const W_GETTEXTLENGTH As Integer = &HE

    Dim SB As New System.Text.StringBuilder
    Dim length As Integer = SendMessage(hwnd, W_GETTEXTLENGTH, 0, 0)
    If length > 0 Then
        SB = New System.Text.StringBuilder(length + 1)
        SendMessage(hwnd, W_GETTEXT, SB.Capacity, SB)
    End If
    Return SB.ToString
End Function

End Class

解决方案

Example usage:

Private Sub PicBox_Click(sender As Object, e As EventArgs) Handles PicBox.Click
    Dim prevColor As Color = PicBox.BackColor

    ColorDlg = New Colordialog_Realtime
    ColorDlg.Color = PicBox.backcolor
    ColorDlg.Title = "Please Select a New Color:"
    ColorDlg.Location = New Point(Me.Location.X + Me.Width, Me.Location.Y)
    If ColorDlg.ShowDialog() = Windows.Forms.DialogResult.OK Then
        PicBox.BackColor = ColorDlg.Color
    Else
        PicBox.BackColor = prevColor
    End If
    ColorDlg = Nothing
End Sub

New Colordialog_Realtime Class:

Public Class Colordialog_Realtime
    Inherits ColorDialog

    Public Event CurrentColor(ByVal c As Color)

    Private Const GA_ROOT As Integer = 2
    Private Const WM_PAINT As Integer = &HF
    Private Const WM_CTLCOLOREDIT As Integer = &H133

    Public Declare Function GetAncestor Lib "user32.dll" _
        (ByVal hWnd As IntPtr, ByVal gaFlags As Integer) As IntPtr

    Private EditWindows As List(Of ApiWindow) = Nothing

    Public Sub New()
        Me.FullOpen = True
    End Sub

    <Runtime.InteropServices.DllImport("user32.dll")> _
    Private Shared Function SetWindowText(hWnd As IntPtr, lpString As String) As Boolean
    End Function

    Private Const SWP_NOSIZE As Integer = &H1
    Private Declare Function SetWindowPos Lib "user32" Alias "SetWindowPos" _
        (ByVal hwnd As IntPtr, ByVal hWndInsertAfter As Integer, ByVal x As Integer, ByVal y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal wFlags As Integer) As Integer

    Private m_title As String = String.Empty
    Private titleSet As Boolean = False

    Public Property Title() As String
        Get
            Return m_title
        End Get
        Set(value As String)
            If value IsNot Nothing AndAlso value <> m_title Then
                m_title = value
                titleSet = False
            End If
        End Set
    End Property

    Private m_location As Point = Point.Empty
    Private locationSet As Boolean = False

    Public Property Location() As Point
        Get
            Return m_location
        End Get
        Set(value As Point)
            If Not value.Equals(Point.Empty) AndAlso Not value.Equals(m_location) Then
                m_location = value
                locationSet = False
            End If
        End Set
    End Property

    <System.Security.Permissions.PermissionSetAttribute(System.Security.Permissions.SecurityAction.Demand, Name:="FullTrust")> _
    Protected Overrides Function HookProc(ByVal hWnd As IntPtr, ByVal msg As Integer, ByVal wParam As IntPtr, ByVal lParam As IntPtr) As IntPtr
        Select Case msg
            Case WM_PAINT
                If Not titleSet AndAlso Title <> String.Empty Then
                    SetWindowText(GetAncestor(hWnd, GA_ROOT), Title)
                    titleSet = True
                End If
                If Not locationSet AndAlso Not m_location.Equals(Point.Empty) Then
                    SetWindowPos(GetAncestor(hWnd, GA_ROOT), 0, m_location.X, m_location.Y, 0, 0, SWP_NOSIZE)
                    locationSet = True
                End If

            Case WM_CTLCOLOREDIT
                If IsNothing(EditWindows) Then
                    Dim mainWindow As IntPtr = GetAncestor(hWnd, GA_ROOT)
                    If Not mainWindow.Equals(IntPtr.Zero) Then
                        EditWindows = New List(Of ApiWindow)((New WindowsEnumerator).GetChildWindows(mainWindow, "Edit"))
                    End If
                End If

                If Not IsNothing(EditWindows) AndAlso EditWindows.Count = 6 Then
                    Dim strRed As String = WindowsEnumerator.WindowText(EditWindows(3).hWnd)
                    Dim strGreen As String = WindowsEnumerator.WindowText(EditWindows(4).hWnd)
                    Dim strBlue As String = WindowsEnumerator.WindowText(EditWindows(5).hWnd)

                    Dim Red, Green, Blue As Integer
                    If Integer.TryParse(strRed, Red) Then
                        If Integer.TryParse(strGreen, Green) Then
                            If Integer.TryParse(strBlue, Blue) Then
                                RaiseEvent CurrentColor(Color.FromArgb(Red, Green, Blue))
                            End If
                        End If
                    End If
                End If
        End Select

        Return MyBase.HookProc(hWnd, msg, wParam, lParam)
    End Function

End Class

这篇关于添加标题和放大器;位置属性这一习俗ColorDialog类的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆