在precreateWindow()里设置窗口style

解决方案 »

  1.   

    CMainFrame *pFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd);
    pFrame->ModifyStyle(WS_CAPTION,0);
    pFrame->ModifyStyle(WS_THICKFRAME,0);
    pFrame->SetMenu(NULL);
    pFrame->ShowWindow(SW_MAXIMIZE);
      

  2.   

    你是不是想做成像VC全屏的那种效果加入成员变量记录下一些全屏相关的信息
    CRect m_FullScreenRect; 
    WINDOWPLACEMENT m_OldWndPlacement;
    BOOL m_bFullScreen;1.在CMainFrame中加入一个OnFullScreen函数
    void CMainFrame::OnViewFullscreen() 
    {
    if(!m_bFullScreen)
    {
    //保存原窗口的位置,
    //包括和其他窗口的前后位置关系
    GetWindowPlacement(&m_OldWndPlacement);

    //保存原窗口的矩形范围
    CRect WindowRect;
    GetWindowRect(&WindowRect);
    CRect ClientRect;
    //获得除去所有控制条之外的客户区位置
    //并把它转化为Screen坐标
    RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &ClientRect);
    ClientToScreen(&ClientRect); // 获取屏幕的分辨率
    int nFullWidth=GetSystemMetrics(SM_CXSCREEN);
    int nFullHeight=GetSystemMetrics(SM_CYSCREEN);

    //将除控制条外的客户区全屏显示到从(0,0)到(nFullWidth, nFullHeight)区
    //域, 将(0,0)和(nFullWidth, nFullHeight)两个点外扩充原窗口和除控制条之外的 客
    //户区位置间的差值, 就得到全屏显示的窗口位置
    //实际上,现在窗口的位置是在左边定点在负数位置,
    //而右边的点在屏幕以下,这样,正好View占有了整个屏幕
    m_FullScreenRect.left=WindowRect.left-ClientRect.left;
    m_FullScreenRect.top=WindowRect.top-ClientRect.top;
    m_FullScreenRect.right=WindowRect.right+nFullWidth-ClientRect.right;
    m_FullScreenRect.bottom=WindowRect.bottom+nFullHeight-ClientRect.bottom;
    m_bFullScreen=TRUE;//设置全屏显示标志为 TRUE
    //进入全屏显示状态
    WINDOWPLACEMENT wndpl;
    wndpl.length=sizeof(WINDOWPLACEMENT);
    wndpl.flags=0;
    wndpl.showCmd=SW_SHOWNORMAL;
    wndpl.rcNormalPosition=m_FullScreenRect;
    SetWindowPlacement(&wndpl);
    m_bFullScreen=true;
    }
    }
    2。加入一个结束全屏的函数
    void CMainFrame::EndFullScreen()
    {
    if(m_bFullScreen)
    {
    BOOL res=ShowWindow(SW_RESTORE);
    SetWindowPlacement(&m_OldWndPlacement);
    m_bFullScreen=false;
    }
    }
    3。重载CMainFrame中的OnGetMinMaxInfo函数
    void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 
    {
    if(m_bFullScreen)
    {
    lpMMI->ptMaxSize.x=m_FullScreenRect.Width();
    lpMMI->ptMaxSize.y=m_FullScreenRect.Height();
    lpMMI->ptMaxPosition.x=m_FullScreenRect.Width();
    lpMMI->ptMaxPosition.y=m_FullScreenRect.Height();
    //最大的Track尺寸也要改变
    lpMMI->ptMaxTrackSize.x=m_FullScreenRect.Width();
    lpMMI->ptMaxTrackSize.y=m_FullScreenRect.Height();
    }
    CFrameWnd::OnGetMinMaxInfo(lpMMI);
    }
      

  3.   

    to:anywn_cwh(我有个问题)
    这样生成的窗口有一个边框(因为用的是CFrameWnd),怎样让它没有边框呢?to:Kummer(Kummer) 
    你的回答很好,但我不要这么多功能。我只要一个全屏幕窗口(没有任何牵挂的窗口)
      

  4.   

    把CMainFrame的基类改成CWnd,并在构造函数种子基础侧窗口类:
    CMainFrame::CMainFrame()
    {
    CString winStr = AfxRegisterWndClass( CS_DBLCLKS,
                                AfxGetApp()->LoadStandardCursor(IDC_ARROW),
                               (HBRUSH)GetStockObject(BLACK_BRUSH),
                                NULL );
    CRect rect( 0, 0, GetSystemMetrics( SM_CXSCREEN ),
                      GetSystemMetrics( SM_CYSRREEN ) );
    ::CreateEx( 0, winStr, "Title", WS_POPUP, rect, NULL, NULL );
    }
    OK,一切搞定                          
      

  5.   

    to morningsing(奈何) :
    非常好!为什么我把最后一句改成
    Create(winStr,"Title",WS_POPUP,rect,NULL,NULL);
    就出错呢?
      

  6.   

    还有rect的大小没有包括任务栏
      

  7.   

    搞这么麻烦干吗?看下面的:
    全屏:
    void CMainFrame::OnFullScreen(int nWndID)
    {
    GetWindowRect(&m_WndRect);
    m_lWndStyle = GetWindowLong(GetSafeHwnd(), GWL_STYLE);
    LONG tmpStyle = m_lWndStyle & ~WS_OVERLAPPEDWINDOW;
    SetWindowLong(GetSafeHwnd(), GWL_STYLE, tmpStyle);
    int cx = GetSystemMetrics(SM_CXSCREEN);
    int cy = GetSystemMetrics(SM_CYSCREEN);
    SetWindowPos(&wndTopMost, -1, -1, cx + 1, cy + 1, SWP_FRAMECHANGED);
    }
    恢复:
    void CMainFrame::OnRestoreWnd()
    {
    SetWindowLong(GetSafeHwnd(), GWL_STYLE, m_lWndStyle);
    SetWindowPos(&wndNoTopMost,
    m_WndRect.left, m_WndRect.top, 
    m_WndRect.right - m_WndRect.left,
    m_WndRect.bottom - m_WndRect.top, 
    SWP_FRAMECHANGED);
    }ok?
      

  8.   

    在CView 的如下函数中写上,就可以一启动就最大化,如果用GetSystemMetrics,就会覆盖下面的状态条
    void CView::OnInitialUpdate()
    {
    CRect rect;
    SystemParametersInfo(SPI_GETWORKAREA,0,&rect,0);
    //得到框架指针
    CMainFrame *pFrame=(CMainFrame*)GetParentFrame();
    //使得主窗口达到最大可用大小
    pFrame->MoveWindow(&rect);
    }
      

  9.   

    如果是SDK请用ShowWindow();
    如果是MFC请修改PreCreateWindow函数传入的CREATESTRUCT& cs的成员。
      

  10.   

    to Kummer(Kummer):
    你的方法真的很完美,所以请到
    http://www.csdn.net/expert/topic/421/421820.shtm
    领取20分