本帖最后由 soraking2000 于 2009-07-15 21:41:34 编辑

解决方案 »

  1.   

    先存下picture1的句柄,用函数
    SetWindowLong(句柄,GWL_EXSTYLE,WS_EX_TOOLWINDOW)   

    ShowWindow(句柄,   SW_HIDE   );   
    哪个有效请自行尝试
      

  2.   

    试了一晚上,知道原因了
    setparent的父句柄不能为零,这样不是真正的将其父窗口设为桌面,而对其隐藏任务栏图标的操作也无效了。试了窗口是有效的。想要隐藏掉,必须先取得桌面的正确句柄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
    Private Const GWL_EXSTYLE = (-&H14)
    Private Const WS_EX_APPWINDOW As Long = &H40000
    Private Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
    Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
    Private Const SW_HIDE = 0
    Private Const SW_SHOW = 5
    Private Declare Function GetDesktopWindow Lib "user32" () As Long
    Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPrivate Sub ShowHideTaskBarButton(ByVal hWnd As Long, ByVal fShow As Boolean)
    Dim lExStyle As Long
    lExStyle = GetWindowLong(hWnd, GWL_EXSTYLE)
    lExStyle = IIf(fShow, lExStyle Or WS_EX_APPWINDOW, lExStyle And Not WS_EX_APPWINDOW)
    ShowWindow hWnd, SW_HIDE
    lExStyle = SetWindowLong(hWnd, GWL_EXSTYLE, lExStyle)
    ShowWindow hWnd, SW_SHOW
    End SubPrivate Sub cmdHideInTaskBar_Click()
    Dim i As Long, j As Longj = FindWindowEx(0&, 0&, "Progman", vbNullString)
    j = FindWindowEx(j, 0&, "SHELLDLL_DefView", vbNullString)
    j = FindWindowEx(j, 0&, "SysListView32", vbNullString)
    i = Picture1.hWnd
    SetParent Picture1.hWnd, j
    ShowHideTaskBarButton i, True
    End Sub
      

  3.   

    但是这样做的结果是,单击后,焦点移到了picture1上,并且picture1被档住了。实现不了图上的效果。
      

  4.   

    可能MS做的Combobox等控件的原理有可能是这样,其实当在Combobox箭头上单击时,已经将焦点从Combobox的父窗口转移到Combobox上,并使其zoder位于最顶层,但并不会让combobox的父窗口的标题栏重绘成灰色,并捕捉Mouse Capture,当MoouseDown时,再将焦点移回并且原来.
      

  5.   

    用setwindowpos把picture设为总在最前
      

  6.   

    不好用.首先,setparent后,是将picture1放到一个窗口中去的,所以想将picture1置于顶层,应该得到picture1.parent.hwnd,将此句柄置于顶层,而不是picture1.hwnd.其次,picture1.parent已经置为桌面窗口,所以setwindowpos picture1.parent.hwnd并不起作用. 请测试.
      

  7.   

    经你这么一说,我倒想到另一个方法,新建一个Form2,把标题栏隐去,总在最前,鼠标拖动即可Private Const WM_NCLBUTTONDOWN = &HA1
    Private Const HTCAPTION = 2
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal Hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    Private Declare Function ReleaseCapture Lib "user32" () 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 Long
    Private Const HWND_TOPMOST& = -1
    Private Const SWP_NOSIZE& = &H1
    Private Const SWP_NOMOVE& = &H2Private Sub Form_Load()
    SetWindowPos Me.Hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE
    End SubPrivate Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = 1 Then
        Call ReleaseCapture
        Call PostMessage(Hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0)
    End If
    End Sub
      

  8.   

    关于此主题(完全自绘超出父窗口的窗口)的贴子: 
    http://topic.csdn.net/u/20090716/19/772419b0-b147-45d7-a81b-6085de55926c.html 
    http://topic.csdn.net/u/20090715/21/da4a07db-15ea-4fef-a110-0dc9be9f3e6a.html 
    http://topic.csdn.net/u/20090714/09/5f9e994f-5f79-4aaa-b7b9-5b6543632341.html 
    http://topic.csdn.net/u/20090714/09/aff8197b-ae7a-40ad-bbd8-38f05ffd6c83.html 
    经过一星期的奋战终于解决。用这种原理开发的ShayooMenu.ocx,vista日历控件,combobox控件,listbox控件和其他ocx界面及测试程序如下: 
    测试程序for VB 6.0 点击下载
    欢迎交流  [email protected],欢迎开发非Microsoft自带控件.从底层和原理关注软件开发.
      

  9.   

    近期将推出全套控件.包括:
    1.vistaShayooForm
    2.vistaShayooListBox
    3.vistaShayooMenu
    4.vistaShayooTextBox
    5.vistaShayooStatusBar
    6.vistaShayooTooltip
    7.vistaShayooCalendar
    8.vistaShayooScrollBar
    9.vistaShayooCheckBox
    10.vistaShayooRadio
    11.vistaShayooGrid
    12.vistaShayooButton
    13.vistaShayooMdiTabs
    14.vistaShayooFrame
    15.vistaShayooToolBar
    16.vistaShayooRibbon
    17.vistaShayooListView
    18.vistaShayooMsgbox
    19.vistaShayooLed
    20.vistaShayooDock