我想做到以下功能:
1. 按住鼠标左键拖动鼠标,在屏幕会随着鼠标的移动显示一个方框
2.做一个控件,在别的程序中调用这个控件.要求点击这个控件上的按钮
会弹出对话框
  请问该如何做?

解决方案 »

  1.   

    大家知道,在VB中可以通过设置Form的属性,制作无系统标题栏的窗口。可是,由于失去了系统标题栏,如何使用鼠标拖动窗口便成了一个棘手的问题。其实,借助API函数ReleaseCapture和SendMessage,这个问题便可迎刃而解了。
    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 Declare Function ReleaseCapture Lib "user32" () As Long
    Private Const WM_SYSCOMMAND = &H112
    Private Const HTCAPTION = 2
    Private Const SC_MOVE = &HF010&Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
        If Button = 1 Then
            ReleaseCapture
            SendMessage Me.hwnd, WM_SYSCOMMAND, SC_MOVE + HTCAPTION, 0
        End If
    End Sub
      

  2.   

    处理用户控件上按钮的Click事件,写上相应的代码,和你在普通窗体的中写法没有区别
      

  3.   

    2.
    RaiseEvent 语句
          引发在一个类、窗体、或者文档中的模块级中声明的一个事件。语法RaiseEvent eventname [(argumentlist)]必需的 eventname 是在模块 中声明的,并且符合 Basic 变量命名约定的一个事件的名称。RaiseEvent 语句的语法有如下部分:部分 描述 
    Eventname 必需的。所引发的事件的名称。 
    Argumentlist 可选的。用逗号分隔的变量、数组,或者表达式的列表。argumentlist 必须用圆括号括起来。如果没有参数,则圆括号必须被忽略。 
    说明如果在事件被引发的模块内该事件没有被声明,就会发生一个错误。下面这个程序片段说明了一个事件的声明以及一个引发该事件的过程。' 在类模块的模块级声明一个事件
    Event LogonCompleted (UserName as String)Sub
       ' 引发该事件。
       RaiseEvent LogonCompleted ("AntoineJan")
    End Sub如果在 RaiseEvent 中该事件没有参数,包括空的圆括号,则对该事件的调用就会导致一个错误。不能使用 RaiseEvent 来引发在模块中没有明确定义的事件。例如,如果一个窗体有一个 Click 事件,则不能使用 RaiseEvent 来引发该窗体的 Click 事件。如果在窗体模块 中声明了一个 Click 事件,则它将覆盖窗体自己的 Click 事件。仍然可以使用调用该事件的正常语法来调用该窗体的 Click 事件,但是不能使用 RaiseEvent 语句。事件的引发是根据连接建立的顺序来进行的。因为事件可以有 ByRef 参数,所以后来连接的进程可能接收已经被一个更早的事件处理程序更改的参数。