精华内容
下载资源
问答
  • wince MFC窗口全屏

    千次阅读 2012-05-30 15:18:58
    wince的MFC程序窗口全屏,在InitDialog函数里面加: CRect m_FullScreenRect; //全屏区域 CRect WindowRect; GetWindowRect(&WindowRect); CRect ClientRect; RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST,...

    wince的MFC程序窗口全屏,在InitDialog函数里面加:

    CRect m_FullScreenRect;   //全屏区域
    	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;
    	this->SetWindowPos(this->GetWindow(GW_OWNER), m_FullScreenRect.left,
    		m_FullScreenRect.top, m_FullScreenRect.Width(),
    		m_FullScreenRect.Height(), SWP_SHOWWINDOW);
    
    	//hide the taskbar
    	HWND hTask = ::FindWindow(TEXT("HHTaskBar"), NULL);
    	if (hTask){
    		::ShowWindow(hTask, SW_HIDE);
    	}

    另外,在程序退出前需要恢复任务栏的显示:

    //show the taskbar
    	HWND hTask = ::FindWindow(TEXT("HHTaskBar"), NULL);
    	if (hTask){
    		::ShowWindow(hTask, SW_SHOW);
    	}

    该操作我放在析构函数中。


    win32的则需要对应的修改下。


    上述代码在CE5.0上测试通过。


    展开全文
  • 相信用电脑看过电影的人都会下意识的默认双击一个播放器就会得到全屏播放影片的效果,那这个是怎么...首先从简单的着手,来看如何实现MFC窗口全屏显示,废话不说上代码: 在对话框头文件中添加变量: //对话框功能 p

        相信用电脑看过电影的人都会下意识的默认双击一个播放器就会得到全屏播放影片的效果,那这个是怎么做到的呢?其实本人也是不知道的。。当然这篇文章不是到这就完了,而是介绍一种在MFC上全屏显示窗口或者PICTURE控件的方法,用此方法能做到全屏显示图像的效果,当然好坏还是有待考证的。

        首先从简单的着手,来看如何实现MFC窗口的全屏显示,废话不说上代码:

        在对话框头文件中添加变量:

    //对话框功能
    private:
    	BOOL bFullScreen;
    	CRect rectFullScreen;
    	WINDOWPLACEMENT m_struOldWndpl;//结构中包含了有关窗口在屏幕上位置的信息

        添加对话框的鼠标左键双击处理函数,并添加如下代码:

    if (!bFullScreen)
    {
    	//获取系统屏幕宽高
    	int g_iCurScreenWidth = GetSystemMetrics(SM_CXSCREEN);
    	int g_iCurScreenHeight = GetSystemMetrics(SM_CYSCREEN);
    
    	//用m_struOldWndpl得到当前窗口的显示状态和窗体位置,以供退出全屏后使用
    	GetWindowPlacement(&m_struOldWndpl);
    
    	//计算出窗口全屏显示客户端所应该设置的窗口大小,主要为了将不需要显示的窗体边框等部分排除在屏幕外
    	CRect rectWholeDlg;
    	CRect rectClient;
    	GetWindowRect(&rectWholeDlg);//得到当前窗体的总的相对于屏幕的坐标
    	RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &rectClient);//得到窗口客户区坐标
    	ClientToScreen(&rectClient);//将客户区相对窗体的坐标转为相对屏幕坐标
    	rectFullScreen.left = rectWholeDlg.left - rectClient.left;
    	rectFullScreen.top = rectWholeDlg.top - rectClient.top;
    	rectFullScreen.right = rectWholeDlg.right + g_iCurScreenWidth - rectClient.right;
    	rectFullScreen.bottom = rectWholeDlg.bottom + g_iCurScreenHeight - rectClient.bottom;
    
    	//设置窗口对象参数,为全屏做好准备并进入全屏状态
    	WINDOWPLACEMENT struWndpl;
    	struWndpl.length = sizeof(WINDOWPLACEMENT);
    	struWndpl.flags = 0;
    	struWndpl.showCmd = SW_SHOWNORMAL;
    	struWndpl.rcNormalPosition = rectFullScreen;
    	SetWindowPlacement(&struWndpl);//该函数设置指定窗口的显示状态和显示大小位置等,是我们该程序最为重要的函数
    	bFullScreen = true;
    }
    else
    {
    	SetWindowPlacement(&m_struOldWndpl);
    	bFullScreen = false;
    }

        OK,到处窗口客户区全屏显示就完成一大部分了,运行一下双击窗口就会全屏显示窗口客户区,再双击则返回之前的窗体。

        为什么说只是完成一大部分呢?原因在于现在的全屏还不是真正意义上的全屏,在目前的情况下双击全屏会发现底部开始菜单栏和右边一部分屏幕并没有被覆盖,究其原因是因为当窗体做出调整大小之类的操作时Windows会首先发送WM_GETMINMAXINFO消息,该消息在默认的缺省处理中是不允许窗体大小大于屏幕大小的。为此,我们要修改这个消息的响应函数,即主动为窗体添加WM_GETMINMAXINFO消息的处理函数,实现如下:

    void CShowPictureInFullScreenDlg::OnGetMinMaxInfo(MINMAXINFO* lpMMI)
    {
    	// TODO:  在此添加消息处理程序代码和/或调用默认值
    	if (bFullScreen)
    	{
    		lpMMI->ptMaxSize.x = rectFullScreen.Width();
    		lpMMI->ptMaxSize.y = rectFullScreen.Height();
    		lpMMI->ptMaxPosition.x = rectFullScreen.left;
    		lpMMI->ptMaxPosition.y = rectFullScreen.top;
    		lpMMI->ptMaxTrackSize.x = rectFullScreen.Width();
    		lpMMI->ptMaxTrackSize.y = rectFullScreen.Height();
    	}
    
    	CDialogEx::OnGetMinMaxInfo(lpMMI);
    }

        到此,全屏显示窗口客户区的功能就完成了。如果仔细观察了上面所写的代码,会轻易的发现其中最为关键的一句为

    SetWindowPlacement(&struWndpl);//该函数设置指定窗口的显示状态和显示大小位置等,是我们该程序最为重要的函数

        如果我们把窗口客户区变为全屏大小之后将PICTURE控件调整大小填满整个客户区并且隐藏掉其他的控件,则可以得到全屏显示的图片。实现如下:

        添加一个类变量存储PICTURE控件原位置信息

    WINDOWPLACEMENT m_struOldWndpPic;//PICTURE控件在屏幕上位置的信息
        修改对话框的鼠标左键双击处理函数

    if (!bFullScreen)
    {
    	bFullScreen = true;
    
    	//获取系统屏幕宽高
    	int g_iCurScreenWidth = GetSystemMetrics(SM_CXSCREEN);
    	int g_iCurScreenHeight = GetSystemMetrics(SM_CYSCREEN);
    
    	//用m_struOldWndpl得到当前窗口的显示状态和窗体位置,以供退出全屏后使用
    	GetWindowPlacement(&m_struOldWndpl);
    	GetDlgItem(IDC_STATIC_PICSHOW)->GetWindowPlacement(&m_struOldWndpPic);
    	
    	//计算出窗口全屏显示客户端所应该设置的窗口大小,主要为了将不需要显示的窗体边框等部分排除在屏幕外
    	CRect rectWholeDlg;
    	CRect rectClient;
    	GetWindowRect(&rectWholeDlg);//得到当前窗体的总的相对于屏幕的坐标
    	RepositionBars(0, 0xffff, AFX_IDW_PANE_FIRST, reposQuery, &rectClient);//得到客户区窗口坐标
    	ClientToScreen(&rectClient);//将客户区相对窗体的坐标转为相对屏幕坐标
    	//GetDlgItem(IDC_STATIC_PICSHOW)->GetWindowRect(rectClient);//得到PICTURE控件坐标
    
    	rectFullScreen.left = rectWholeDlg.left - rectClient.left;
    	rectFullScreen.top = rectWholeDlg.top - rectClient.top;
    	rectFullScreen.right = rectWholeDlg.right + g_iCurScreenWidth - rectClient.right;
    	rectFullScreen.bottom = rectWholeDlg.bottom + g_iCurScreenHeight - rectClient.bottom;
    
    	//设置窗口对象参数,为全屏做好准备并进入全屏状态
    	WINDOWPLACEMENT struWndpl;
    	struWndpl.length = sizeof(WINDOWPLACEMENT);	
    	struWndpl.flags = 0;
    	struWndpl.showCmd = SW_SHOWNORMAL;
    	struWndpl.rcNormalPosition = rectFullScreen;
    	SetWindowPlacement(&struWndpl);//该函数设置指定窗口的显示状态和显示大小位置等,是我们该程序最为重要的函数
    
    	//将PICTURE控件的坐标设为全屏大小
    	GetDlgItem(IDC_STATIC_PICSHOW)->MoveWindow(CRect(0, 0, g_iCurScreenWidth, g_iCurScreenHeight));
    }
    else
    {
    	GetDlgItem(IDC_STATIC_PICSHOW)->SetWindowPlacement(&m_struOldWndpPic);
    	SetWindowPlacement(&m_struOldWndpl);
    	bFullScreen = false;
    }
        到此本篇博客希望实现的内容就都完成了,效果如下:




        可以在鼠标双击函数中加上鼠标位置判断来实现鼠标双击位置在PICTURE控件内才放大的效果。本篇博客的工程在博客最后的链接中,该工程基于VS2013+OpenCV2.4.9,如有需要可以下载,要自行配置OpenCV方可运行。

        工程地址:点击打开链接




























    展开全文
  • LZ在项目中遇到一个客户端全屏的问题,主要功能是将一个地图全屏,可以撤销全屏,现将这个技术记录下来 下面是去需要全屏的类 class CFullScreenHelp { public: CFullScreenHelp(); ~CFullScreenHelp(); ...

    LZ在项目中遇到一个客户端全屏的问题,主要功能是将一个地图全屏,可以撤销全屏,现将这个技术记录下来

    下面是去需要全屏的类


    class CFullScreenHelp
    {
    public:
    CFullScreenHelp();
    ~CFullScreenHelp();


    public:
    void Init(CWnd* lpObjWnd);
    void Unit();


    void FullScreen();  //全屏


    private:
        CWnd* m_lpObjWnd;
        CWnd* m_lpFullWnd;
        CWnd* m_pParentWnd;
    BOOL m_bWndFullScreen;
    CRect m_rcWndPos;
    };


    类实现:#include "stdafx.h"
    #include "FullWndHelp.h"


    CFullScreenHelp::CFullScreenHelp()
    : m_lpObjWnd(NULL)
    , m_lpFullWnd(NULL)
    , m_bWndFullScreen(FALSE)
    {
    }

    CFullScreenHelp::~CFullScreenHelp()
    {
    }


    void CFullScreenHelp::Init(CWnd* lpObjWnd)
    {
        if (NULL == lpObjWnd)
        {
            return;
        }
        if (NULL == lpObjWnd->GetParent())
        {
            return;
        }
    m_lpObjWnd = lpObjWnd;
        m_pParentWnd = lpObjWnd->GetParent();


    if (NULL == m_lpFullWnd)
    {
    m_lpFullWnd = new CWnd;
    }
    if (NULL != m_lpFullWnd)
    {
    m_lpFullWnd->CreateEx(WS_EX_TOPMOST|WS_EX_TOOLWINDOW, AfxRegisterWndClass(NULL), 
    NULL, WS_POPUP|WS_VISIBLE, CRect(0, 0, 0, 0), NULL, 0);


    CWnd* pScreenWnd = CWnd::GetDesktopWindow();
    CRect rcScreen;
    pScreenWnd->GetClientRect(&rcScreen);


    m_lpFullWnd->MoveWindow(&rcScreen);
    m_lpFullWnd->ShowWindow(SW_HIDE);
    }
    }


    void CFullScreenHelp::Unit()
    {
    if (m_lpFullWnd)
    {
    m_lpFullWnd->DestroyWindow();
    delete m_lpFullWnd;
    m_lpFullWnd = NULL;
    }
    }


    //全屏的函数;

    void CFullScreenHelp::FullScreen()
    {
        m_bWndFullScreen = !m_bWndFullScreen;
        if (m_lpObjWnd == NULL)
         {
          return ;
         }
        if (m_bWndFullScreen)
         {
             //保存全屏前的位置
             m_lpObjWnd->GetWindowRect(&m_rcWndPos);
             m_lpObjWnd->ScreenToClient(&m_rcWndPos);
     
             //获得当前处于哪个屏幕
             HMONITOR hMonitor = MonitorFromWindow(m_lpObjWnd->GetSafeHwnd(), MONITOR_DEFAULTTONEAREST);
             MONITORINFOEX mi;
             mi.cbSize = sizeof(mi);
             GetMonitorInfo(hMonitor, &mi);  //检索显示器信息
     
             //设置全屏
             m_lpObjWnd->SetParent(m_lpFullWnd);
             m_lpObjWnd->MoveWindow(&(mi.rcMonitor));
             m_pParentWnd->ShowWindow(SW_HIDE);
             m_lpFullWnd->ShowWindow(SW_SHOW);
             m_lpObjWnd->ShowWindow(SW_SHOW);
             m_bWndFullScreen = TRUE;
        }
        else
        {
            m_lpObjWnd->SetParent(m_pParentWnd);
            m_lpObjWnd->MoveWindow(m_rcWndPos);
            m_lpFullWnd->ShowWindow(SW_HIDE);
            m_pParentWnd->ShowWindow(SW_SHOW);
            m_lpObjWnd->ShowWindow(SW_SHOW);


             m_bWndFullScreen = FALSE;
        }
        return;
    }

    主要代码如上所示。

    一个简单的目的就是要将需要全屏的窗口移动到屏幕的(0,0 )处然后将其显示出来,首先要记住移动前的位置吗,以便能回到原来的位置,然后在需要全屏的定地方调用FullScreen函数接口即可。每触发一次则全屏状态改变一次,第二次出发时就会将全屏状态恢复到全屏前的位置。

    展开全文
  • MFC窗口全屏显示扩展控件

    千次阅读 2015-06-27 20:07:16
    最近在编写视频播放器,需要播放子窗口在双击时全屏显示,再次双击时还原。在网上参考了很多文章,发现在自己动手做时总有很多不如意的地方,于是自己也写篇心得。

              最近在编写视频播放器,需要播放子窗口在双击时全屏显示,再次双击时还原。在网上参考了很多文章,发现在自己动手做时总有很多不如意的地方,于是自己也写篇心得。

           作者用到的工具与平台:

                 vin7 64位;

                 visual studio 2005;


    一、新建对话框工程:DlgTest;在工程中添加以CStatic 为基类的全屏扩展控件类CFullScreenDlg,为其添加成员变量

    private:
        bool m_bIsFullScreen; // 全屏状态,false 非全屏, true 全屏。要初始化其为false
        WINDOWPLACEMENT m_wpmSave;
        CWnd * m_pParent;;


    1、重载CFullScreenDlg类的虚函数PreTranslateMessage用于响应鼠标双点事件。

    BOOL CFullScreenDlg::PreTranslateMessage(MSG* pMsg)
    {
        // TODO: Add your specialized code here and/or call the base class
        if(pMsg->message == WM_LBUTTONDBLCLK)
        {
            FullScreen();
        }
        
        return CStatic::PreTranslateMessage(pMsg);
    }


    2、FullScreen函数的实现


    void CFullScreenDlg::FullScreen(void)
    {
        if (m_bIsFullScreen)
        {
            SetParent(m_pParent);
            ModifyStyle(WS_POPUP, WS_CHILD);
            SetWindowPlacement(&m_wpmSave);

            m_bIsFullScreen = false;
        }
        else
        {
            m_pParent = GetParent();

            GetWindowPlacement(&m_wpmSave);

            int cx = ::GetSystemMetrics(SM_CXSCREEN);
            int cy = ::GetSystemMetrics(SM_CYSCREEN);
            ModifyStyle(WS_CHILD,WS_POPUP);
            SetParent(NULL);
            MoveWindow(0, 0, cx, cy);
            m_bIsFullScreen = true;
        }
    }


    3、重载CFullScreenDlg类的虚函数PreCreateWindow,添加对话框创建时的风格 SS_NOTIFY(因我们创建的全屏控件类基类为CStatic,而其默认并不接收鼠标消息,作者在这卡了大半天时间才在网上找到原因的)

    BOOL CFullScreenDlg::PreCreateWindow(CREATESTRUCT& cs)
    {
        // TODO: Add your specialized code here and/or call the base class
        cs.style |= SS_NOTIFY;
        return CStatic::PreCreateWindow(cs);
    }

    到此我们的全屏扩展控件已创建完成了。


    二、创建我们的扩展全屏控件实例:

    1、在主对话框的初始化函数OnInitDialog中创建实例

        CRect rt;
        GetDlgItem(IDC_STC_FULL)->GetWindowRect(&rt);  // 拖拉了一个我们扩展控件显示位置的参考CStatic,设置其为隐藏,省得写位置坐标
        ScreenToClient(&rt);

        m_pStcFull = new CFullScreenDlg;
        if(m_pStcFull)
            m_pStcFull->Create("", WS_CHILD | WS_VISIBLE | WS_BORDER, rt, this);


    启动对话框就可以实现双击全屏,再次双击还原的子控件效果了。


    本文完整vs2005工程下载地址:

    http://download.csdn.net/detail/qusuo/8845689


    本文参考了网络资源

    1、http://blog.sina.com.cn/s/blog_6aeaee7e0100u5ef.html

    2、... ...

    展开全文
  • MFC窗口全屏和还原实现

    千次阅读 2018-05-16 10:34:34
    一、定义三个变量BOOL m_bFullSceen;...//保存窗口位置信息二、变量初始化m_bFullSceen(FALSE)三、调用函数(鼠标双击窗口实现窗口全屏化)//ON_MESSAGE(UM_LBUTTON_DBLCLK, OnLButtonDblClk) LRESULT ...
  • MFC全屏窗口的方法

    2013-04-22 16:15:10
    在OnInitDialog()函数你添加 ModifyStyleEx(0, WS_EX_NODRAG); int iFullWidth = GetSystemMetrics(SM_CXSCREEN);  int iFullHeight = GetSystemMetrics(SM_CYSCREEN);  ::SetWindowPos(this->m_hWnd, ...
  • 通过VS2010实现窗口全屏及还原功能,开发环境VS2010
  • MFC框架中视图窗口全屏显示

    千次阅读 2011-05-15 15:16:00
    MFC的视图文档结构中,视图永远在框架窗口的范围之内。本文介绍一种把视图全屏显示的方法,能使视图的大小占据整个显示器窗口。方法要点1:扩大主框架窗口。因为视图的大小是随主框架窗口的大小自动调整的,...
  • MFC MDI 全屏

    千次阅读 2010-07-26 11:07:00
    1.在MainFrame.h的CMainFrame类中添加数据成员及成员函数:... //全屏显示标志//成员函数 void EnterFullScreen();//全屏 void QuitFullScreen();//退出全屏}2.在MainFrame.cpp中实现函数:先在构造函数中初始化m_bFu
  • MFC MDI 全屏实现

    千次阅读 2011-12-01 16:02:52
    1.在MainFrame.h的CMainFrame类中添加数据成员及成员函数: class CMainFrame : public CMDIFrameWnd ...//旧的窗口位置及大小  BOOL m_bFullScreen; //全屏显示标志 //成员函数  void E
  • WINCE MFC程序全屏显示

    2013-12-10 14:59:03
    WINCE MFC程序全屏显示 WINCE下MFC程序(VS2005环境)为了让视频全屏显示采用下面代码 CRect m_FullScreenRect; //全屏区域 CRect WindowRect; GetWindowRect(&WindowRect); CRect ClientRect; ...
  • MFC 控件全屏显示

    千次阅读 热门讨论 2012-06-19 15:56:35
    最近在做基于对话框的简易播放器,其中涉及用于显示图像的picture 控件全屏的问题,综合csdn各个帖子,凑合完成了全屏显示。 //全屏显示 //成员变量 BOOL m_bFullScreen; // 全屏标志 CRect m_FullScreenRect;...
  • MFC实现全屏显示

    千次阅读 2014-06-19 10:49:45
    有些软件或者游戏需要全屏显示不受其他窗口的干扰的话,需要全屏显示,这样鼠标
  • MFC全屏

    千次阅读 2012-08-02 09:36:06
    1.在MainFrame.h的CMainFrame类中添加数据成员及成员函数: class CMainFrame : public CMDIFrameWnd ...//旧的窗口位置及大小    BOOL m_bFullScreen; //全屏显示标志 //成员函数  v
  • MFC创建一个全屏窗口(附源码)

    千次阅读 2013-04-10 16:28:13
    正在学习MFC编程之全屏显示窗口,结合网上的资料,自己写了一个关于全屏窗口的项目。 具体步骤如下: 1、首先在MainFrm.h头文件中定义以下成员变量和成员函数。 protected: WINDOWPLACEMENT m_...
  • MFC全屏显示OpenGL窗口的简易操作

    千次阅读 2010-08-24 07:38:00
    全屏显示OpenGL程序的说明   本程序主要在CMainFrame上操作: 1.准备工作OpenGL框架的创建   (1)添加需要的成员变量: CClientDC(或者CDC)m_pDC 并初始化m_pDC=new ...
  • Qt窗口中的一些小技术总结   //Qt主窗口没有最小化,最大化按钮且最大化显示  int main(int argc, char *argv[])  {  QApplication a(argc, argv);  TestQtForWinCE w;  w.setWindowFlags(w....
  • OpenCV在MFC窗口显示图像1. OpenCV创建一个窗口并在其中显示图像1.1 读入图像文件1.2 创建一个窗口1.3 在一个窗口中显示一幅图像(属于highgui模块)1.4. 显式地销毁指定窗口1.5. 显式地销毁所有HighGUI窗口1.6 移动...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,823
精华内容 729
关键字:

mfc窗口全屏函数