天下无敌丑爸爸 发表于 2013-10-6 10:53:46

求助啊。怎么让窗口全屏化。不是最大化。

一直搞不动百度影音和其他播放器是怎样做到全屏的。不是最大化,是客户区充满屏幕。MoveWindow做不到啊。始终有一个边框。如果x 或者 y取负值时就不能够遮挡住下面的菜单栏了。而且处理WM_MAXMININFO也搞不定是不是我方法有问题。难道播放器是靠GetDC(0)获得桌面环境信息来绘图???附上我能做到的最大窗口。

牡丹花下死做鬼 发表于 2013-10-6 10:53:47

1:一种简单方法设置窗口全屏

在窗口初始化函数OnInitDialog()中调用一下代码:ModifyStyle(WS_CAPTION,0,0);//如果不想去掉标题栏,去掉该句。
        SendMessage(WM_SYSCOMMAND,SC_MAXIMIZE,0);
        ShowWindow(SW_SHOWMAXIMIZED);
2:通过设置窗口显示状态和窗口位置来使窗口全屏

在窗口类的头文件中加入如下代码:private:
        void OnFullScreen();//设置窗口全屏的方法
        void OnExitFullScreen();//退出窗口全屏的方法
        WINDOWPLACEMENT m_OldWndPlacement;//保存旧窗口状态的结构
        BOOL m_bFullScreen;//标识窗口是否全屏
        CRect m_FullScreenRect;//保存窗口位置的区域

在窗口的构造函数中初始化数据:
        //数据初始化
        m_bFullScreen = false;

//设置窗口全屏的方法
void CFullScreenDlg::OnFullScreen()
{
        //判断窗口是否是全屏,如果不是则设置为全屏
        if(!m_bFullScreen){
                //保存旧的窗口状态位置
                GetWindowPlacement(&m_OldWndPlacement);
                //获得窗口在屏幕坐标系中的位置
                CRect WindowRect;
                GetWindowRect(&WindowRect);
                //获得客户区在屏幕坐标系中的位置
                CRect ClientRect;
                RepositionBars(0,0xffff,AFX_IDW_PANE_FIRST,reposQuery,&ClientRect);
                ClientToScreen(&ClientRect);
                //获取屏幕分辨率
                int nFullWidth = GetSystemMetrics(SM_CXSCREEN);
                int nFullHeight = GetSystemMetrics(SM_CYSCREEN);
                //计算窗口全屏位置
                m_FullScreenRect.left = WindowRect.left-ClientRect.left;//大小为负的左边框宽度
                m_FullScreenRect.top = WindowRect.top-ClientRect.top;//大小为负的上边框宽度
                m_FullScreenRect.right = WindowRect.right-ClientRect.right+nFullWidth;//大小为右边框宽度和屏幕宽度之和
                m_FullScreenRect.bottom = WindowRect.bottom-ClientRect.bottom+nFullHeight;//大小为下边框宽度和屏幕高度之和
                //设置窗口状态位置结构
                WINDOWPLACEMENT wndpl;
                wndpl.length=sizeof(WINDOWPLACEMENT);
                wndpl.flags=0;
                wndpl.showCmd=SW_SHOWNORMAL;
                wndpl.rcNormalPosition=m_FullScreenRect;
                //设置窗口位置
                SetWindowPlacement(&wndpl);
                m_bFullScreen=TRUE;//将窗口全屏标识设置为TRUE
        }
}

//退出全屏还原窗口大小
void CFullScreenDlg::OnExitFullScreen()
{
        //判断窗口是否在全屏状态中,如果是全屏则执行下列代码
        if(m_bFullScreen)
        {
                ShowWindow(SW_HIDE);
                SetWindowPlacement(&m_OldWndPlacement);//还原为旧的窗口状态
                m_bFullScreen = false;//更改窗口全屏状态标识为FALSE
        }
}

天下无敌丑爸爸 发表于 2013-10-6 14:54:20

牡丹花下死做鬼 发表于 2013-10-6 13:11 static/image/common/back.gif
1:一种简单方法设置窗口全屏

在窗口初始化函数OnInitDialog()中调用一下代码:2:通过设置窗口显示状 ...

大哥 一旦窗口原点定义为负值的话,下面的菜单栏就挡不住了。你这方法我也试过的啊。

天下无敌丑爸爸 发表于 2013-10-6 15:46:38

窗体我是真的做不到了,刚用对话框试了试可以做到全屏。

xiejiale 发表于 2013-10-8 07:12:35

谢谢楼主啊:loveliness::loveliness::loveliness::loveliness::loveliness:
页: [1]
查看完整版本: 求助啊。怎么让窗口全屏化。不是最大化。