FloodFill VB声明
Declare Function FloodFill Lib "gdi32" Alias "FloodFill" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
说明
用当前选定的刷子在指定的设备场景中填充一个区域。区域是由颜色crColor定义的
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
hdc Long,设备场景的句柄
x,y Long,开始填充的那个点,用逻辑坐标表示
crColor Long,欲使用的边界颜色。由这个颜色包围的表面会被填充
注解
点x,y绝对不能有颜色crColor,而且必须在剪切区域内。这个函数只对光栅设备有效,请参考ExtFloodFill的注解
ExtFloodFill VB声明
Declare Function ExtFloodFill Lib "gdi32" Alias "ExtFloodFill" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long, ByVal wFillType As Long) As Long
说明
在指定的设备场景里,用当前选择的刷子填充一个区域
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
hdc Long,设备场景的句柄
x,y Long,开始填充的一个点,采用逻辑坐标表示
crColor Long,要使用的边界颜色
wFillType Long,欲执行的填充类型,由下述任何一个常数决定
FLOODFILLBORDER 等同于FloodFill函数的功能
FLOODFILLSURFACE 从指定的点向外填充,只到找到了crColor颜色(在边框采用了多种颜色时使用)
注解
如指定了FLOODFILLBORDER,那么x,y点绝对不能为crColor颜色。如指定了FLOODFILLSURFACE,那么x,y点必须是crColor颜色。这个函数只能在光栅设备中使用。可用GetDeviceCaps函数判断设备是否支持这个函数
提示
一旦指定了FLOODFILLBORDER,务必保证初始点的颜色没有crColor。如果使用的是FLOODFILLSURFACE,务必保证初始点有颜色crColor(这是函数执行失败最常见的两个原因)。注意保证初始点位于剪切区内
Declare Function FloodFill Lib "gdi32" Alias "FloodFill" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long) As Long
说明
用当前选定的刷子在指定的设备场景中填充一个区域。区域是由颜色crColor定义的
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
hdc Long,设备场景的句柄
x,y Long,开始填充的那个点,用逻辑坐标表示
crColor Long,欲使用的边界颜色。由这个颜色包围的表面会被填充
注解
点x,y绝对不能有颜色crColor,而且必须在剪切区域内。这个函数只对光栅设备有效,请参考ExtFloodFill的注解
ExtFloodFill VB声明
Declare Function ExtFloodFill Lib "gdi32" Alias "ExtFloodFill" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long, ByVal crColor As Long, ByVal wFillType As Long) As Long
说明
在指定的设备场景里,用当前选择的刷子填充一个区域
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
hdc Long,设备场景的句柄
x,y Long,开始填充的一个点,采用逻辑坐标表示
crColor Long,要使用的边界颜色
wFillType Long,欲执行的填充类型,由下述任何一个常数决定
FLOODFILLBORDER 等同于FloodFill函数的功能
FLOODFILLSURFACE 从指定的点向外填充,只到找到了crColor颜色(在边框采用了多种颜色时使用)
注解
如指定了FLOODFILLBORDER,那么x,y点绝对不能为crColor颜色。如指定了FLOODFILLSURFACE,那么x,y点必须是crColor颜色。这个函数只能在光栅设备中使用。可用GetDeviceCaps函数判断设备是否支持这个函数
提示
一旦指定了FLOODFILLBORDER,务必保证初始点的颜色没有crColor。如果使用的是FLOODFILLSURFACE,务必保证初始点有颜色crColor(这是函数执行失败最常见的两个原因)。注意保证初始点位于剪切区内
==================================================================================
从Window3.0开始,Windows系统提供了通用对话框函数(32位的在ComDlg32.dll)
保存对话框:GetSaveFileName
调色板(颜色对话框?):ChooseColor虽然封装成了通用对话框控件(Microsoft Common Dialog Control 6.0)
当我觉得它如同鸡肋,不但功能不强(无法向调用通用对话框函数那样自定义对话框),而且多了肥胖的ComDlg32.ocx
以前写的通用对话框模块:
Public Declare Function GetOpenFileName _
Lib "comdlg32.dll" Alias "GetOpenFileNameA" _
(pOpenfilename As OPENFILENAME) As Long
Public Declare Function GetSaveFileName _
Lib "comdlg32.dll" Alias "GetSaveFileNameA" _
(pOpenfilename As OPENFILENAME) As Long
Public Declare Function SHBrowseForFolder _
Lib "shell32.dll" Alias "SHBrowseForFolderA" _
(lpBrowseInfo As BROWSEINFO) As Long
Public Declare Function SHGetPathFromIDList _
Lib "shell32.dll" _
(ByVal pidl As Long, _
pszPath As String) As Long
Public Declare Function CHOOSECOLOR _
Lib "comdlg32.dll" Alias "ChooseColorA" _
(pChoosecolor As CHOOSECOLOR) As LongPublic Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End TypePublic Type BROWSEINFO
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszTitle As String
ulFlage As Long
lpfn As Long
lparam As Long
iImage As Long
End TypePrivate Type CHOOSECOLOR
lStructSize As Long
hwndOwner As Long
hInstance As Long
rgbResult As Long
lpCustColors As String
flags As Long
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End TypePublic Const OFN_HIDEREADONLY = &H4 '隐藏只读打开
Public Const OFN_READONLY = &H1 '只读打开为选中
Public Const OFN_OVERWRITEPROMPT = &H2 '覆盖时提示
Public Const OFN_ALLOWMULTISELECT = &H200 '多个选中
Public Const OFN_EXPLORER = &H80000 '资源管理器Public Function ShowOpen(MehWnd As Long, _
FileOpen As String, _
Optional Title As String = "打开:", _
Optional Filter As String = vbNullChar + vbNullChar, _
Optional FilterIndex As Long = 0, _
Optional StartDir As String = vbNullChar, _
Optional flags As Long = OFN_HIDEREADONLY) As Long
Dim OpenFN As OPENFILENAME
Dim Rc As Long
With OpenFN
.hwndOwner = MehWnd
.hInstance = App.hInstance
.lpstrTitle = Title
.lpstrFilter = Filter
.nFilterIndex = FilterIndex
.lpstrInitialDir = StartDir
.lpstrFile = String$(256, 0)
.nMaxFile = 255
.lpstrFileTitle = .lpstrFile
.nMaxFileTitle = 255
.flags = flags
.lStructSize = Len(OpenFN)
End With
Rc = GetOpenFileName(OpenFN)
If Rc Then
FileOpen = Left$(OpenFN.lpstrFile, OpenFN.nMaxFile)
ShowOpen = True
Else
ShowOpen = False
End If
End FunctionPublic Function ShowSave(MehWnd As Long, _
FileSave As String, _
Optional Title As String = "保存:", _
Optional Filter As String = vbNullChar + vbNullChar, _
Optional FilterIndex As Long = 0, _
Optional StartDir As String = vbNullChar, _
Optional flags As Long = OFN_HIDEREADONLY Or OFN_OVERWRITEPROMPT) As Long
Dim SaveFN As OPENFILENAME
Dim Rc As Long
With SaveFN
.hwndOwner = MehWnd
.hInstance = App.hInstance
.lpstrTitle = Title
.lpstrFilter = Filter
.nFilterIndex = FilterIndex
.lpstrInitialDir = StartDir
.lpstrFile = FileSave + String$(255, Chr$(0))
.nMaxFile = Len(.lpstrFile)
.lpstrFileTitle = .lpstrFile
.nMaxFileTitle = 255
.flags = flags
.lStructSize = Len(SaveFN)
End With
Rc = GetSaveFileName(SaveFN)
If Rc Then
FileSave = Left$(SaveFN.lpstrFile, SaveFN.nMaxFile)
ShowSave = True
Else
ShowSave = False
End If
End FunctionPublic Function ShowDir(MehWnd As Long, _
DirPath As String, _
Optional Title As String = "请选择文件夹:", _
Optional flage As Long = &H1, _
Optional DirID As Long) As Long
Dim BI As BROWSEINFO
Dim TempID As Long
Dim TempStr As String
TempStr = String$(255, Chr$(0))
With BI
.hOwner = MehWnd
.pidlRoot = 0
.lpszTitle = Title + Chr$(0)
.ulFlage = flage
End With
TempID = SHBrowseForFolder(BI)
DirID = TempID
If SHGetPathFromIDList(ByVal TempID, ByVal TempStr) Then
DirPath = Left$(TempStr, InStr(TempStr, Chr$(0)) - 1)
ShowDir = -1
Else
ShowDir = 0
End If
End FunctionPublic Function ShowColor(MehWnd As Long, _
GetColour As Long, _
Optional flags As Long = 0)
Dim CC As CHOOSECOLOR
Dim Rc As Long
Dim CustC() As Byte
With CC
.hwndOwner = MehWnd
.hInstance = App.hInstance
.lpCustColors = StrConv(CustC, vbUnicode)
.rgbResult = GetColour
.flags = flags
.lStructSize = Len(CC)
End With
Rc = CHOOSECOLOR(CC)
If Rc Then
GetColour = CC.rgbResult
ShowColor = -1
Else
ShowColor = 0
End If
End Function
------------------------------------------------------
用GetDC得到DC
BitBit到PictureBox
用ReleaseDC释放DC
执行SavePicture语句保存BMP