如何像flashget一样,双击悬浮窗体时,如果(1)主窗体可视iswondowvisible时,若主窗体被其他窗体遮盖着,就移到最前并成激活状态setforegroundwindow;若是主窗体除了悬浮窗体以外,并没有被其他窗体遮挡,就最小化并showwindow(sw_hide)
(2)主窗体不可视!iswondowvisible时,就restore并showwindow(sw_show)关键问题当然是第一个!
我想是否要考虑z_order???希望各位大侠给点意见,谢谢!

解决方案 »

  1.   

    当你SetForeGroundWindow并且
    给自己的程序焦点的时候
    z-order就已经改变了
    不用再作其他处理
      

  2.   

    你的解决方法很完整了,焦点在悬浮窗上时,SetForeGroundWindow,ShowWindow 都没有问题。Z-order在SetForeGroundWindow就改变了。
      

  3.   

    判断“主窗体除了悬浮窗体以外,并没有被其他窗体遮挡”1、可以通过WindowFromPoint判断,取得主窗口的四角,分别调用WindowFromPoint,比较取得的句柄和主窗口的句柄,如果都相同就表示主窗口没有被覆盖。2、可以通过GetClipBox判断。这个可能更近似FlashGet的方法,因为实验表明,FlashGet只要窗口没有被完全遮挡,就最小化窗口。
    HDC hdc = ::GetWindowDC(hWnd);
    ::GetClipBox(hdc, &rect);
    ::ReleaseDC(hWnd, hdc);
    如果rect是{0,0,0,0} 就表示窗口完全被遮挡。
      

  4.   

    双击时ShowWindow(SW_HIDE);
    这样悬浮窗体就会把焦点释放给他的下一层窗体,这时判断foregroundwindow是不是主窗体,是就最小化,要不就使之最前。判断完以后再ShowWindow(SW_SHOW);当然也有它的缺点!
      

  5.   

    http://www.chinaithero.com/down2/controls/l_drap_window.zip
      

  6.   

    悬浮窗体的父窗体是桌面,里面有一个成员是你的主窗体的HWND,double click的时候,根据HWND还不能够判断吗?