我建立了一个多文档程序,主窗口覆盖了桌面作为程序背景,在程序起动后默认打开一个文档子窗口,我还想同时创建一个窗口,这个窗口主要用来显示公司标志,所以应该是浮动的并且永远在最上面,能够用鼠标拖动,没有边框。我的做法:
从CFrameWnd派生一个类CMyWnd, 在App的InitInstance()中创建CMyWnd对象并打开窗口,窗口属性设为POPUP和TOPMOST,在视图类的鼠标移动函数中移动CMyFrame窗口。能够实现以上功能,但不能消除边框(可能是FrameWnd的原因),窗口移动速度慢。
    于是我将CMyWnd的基类改为CWnd,窗口创建时不能使用POPUP,将鼠标响应放在CMyWnd中。这样窗口的TOPMOST属性好像没作用,窗口被别的子窗口覆盖了,并且不能响应鼠标事件。看看大家有什么好的解决方法?再有多文档中的子窗口设置TOPMOST属性是不是没作用?  还有,结贴给分时是不是还需要选中回复人前面的复选框?如果是这样的话请最近几天回答我的提问并结贴没得到分的朋友给我说一声,我重新给分!

解决方案 »

  1.   

    “应该是浮动的并且永远在最上面”这样的程序实现起来有什么用处?
    如果只是显示公司标志,可以在ABOUT对话框中或者是做个闪屏效果,在程序启动时显示版本信息
      

  2.   

    使窗口始终在最上方 
       BringWindowToTop(Handle),指定窗口的 最顶风格,用WS_EX_TOPMOST扩展窗口的风格:
    void ToggleTopMost(CWnd *pWnd)
    {
        ASSERT_VALID(pWnd)
        pWnd ->SetWindowPos(pWnd-> GetStyle( ) &WS_EX_TOPMOST)? &wndNoTopMOST: 
    &wndTopMost,0,0,0,0,SSP_NOSIZE|WSP_NOMOVE)
    }
      

  3.   

    看一看这篇讨论http://expert.csdn.net/Expert/topic/1335/1335027.xml?temp=.1386682------------
    加分的时候,不用在复选框打勾,只要给分就可以
      

  4.   

    上面提到的讨论看过了,好像也没有作用,我是这样写的创建一个自己的类
    在App的InitInstance中 
       m_pmywnd = new CMyWnd();
       m_pmywnd->Create(NULL,"MYWND",WS_OVERPLAPPEDWINDOW,CRect0,0,0,0),
                              pMainFrame,IDR_MYWND);
       m_pmywnd->modefiStyle(0,WS_EX_TOPMOST);
       m_pmywnd->SetWindowPos(&CWnd::wndTopMost,100,100,100,100,SWP_NOZORDER);
       m_pmywnd->UpdateWindow();这样生成的窗口得不到焦点,用SetCapture也不行,并且不能一直处于最上层,不知该怎样解决这个问题,
    pMainFrame就是多文档的主框架窗口,CMyWnd从CWnd派生
      

  5.   

    自己提的问题还是自己来解决好了,在窗口创建后使用主框架对象pMainFrame->MDIActivate(m_pMywND);一切就OK了,并且能够保持窗口的TOPMOST属性