我要让一个区域双击后全屏,,再双击便恢复以前的位置..下面是几句话.
第一次双击:
RECT m_rcInit;
GetDlgItem(IDC_PLAYOCXCTRL1)->GetWindowRect(&m_rcInit);
GetDlgItem(IDC_PLAYOCXCTRL1)->MoveWindow(0,0,1024,768,TRUE);
ModifyStyle(WS_CAPTION,0,SWP_FRAMECHANGED);  //隐藏标题栏
这个时候全屏了..下面是再双击的时候
RECT  m_rcTemp;
m_rcTemp.top=m_rcInit.top;
m_rcTemp.bottom=m_rcInit.bottom;
m_rcTemp.left=m_rcInit.left;
m_rcTemp.right=m_rcInit.right;
ScreenToClient(&m_rcTemp);

GetDlgItem(IDC_PLAYOCXCTRL1)->MoveWindow(&m_rcTemp);
GetDlgItem(IDC_PLAYOCXCTRL1)->Invalidate(TRUE);
ModifyStyle(0,WS_CAPTION,SWP_FRAMECHANGED);  //显示标题栏这样运行以后,每次全屏,然后缩小以后,位置都会有一点偏移..多点几次就偏移到不知哪儿去了..
如果不要隐藏标题栏和显示标题栏那2句的话就是正常的. 但是全屏时应该让标题栏隐藏,恢复后
再显示出来才对...这个怎么回事呢?

解决方案 »

  1.   

    ScreenToClient(&m_rcTemp);这个去掉
      

  2.   

    IDC_PLAYOCXCTRL1是什么?控件的id?
    这儿有现成的全屏代码:
    http://dev.firnow.com/course/3_program/vc/vc_js/20071226/93510.html
    m_bFullScreen=!m_bFullScreen;
    //全屏显示
    LONG style = ::GetWindowLong(this->m_hWnd,GWL_STYLE);
    if(m_bFullScreen)  
    {
    style &= ~(WS_DLGFRAME | WS_THICKFRAME);
    SetWindowLong(this->m_hWnd,GWL_STYLE, style);
    this->ShowWindow(SW_SHOWMAXIMIZED);
    CRect rect;
    this->GetWindowRect(&rect);
    ::SetWindowPos(this->m_hWnd,HWND_NOTOPMOST,rect.left-1, rect.top-1, rect.right-rect.left + 3, rect.bottom-rect.top + 3, SWP_FRAMECHANGED); }
    else   
    {
    style |= WS_DLGFRAME | WS_THICKFRAME;
    SetWindowLong(this->m_hWnd, GWL_STYLE, style);
    this->ShowWindow(SW_NORMAL); }
      

  3.   

    你可以考虑使用easysize,或者界面版主xianglitian 博客中的方法void CXXXDlg::OnLButtonDblClk(UINT nFlags, CPoint point) 
    {
    // TODO: Add your message handler code here and/or call default

    CDialog::OnLButtonDblClk(nFlags, point); static BOOL bMaximum = FALSE; bMaximum = !bMaximum; if(bMaximum)
    {
    ModifyStyle(WS_CAPTION, 0, SWP_FRAMECHANGED);
    ShowWindow(SW_SHOWMAXIMIZED);
    }
    else
    {
    ModifyStyle(0, WS_CAPTION, SWP_FRAMECHANGED);
    ShowWindow(SW_RESTORE);
    }
    }