就如QQ的上线提示那样的提示窗体,窗体提示时不影响原来的操作。
用VB的窗体提示,原来的操作就会去焦点,影响了原来正常的作业,特别是在打字输入的时候。大侠们,教教我吧。

解决方案 »

  1.   

    在win2000以上的操作系统中window增加了一条附加窗口风格WS_EX_NOACTIVATE,他可以完全满足你的要求,可以作为一条捷径:作为测试,窗体上只有一个按钮:
    Option Explicit
    Private Const GWL_STYLE = (-16)
    Private Const HWND_TOPMOST = -1
    Private Const HWND_NOTOPMOST = -2
    Private Const SWP_NOSIZE = &H1
    Private Const SWP_NOMOVE = &H2
    Private Const SWP_NOACTIVATE = &H10
    Private Const SWP_SHOWWINDOW = &H40
    Private Const WS_EX_NOACTIVATE = &H8000000
    Private Const GWL_EXSTYLE = (-20)
    Private Declare Function SetWindowLong Lib "User32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare Function GetWindowLong Lib "User32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)Private Sub Form_Load()
        Dim style As Long
        style = GetWindowLong(Me.hWnd, GWL_EXSTYLE)
        style = style Or WS_EX_NOACTIVATE
        Call SetWindowLong(Me.hWnd, GWL_EXSTYLE, style)
        SetWindowPos Me.hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE
    End Sub这段代码的缺点是标题栏始终是灰突突的,很不好看,这可以通过自绘标题栏解决至于2000以下的只有让窗体具有WS_DISABLED风格,这样才不会转移输入焦点,当然,这样一来对事件的处理就麻烦了,看你api的功力