以下为让一个无标题栏窗体(BorderStyle设置为0)在任务栏上显示图标的代码片段。我已将ShowInTaskbar设置为True了(允许窗体在任务栏上显示),最终结果运行程序后在任务栏可以显示出图标和程序名,这个图标也同样支持右键菜单,可这个右键菜单中的“关闭”命令显示是可用的,但是执行后却没有任何效果,其它菜单都很正常。不知道有哪位朋友遇到过这种情况,如果让这个“关闭”命令起作用?Private Declare Function GetWindowLong Lib "USER32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "USER32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Const GWL_STYLE = (-16)
Const WS_SYSMENU = &H80000
Private Declare Function GetCursorPos Lib "USER32" (lpPoint As pointapi) As Long
Private Type pointapi
  x As Long
  y As Long
End TypePrivate Sub Form_Load()
Dim lStyle As Long
lStyle = GetWindowLong(hwnd, GWL_STYLE) Or WS_SYSMENU
SetWindowLong hwnd, GWL_STYLE, lStyle
Me.Show
End Sub

解决方案 »

  1.   

    这个CSDN的连接速度实在慢的如牛,2M宽带跑不过56K小猫,难怪大家会也懒得回答,受不起那蜗牛速度!
      

  2.   

    我是在消息处理函数wndproc中捕获SC_CLOSE来实现关闭的!Dim ret As Long
    preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
    ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf wndproc)
    ......
    ......
    ......Public Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, _
                             ByVal wParam As Long, ByVal lParam As Long) As Long    If Msg = WM_SYSCOMMAND Then
            If wParam = SC_CLOSE Then                Unload Form1
                    Unload Form2
                
            End If
        End If
        
        wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)End Function不知道还有没有更好的办法