BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
cs.style =WS_POPUP;                    //使主窗口不可见
cs.dwExStyle  and =WS_EX_TOOLWINDOW;       //不显示任务按钮
return CFrameWnd::PreCreateWindow(cs);
}

解决方案 »

  1.   

    BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
    {
    cs.style = WS_POPUP;                    //使主窗口不可见
    cs.dwExStyle   and = WS_EX_TOOLWINDOW;      //不显示任务按钮
    return CFrameWnd::PreCreateWindow(cs);
    }
      

  2.   

    我不知道为什么我写的一竖杠(或)会变成 'and'(与),看来要问问zdg了
      

  3.   

    FORM1.ShowInTaskbar=FALSE(难道我看错了,不是VB的问题?)
      

  4.   

    是VB吗?
    Option Explicit
    Dim hWnd1 As LongPrivate Declare Function FindWindow Lib "user32" Alias "FindWindowA" _
    (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Declare Function 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) As LongConst SWP_HIDEWINDOW = &H80
    Const SWP_SHOWWINDOW = &H40Private Sub Form_Load()
    hWnd1 = FindWindow("Shell_traywnd", "")
    '隐藏的例子:
    Call SetWindowPos(hWnd1, 0, 0, 0, 0, 0, SWP_HIDEWINDOW)
    End SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    '显示的例子:
    Call SetWindowPos(hWnd1, 0, 0, 0, 0, 0, SWP_SHOWWINDOW)
    End Sub
      

  5.   

    说清楚点,要不FORM的初始属性就是隐藏,顶多调调ShowInTaskbar,那不在白问?
      

  6.   

    如果不出现在任务栏上,Form的ShowInTaskbar=false就可以了。
    如果要不出现在任务列表上,ctrl-alt-del中
    不出现,那就需要将程序注册成系统程序。
      

  7.   

    可惜来晚了,同意ShowInTaskbar=false
      

  8.   

    对不起,各位朋友,多谢你们如此热心。我没有说得清楚,大家没弄得明白.
    我是指在VB中如何用API将窗体显示在任务条上的按钮动态显示或隐藏,就象金山词霸最小化时一样(不用说明如何显示在系统图标栏内,这是另一个问题)。
      

  9.   

    RING:看你是明白我的原意的,可不可以用VB描述一下,我不懂VC.
      

  10.   

    试试这个,我没用过!
    声明:
    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 Const GWL_STYLE = (-16) 
    Private Const WS_CAPTION = &HC00000
    Private Const WS_MAXIMIZEBOX = &H10000 
    Private Const WS_MINIMIZEBOX = &H20000 
    Private Const WS_SYSMENU = &H80000 Private Declare Function 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) As Long 
    Private Enum ESetWindowPosStyles 
        SWP_SHOWWINDOW = &H40 
        SWP_HIDEWINDOW = &H80 
        SWP_FRAMECHANGED = &H20 ' The frame changed: send WM_NCCALCSIZE 
        SWP_NOACTIVATE = &H10 
        SWP_NOCOPYBITS = &H100 
        SWP_NOMOVE = &H2 
        SWP_NOOWNERZORDER = &H200 ' Don't do owner Z ordering 
        SWP_NOREDRAW = &H8 
        SWP_NOREPOSITION = SWP_NOOWNERZORDER 
        SWP_NOSIZE = &H1 
        SWP_NOZORDER = &H4 
        SWP_DRAWFRAME = SWP_FRAMECHANGED 
        HWND_NOTOPMOST = -2 
    End Enum Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long 
    Private Type RECT 
        Left As Long 
        Top As Long 
        Right As Long 
        Bottom As Long 
    End Type Private Function ShowTitleBar(ByVal bState As Boolean) 
    Dim lStyle As Long 
    Dim tR As RECT     GetWindowRect Me.hwnd, tR 
        lStyle = GetWindowLong(Me.hwnd, GWL_STYLE) 
        If (bState) Then 
        Me.Caption = Me.Tag 
        If Me.ControlBox Then 
            lStyle = lStyle Or WS_SYSMENU 
        End If 
        If Me.MaxButton Then 
            lStyle = lStyle Or WS_MAXIMIZEBOX 
        End If 
        If Me.MinButton Then 
            lStyle = lStyle Or WS_MINIMIZEBOX 
        End If 
        If Me.Caption <> "" Then 
            lStyle = lStyle Or WS_CAPTION 
        End If 
        Else 
        Me.Tag = Me.Caption 
        Me.Caption = "" 
        lStyle = lStyle And Not WS_SYSMENU 
        lStyle = lStyle And Not WS_MAXIMIZEBOX 
        lStyle = lStyle And Not WS_MINIMIZEBOX 
        lStyle = lStyle And Not WS_CAPTION 
    End If 
    SetWindowLong Me.hwnd, GWL_STYLE, lStyle 
    ' 保证窗口具有相同的大小
    ' 注意这时看见区域已经不同!
    SetWindowPos Me.hwnd, 0, tR.Left, tR.Top, tR.Right - tR.Left, tR.Bottom - tR.Top, SWP_NOREPOSITION Or SWP_NOZORDER Or SWP_FRAMECHANGED 
    Me.Refresh 
    ' 看见区域已经不同后应该发生 RESIZE 事件
    Form_Resize 
    End Function 
    使用:
    '显示: ShowTitleBar True
    '隐藏:  ShowTitleBar False
      

  11.   

    peacock :
    你的例子是动态显示/隐藏窗体的标题栏。难道这个问题这么难?还是各位不愿....,也许是分数给得少了。
      

  12.   

    Town,Sorry!我弄错了,给你,下面这个一定行!'怎样将你的程序从 WIN  的系统任务列表中隐藏(即 CTRL+ALT+DEL 出来的框)
    Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
    Private Declare Function GetCurrentProcess Lib "kernel32" () As Long
    Private Declare Function RegisterServiceProcess Lib "kernel32" (ByVal dwProcessID As Long, ByVal dwType As Long) As LongPrivate Const RSP_SIMPLE_SERVICE = 1
    Private Const RSP_UNREGISTER_SERVICE = 0Rem 下面代码为隐藏
    Private Sub MakeMeService()
        Dim pid As Long
        Dim reserv As Long
        pid = GetCurrentProcessId()
        regserv = RegisterServiceProcess(pid, RSP_SIMPLE_SERVICE)
    End SubRem 恢复隐藏
    Private Sub UnMakeMeService()
        Dim pid As Long
        Dim reserv As Long
        pid = GetCurrentProcessId()
        regserv = RegisterServiceProcess(pid, RSP_UNREGISTER_SERVICE)
    End SubPrivate Sub Command1_Click()
        Call MakeMeService
    End SubPrivate Sub Command2_Click()
        Call UnMakeMeService
    End Sub
      

  13.   

    我非常感谢各位的热心,但我想我应该把问题重新仔细地描述一下:
    是如何将窗体显示在任务栏上的切换按钮动态显示/隐藏,是任务栏,下边的可以设成自动隐藏的,上面有Windows开始按钮的条条,而不是C+A+D三键出来的框框。麻烦大家在万忙之即看仔细点。谢谢 peacock 
    谢谢大家!
      

  14.   

    你越说我越糊涂,设置Form的ShowInTaskbar属性不行吗?
      

  15.   

    对呀,我以前不就说过的"说清楚点,要不FORM的初始属性就是隐藏,顶多调调ShowInTaskbar,那不在白问?"我现在觉得你在折腾观众了。要不就是你的语言描绘能力......
    是不是即时的隐藏,也就是点击隐藏按钮,任务栏即时隐藏呀?ShowInTaskbar运行时可是只读的,得用API哦。你的30分可有点少了。用空帮你查查用哪个函数吧。
    不过,我作过类似的东西。我把程序的最小化消息处理程序改成了执行Form.Hide了。这样点最小化就不会显示在任务栏。恢复时,只需执行Form.show就行了。
      

  16.   

    Call SetWindowPos(lngHand, 0, 0, 0, 0, 0, SWP_HIDEWINDOW)
    'API Declares
    Declare Function 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) As Long'----------------------------------------------------------------------------------------------------------
    Public Const WM_ACTIVATE = &H6
    Public Const SWP_NOMOVE = &H2
    Public Const SWP_NOSIZE = &H1
    Public Const HWND_TOPMOST = -1
    Public Const GW_CHILD = 5
    Public Const GW_HWNDNEXT = 2
    Public Const SWP_HIDEWINDOW = &H80
    Public Const SWP_SHOWWINDOW = &H40
      

  17.   

    ' 复制以下代码到一模块中
    Public Declare Function GetCurrentProcessId Lib "kernel32" () As Long
    Public Declare Function GetCurrentProcess Lib "kernel32" () As Long
    Public Declare Function RegisterServiceProcess _
    Lib "kernel32" (ByVal dwProcessID As Long, ByVal dwType As Long) As Long
    Public Const RSP_SIMPLE_SERVICE = 1
    Public Const RSP_UNREGISTER_SERVICE = 0' 下面代码为隐藏
    Public Sub MakeMeService()
       Dim pid As Long
       Dim reserv As Long
       pid = GetCurrentProcessId()
       regserv = RegisterServiceProcess(pid, RSP_SIMPLE_SERVICE)
    End Sub' 下面代码为恢复隐藏
    Public Sub UnMakeMeService()
       Dim pid As Long
       Dim reserv As Long
       pid = GetCurrentProcessId()
       regserv = RegisterServiceProcess(pid, _
       RSP_UNREGISTER_SERVICE)
    End Sub
      

  18.   

    ************看这里***************长篇大论没有用
    最简单的办法就是将窗体的 ShowInTaskBar属性设为false************看这里***************
      

  19.   

    MDI窗口是无法设置ShowInTaskBar属性的
    eye:
    你的这段代码好象也没什么用处?
      

  20.   

    always的方法很简单啊,请试一试...