VB程序员博客
12 25th, 2009
这里有一段代码:
Dim DataFile As Integer, Chunks As Integer
Dim F1 As Long, F11 As Long, F2 As Long, F22 As Long
Dim F3 As Long, F33 As Long, F4 As Long, F44 As Long
Dim Fragment As Integer, Chunk() As Byte, I As Integer
Const ChunkSize As Integer = 16384 '(16K Chunk Size)
Const LongValue As Long = 2147483647
Function Auto_Load(CommDial As CommonDialog, FX As Long, FXX As Long, Column As Field, ImageBox As Image)
'—–> Determine Size of Picture 1
FX = Column.ActualSize
If FX > 0 Then
'—–> Set DataFile to Long Binary
DataFile = 1
Open "pictemp" For Binary Access Write As DataFile
'—–> Grab Picture In Pieces to Avoid Buffer Overflow
Chunks = FX ChunkSize
Fragment = FX Mod ChunkSize
ReDim Chunk(Fragment)
Chunk() = Column.GetChunk(0, Fragment)
FXX = Fragment
Put DataFile, , Chunk()
For I = 1 To Chunks
ReDim Buffer(ChunkSize)
Chunk() = Column.GetChunk(FXX, ChunkSize)
Put DataFile, , Chunk()
FXX = FXX + ChunkSize
Next I
'—–> Display Picture
Close DataFile
CommDial.FileName = "pictemp"
ImageBox.Picture = LoadPicture(CommDial.FileName)
End If
End Function
对于代码理解存在很多不解,谁能讲下代码里图像处理的大概过程和机制?谢谢!
哪句代码不理解?
没有看到图像处理的代码。
就是加载内存中的图片吧。
恩 就是加载图片 我是新手 也没处理过图片格式的东西
Chunk() = Column.GetChunk(0, Fragment)这一句是什么意思,这两个参数是什么含义,我查MSDN只看到一个参数。
有人能讲下吗
我自己解决了
Column.GetChunk(0, Fragment)里去掉0,保留一个参数就可以了。这估计是以前的一些写法。
12 25th, 2009
这里有一段代码:
Dim DataFile As Integer, Chunks As Integer
Dim F1 As Long, F11 As Long, F2 As Long, F22 As Long
Dim F3 As Long, F33 As Long, F4 As Long, F44 As Long
Dim Fragment As Integer, Chunk() As Byte, I As Integer
Const ChunkSize As Integer = 16384 '(16K Chunk Size)
Const LongValue As Long = 2147483647
Function Auto_Load(CommDial As CommonDialog, FX As Long, FXX As Long, Column As Field, ImageBox As Image)
'—–> Determine Size of Picture 1
FX = Column.ActualSize
If FX > 0 Then
'—–> Set DataFile to Long Binary
DataFile = 1
Open "pictemp" For Binary Access Write As DataFile
'—–> Grab Picture In Pieces to Avoid Buffer Overflow
Chunks = FX ChunkSize
Fragment = FX Mod ChunkSize
ReDim Chunk(Fragment)
Chunk() = Column.GetChunk(0, Fragment)
FXX = Fragment
Put DataFile, , Chunk()
For I = 1 To Chunks
ReDim Buffer(ChunkSize)
Chunk() = Column.GetChunk(FXX, ChunkSize)
Put DataFile, , Chunk()
FXX = FXX + ChunkSize
Next I
'—–> Display Picture
Close DataFile
CommDial.FileName = "pictemp"
ImageBox.Picture = LoadPicture(CommDial.FileName)
End If
End Function
对于代码理解存在很多不解,谁能讲下代码里图像处理的大概过程和机制?谢谢!
哪句代码不理解?
没有看到图像处理的代码。
就是加载内存中的图片吧。
恩 就是加载图片 我是新手 也没处理过图片格式的东西
Chunk() = Column.GetChunk(0, Fragment)这一句是什么意思,这两个参数是什么含义,我查MSDN只看到一个参数。
有人能讲下吗
我自己解决了
Column.GetChunk(0, Fragment)里去掉0,保留一个参数就可以了。这估计是以前的一些写法。
08 19th, 2008
以下是窗工程的全部代码,只有一个窗体,在窗体加一个列表框就行.
Option Explicit
Private Declare Function SendMessage Lib "user32 " Alias "SendMessageA " (ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) As Long
Private Const LB_SETHORIZONTALEXTENT = &H194
Private Sub setListWidth()
'如果列表框不够宽,则增加水平滚动条
Dim i As Integer
Dim List_MaxL As Integer
' 获得选项内容的最大长度
For i = 0 To demo_lbox.ListCount - 1
'让list_maxl中保存最长的一条字串
If Len(demo_lbox.List(i)) > List_MaxL Then
List_MaxL = Len(demo_lbox.List(i)) + 2
End If
Next i
' 判断是否内容显示不完全,如果是则添加水平滚动条
If Me.TextWidth( "AA ") * List_MaxL > demo_lbox.Width Then
SendMessage demo_lbox.hwnd, LB_SETHORIZONTALEXTENT, Me.TextWidth( "AA ") * List_MaxL, ByVal 0&
End If
End Sub
Private Sub Form_Load()
Dim i As Integer
' 为ListBox控件添加选项
For i = 0 To 100
demo_lbox.AddItem ( "这是列表框中的一项,最后数字表示这是第几行数据:(第 " + CStr(i)) & "行) "
'demo_lbox.AddItem ( "(第 " + CStr(i)) & "行) "
Next i
' 设置窗体坐标尺度模式和字体大小
Me.ScaleMode = vbPixels
Me.FontSize = demo_lbox.FontSize
'设置列表框的水平滚动条
Call setListWidth
End Sub
—————————–
我要问的是:
这个api函数如何理解,当然它的功能就是为列表框加一个水平滚动条.
可是有几个地方我不明白:
第一:下面定义常数的作用是什么?
Private Const LB_SETHORIZONTALEXTENT = &H194
第二:以下这一句,几个参数不明白
SendMessage demo_lbox.hwnd, LB_SETHORIZONTALEXTENT, Me.TextWidth( "AA ") * List_MaxL, ByVal 0&
&H194是消息的标识符,我最不明白的就是这个常数对应的是什么意思呀,还有,最后一个参数是什么意思?
LB_SETHORIZONTALEXTENT是列表框能接受的消息之一,其值和作用微软都规定好了。其实重点在于&H194,之所以定义常量,是我为了提高程序的可读性
SendMessage demo_lbox.hwnd, LB_SETHORIZONTALEXTENT, Me.TextWidth( "AA ") * List_MaxL, ByVal 0&
的意思是向demo_lbox发送一个LB_SETHORIZONTALEXTENT消息,其附带的第一个参数是滚动条的长度(准确来说是文本长度,滚动条必须适合这个最长文本,方便滚动),第二个参数对这个功能无效,使用0即可。
Private Const LB_SETHORIZONTALEXTENT = &H194
&H194 是 API 的约定,唯一标识一个消息,该消息通过 wParam 指明列表框需要显示内容的宽度(Pixel 单位),消息处理过程会根据当前列表框的宽度决定是否需要显示水平滚动条。
SendMessage demo_lbox.hwnd, LB_SETHORIZONTALEXTENT, Me.TextWidth( "AA ") * List_MaxL, ByVal 0&
最后一个参数表示参数 lParam 为 C 类型的 NULL。
up
up