热情软件屋

 

在msgblst中如何处理指向结构变量的地址


编号:QA000727
建立日期: 1999年3月30日 最后修改日期:1999年3月30日
所属类别:

zhyan:
    在vb中限制一个窗体有最小尺寸,您的回答(QA000410 "在VB中可以限制窗体的最小值吗")是在resize事件中限制,效果很难看。现在我下载了msgblst控件,想在wm_windowposchanging消息发生时来控制,可这个消息的lparam参数是指向windowpos结构的地址,我把一个定义为这个结构的变量传递给lparam,vb说类型错误,我把变量用括号括起来传递,还是出错。我想知道,如何给long型的lparam传递一个结构?或者说,我如何把一个结构的地址放到一个long型的变量里?谢谢

回答:

    现在又是我卖弄技巧的时候了。在窗体中加上如下声明:
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
     (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
    Const WM_WINDOWPOSCHANGING = &H46
    Private Type WINDOWPOS
     hwnd As Long
     hWndInsertAfter As Long
     x As Long
     y As Long
     cx As Long
     cy As Long
     flags As Long
    End Type
    Dim posWin As WINDOWPOS
    然后在窗体上加上一个MsgBlst控件,加入如下代码:
    Private Sub Form_Load()
     Msgblst321.hWndTarget = hwnd
     Msgblst321.MsgList(0) = WM_WINDOWPOSCHANGING
    End Sub
    
    Private Sub Msgblst321_Message(ByVal MsgVal As Long, ByVal wParam As Long, ByVal lParam As Long, lplRetVal As Long)
     CopyMemory posWin, lParam, Len(posWin)
     Debug.Print posWin.cy
     If posWin.cy < 200 Then
     posWin.cy = 200
     CopyMemory ByVal lParam, VarPtr(posWin), Len(posWin)
     End If
    End Sub
    这里我们限制窗体的高度为200个像素。我们先使用CopyMemory将WM_WINDOWPOSCHANGING的结构变量的内容拷贝到VB的变量中,修改后再使用CopyMemory拷贝回去。就这么简单,感受到了Msgblst的神奇魅力了吗?

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio