我用设置的CPoint值来控制子窗口的显示位置函数:(子窗口是child型的)
SetWindowPos的参数,可是不知道为什么,子窗口总是显示在相对于主窗口的位置,
主窗口最小化,子窗口也跟着隐藏了 
我想让子窗口显示在相对于桌面的位置。

解决方案 »

  1.   

    SetWindowPos之前ClientToScreen转换rect
      

  2.   

    //获取屏幕像素
    const int nScrceenX=::GetSystemMetrics(SM_CXFULLSCREEN) ; 
    const int nScrceenY=::GetSystemMetrics(SM_CYFULLSCREEN);  
    // set front 
    SetWindowPos(&wndTopMost,
    nScrceenX-m_rctClient.right,
    nScrceenY-m_rctClient.bottom-70,
    0,0,SWP_NOSIZE|SWP_NOMOVE);
      

  3.   

    我的实现代码时这样的:
    CRect ctRect;
    GetDlgWindowRect(ID,&ctRect);
    ClientToScreen(&ctRec);//有没有效果一样
    然后,自己设置了
    一个CPoint Point(200,200)值
    再SetWindowPos(NULL,Point.x-ctRect.left/2,……);
      

  4.   

    个人笔记记载:
    void ClientToScreen( LPPOINT lpPoint ) const;void ClientToScreen( LPRECT lpRect ) const;
    这是将程序里的坐标点,转换成屏幕上的坐标点,
      

  5.   

    这个怎么用,是这样吗?:
    SetWindowPos(GetDesktopWindow(),m_ptIcon.x-Rc.Width()/2,m_ptIcon.y-Rc.Height()-6,Rc.Width(),Rc.Height(),NULL);
    没效果啊,
      

  6.   

    GetDlgWindowRect
    在进行一些处理
      

  7.   

    1. 你获取父窗口在桌面上的位置WF:GetWindowRect(父窗口句柄);
    2. 获取子窗口在桌面上的位置WS:GetWindowRect(子窗口句柄);
    3. 拿WF和WS计算出实际的子窗口位置:C = WS - WF;
    4. 移动子窗口:子窗口.MoveWindow( C );以上为逻辑代码,你可以翻译为你实际需要的语句
      

  8.   

    要在桌面上显示,好像窗口类型不可设置为child,
    改成Popup就可以了
    谢谢各位了,结贴了