MFC中CSTATIC控件双击全屏/双击恢复
来源:互联网 发布:吸毒人群数据 编辑:程序博客网 时间:2024/05/19 05:33
双击全屏方法有两种
1.双击放大的时候调static控件的父句柄SerParent让控件的父句柄变成桌面,然后再提取桌面的分辨率用movewindow或者setwindowpos改变控件大小.恢复成原来的大小时把父句柄设置成对话框.
2.双击放大时调整对话框的大小,先把对话框变成全屏,再把控件变成全屏大小,其他控件可以先隐藏起来.双击恢复时先把对话框变小,再把控件变小.再显示其它控件.
这里只简单讲一下第二种方法,因为第一种方法我没成功
我是使用控件的事件来完成的双击操作.别人的我看有的是使用的重载这两个函数,
void OnLButtonDblClk(UINT nFlags, CPoint point)
virtual BOOL PreTranslateMessage(MSG* pMsg);
但是由于本人太菜,第一个做的会导致双击不是cstatic控件的地方也会全屏,其他按钮都点不了的结果,
第二锅是完全不会做,我做出来的只能全屏不能恢复成原来大小.
下面是我做的步骤:
先到资源视图里给这个控件添加这个双击事件函数
然后给static控件关联一个变量control类型的 m_ctrlPlayWnd 名字自己定.
void CXXXXDlg::OnStnDblclickStaticPrv(){
if(m_bIsFullScrean==FALSE) //m_bIsFullScrean这个是类里面定义的判断目前是否是全屏的变量
{
CRect rect; //rect用来获取桌面的分辨率
WINDOWPLACEMENT fullwnd; //fullwnd这个变量用来调整控件大小
GetDesktopWindow()->GetWindowRect(&rect); //rect用来获取桌面的分辨率
ModifyStyle(WS_CAPTION, 0); //去掉标题栏 //测试的时候可以不加这个试试,全屏有点不好看
ModifyStyleEx(WS_EX_DLGMODALFRAME, 0); //去掉边框 //看不出来啥
MoveWindow(&rect); //rect的利用,这里的MoveWindow是对主对话框产生效果,即使对话框全屏
fullwnd.flags=0; //这里开始是对WINDOWPLACEMENT这个类型的结构体赋值,我用到的就这四项
fullwnd.length = sizeof(WINDOWPLACEMENT);
fullwnd.showCmd = SW_SHOWNORMAL; //这里的字段就是表示激活显示窗口,详细到百科搜WINDOWPLACEMENT
fullwnd.rcNormalPosition = rect;
m_ctrlPlayWnd.SetWindowPlacement(&fullwnd); //用控件变量名加上系统自带的函数SetWindowPlacement后面再加上上面的WINDOWPLACEMENT变量就可以了
m_bIsFullScrean=TRUE; //表示全屏了 TRUE
}
else
{
//计算窗口还原位置,,,,,,,因为没这个步骤我看每次窗口都是在左上角恢复成原来大小,看起来别扭.
//注释:CRect m_Dlg_IDD;,int m_cx,int m_cy 这些变量是在类内定义的用来保存全屏前的窗口大小,在OnInitDialog里初始化
int widthx = m_Dlg_IDD.Width();
int heighty = m_Dlg_IDD.Height();
m_Dlg_IDD.left = (m_cx - widthx)/2;
m_Dlg_IDD.right = widthx + m_Dlg_IDD.left;
m_Dlg_IDD.top = (m_cy - heighty)/2;
m_Dlg_IDD.bottom = heighty + m_Dlg_IDD.top;
ModifyStyle(0,WS_CAPTION); //恢复标题栏 貌似这个函数就是前面加上0就是显示,后面加上0就是消去
ModifyStyleEx(0,WS_EX_DLGMODALFRAME); //去掉边框
MoveWindow(&m_Dlg_IDD); //把对话框恢复原大小,但不是原位置,我计算的是屏幕中间,如何会到原位置求大神教我~~~
m_ctrlPlayWnd.SetWindowPlacement(&m_Old_Place); //跟上面一样的操作,控件恢复原大小
m_bIsFullScrean=FALSE; //表示非全屏
}
}
下面是OnInitDialog里初始化的东西
//获取播放控件窗口大小位置
m_ctrlPlayWnd.GetClientRect(m_Old_IDC);
m_ctrlPlayWnd.GetWindowPlacement(&m_Old_Place);
//获得原dlg大小位置
GetWindowRect(m_Dlg_IDD);
//电脑屏幕分辨率
m_cx = GetSystemMetrics(SM_CXSCREEN);
m_cy = GetSystemMetrics(SM_CYSCREEN);
希望对大家有帮助,嘿嘿其实我就是做个笔记自己看
- MFC中CSTATIC控件双击全屏/双击恢复
- MFC中CSTATIC控件双击全屏/双击恢复
- C# 双击TableLayoutPanel中某个控件全屏显示,再次双击恢复原貌
- mfc实现播放器功能,双击全屏,再双击还原
- mfc 中静态控件static 的双击响应事件
- MFC中listControl控件右键双击响应事件
- mfc 中静态控件static 的双击响应事件
- C# 双击全窗口/全屏显示和恢复
- Mplayer开启双击全屏
- android双击视频全屏
- 双击屏幕切换全屏
- as3双击屏幕全屏
- 双击退出全屏
- as3双击屏幕全屏
- MFC中CStatic控件动态改变
- MFC中 CStatic类(静态控件类)
- MFC中修改CStatic控件颜色
- 双击
- SpringMVC下读取json返回字符串的乱码问题
- 那些年收藏的Android开源库集合(控件上)
- Windows下Python配置Theano深度学习框架Keras库
- cent os7设置静态ip
- queue
- MFC中CSTATIC控件双击全屏/双击恢复
- Java自定义注解@Retention和@Target
- Caused by: java.lang.OutOfMemoryError: PermGen space
- hdu 1787 欧拉函数算法
- 《Python核心编程》第二版学习总纲
- iOS 11配置文件
- Android学习笔记:Preference的使用
- 如何使用nodejs上传图片/文件
- Resin中对日志输出的配置