VB程序员博客

VB程序开发

这里有一段代码:
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,保留一个参数就可以了。这估计是以前的一些写法。


这里有一段代码:
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,保留一个参数就可以了。这估计是以前的一些写法。


以下是窗工程的全部代码,只有一个窗体,在窗体加一个列表框就行.  
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