解决方案 »

  1.   

    本帖最后由 happyparrot 于 2013-11-19 08:26:27 编辑
      

  2.   

    哪应是win32的API来弄吧,你获得应是桌面窗体,不是应用程序的窗体
      

  3.   

    ::SetWindowPos(this->GetSafeHwnd(), CWnd::wndTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
      

  4.   

    InitDialog中写上AfxGetMainWnd()->SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);已测试有效,菇凉请大胆使用,大胆验证
      

  5.   

    如果担心其他程序也无耻的写了这样的语句,那你得定时SetWindowPos
      

  6.   

    Quote: 引用 4 楼 dingxz105090 的回复:

    InitDialog中写上AfxGetMainWnd()->SetWindowPos(&CWnd::wndTopMost,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);
      

  7.   

    这个函数的意思是设置窗口的位置, 包括z-order顺序位置.既然你可以调用, 那么别的程序当然也可以调用.所以你相保持最前, 那么必须得一直一直不停的调用此函数.或者更直接点的是hook掉这个API, 让别的程序没法设置. 当然, 还要考虑的创建时设置成topmost的情况.
      

  8.   

    那万一别的程序也hook掉这个API, 让别的程序没法设置,那怎么破
    窗口置顶就像是一块奶油面包,一大群苍蝇蟑螂蚊子正在靠近。。
      

  9.   

    SetWindowPos(CWnd::FromHandle(HWND_TOPMOST), 0, 0, 
    ::GetSystemMetrics(SM_CXSCREEN), ::GetSystemMetrics(SM_CYSCREEN), SWP_SHOWWINDOW);