MFC最大化显示任务栏
今天2016-07-23 13:26:24又来处理最大化时,窗口任务栏隐藏的bug。
前面已经用了
MINMAXINFO的结构体:
typedef struct {
POINT ptReserved; //不用
POINT ptMaxSize; //最大范围
POINT ptMaxPosition; //最大的放置点
POINT ptMinTrackSize; //最小拖动范围
POINT ptMaxTrackSize; //最大拖动范围
} MINMAXINFO;
http://blog.csdn.net/whh_1218/article/details/8495649;这里的方法,感觉缺什么,有些变量不知道。也知道怎么去处理OnGetMinMaxInfo()消息函数了。
void MainDialog::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
// TODO: Add your message handler code here and/or call default
//lpMMI->ptMaxSize.y = GetSystemMetrics(SM_CYFULLSCREEN) + GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYDLGFRAME); CRect rt;
SystemParametersInfo(SPI_GETWORKAREA, , &rt, );
lpMMI->ptMaxSize.x = rt.Width();
lpMMI->ptMaxSize.y = rt.Height();
lpMMI->ptMaxTrackSize.x = rt.Width();
lpMMI->ptMaxTrackSize.y = rt.Height(); CDialog::OnGetMinMaxInfo(lpMMI);
}
这样的效果,竖放的时候不好,将窗口的大小是确定了,但是左上角的坐标不对!
然后学习了,确定任务栏大小的方法,以为真的要分情况,讨论窗口的大小了。
获得桌面工作区大小,即不包括任务栏的大小,制作窗口全屏时经常用到,方法如下:
RECT rt;
SystemParametersInfo(SPI_GETWORKAREA,,(PVOID)&rt,);
CRect rect;
::GetWindowRect(::FindWindow(_T("Shell_TrayWNd"), NULL), &rect); //获取任务栏的大小
获得任务栏高度与宽度方法有二:
.判断位置 RECT rt;
SystemParametersInfo(SPI_GETWORKAREA, , &rt, ) // 获得工作区大小 //任务栏在下面的高度
int y = ::GetSystemMetrics(SM_CYSCREEN)-rt.Height();
int y = rt.top; //上面
int y = rt.left; // 左
int y = ::GetSystemMetrics(SM_CXSCREEN)-rt.Width(); // 右
.得到高度,然后可判断位置 CRect rect;
CWnd *pWndPrev= FindWindow("Shell_TrayWnd", ""); // 调用本对象即this的Findwindow函数,返回窗口指针 pWndPrev->GetWindowRect(&rect);
//rect.bottom-rect.top 就是任务栏的高度 if(rect.top>) //下面
if(rect.left>) //左面 或者
CWnd* p = NULL ;
HWND hwnd = ::FindWindow("Shell_TrayWnd",NULL) ; // 调用公有的FindWindow函数,返回窗口句柄
if(hwnd)
{
p = CWnd::FromHandle(hwnd) ;
}
p->GetWindowRect();//包含有宽度
最后突然想带了既然SystemParametersInfo(SPI_GETWORKAREA, 0, &rt, 0);都获得了工作窗体的大小,就直接 MoveWindow(rt);就可以了,实事证明是可行了。只不过移动后返回还是有bug;不过可以接受了。
再次证明有时候,不能只是套别人的方法,自己还是要动动脑,用自己的方法去实现。要相信自己,有的想法是行得通的。
MFC最大化显示任务栏的更多相关文章
- WPF自定义窗口最大化显示任务栏
原文:WPF自定义窗口最大化显示任务栏 当我们要自定义WPF窗口样式时,通常是采用设计窗口的属性 WindowStyle="None" ,然后为窗口自定义放大,缩小,关闭按钮的样式 ...
- 在MFC[转载]在MFC状态栏显示时间 状态栏显示时间
原文:在MFC状态栏显示时间,谢小哈皮儿 c/c++ vc 在mfc状态栏显示时间,在VC的控件中有个Status bar可以在窗体状态栏中添加日期和时间.其实通过简单的代码,你就能创建一个有时钟显示 ...
- MFC对话框显示BMP图片
1.MFC对话框显示BMP图片我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) ...
- win7系统扩展双屏幕时,如何在两个屏幕下都显示任务栏
扩展屏幕下都显示任务栏!!! win7系统本身无法设置该功能(目前我是不知道) 但可以下载第三方软件来解决该问题. 第一步:Dual Monitor Taskbar 下载软件 下载链接:http:// ...
- winform,wpf全屏 还显示任务栏的解决方法
原文:winform,wpf全屏 还显示任务栏的解决方法 以wpf为例: 全屏代码: this.Topmost = true; this.WindowStyle = System.Windows.Wi ...
- C#使用Windows API 隐藏/显示 任务栏 (FindWindowEx, ShowWindow)
原文 C#使用Windows API 隐藏/显示 任务栏 (FindWindowEx, ShowWindow) 今天,有网友询问,如何显示和隐藏任务栏? 我这里,发布一下使用Windows API 显 ...
- Linux显示各栏位的标题信息列
Linux显示各栏位的标题信息列 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ who -H 名称 线路 时间 备注 youhaidong :0 2015-0 ...
- C#隐藏与显示系统任务栏和开始菜单栏按钮
隐藏与显示系统任务栏和开始菜单栏按钮:直接上代码: private const int SW_HIDE = 0; //隐藏 private const int SW_REST ...
- Fiddler监控面板显示Server栏(Fiddler v5.0)
1.点击Rules下的Customize Rules.js,会打开Fiddler ScriptEditor 2.去掉 UI.lvSessions.AddBoundColumn("Server ...
随机推荐
- java c# 加密与解密对照
原文 java c# 加密与解密对照 最近一直烦恼,java , c# 加密的不同,然后整理了一下,留个备份的轮子: 其中在 java.c#加密转换时,最重要的是 IV 的确定,我常常用如下方法使得j ...
- iOS 深入理解RunLoop
RunLoop 是 iOS 和 OSX 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理.之后会介绍一下在 iOS 中,苹果是如何利 ...
- The Introduction of Java Memory Leaks
One of the most significant advantages of Java is its memory management. You simply create objects a ...
- 想要风投被你的融资 PPT 打动吗?别忘了你其实就是在想方设法卖出自己公司的部分股权
硅谷,一个常常见诸于报端,看着很熟悉,但是又不那么被人所了解的未及之地.它不是一个严格限定的地理位置,一般来说是指旧金山和湾区,其中湾区又分为东湾(East Bay)和南湾(South Bay), ...
- php库Faker
Faker License : MIT Source Code Allo点评:Faker是一个很神奇的项目,会自动生成拟真的数据,包括用户资料.长文本.IP.日期等等,在网站上线前测试时非常好用. g ...
- ubuntu下android源码下载
步骤一: 首先保证你的ubuntu系统电脑可以顺利游览google,我们是将etc下 hosts替换掉,推荐hosts: http://laod.cn/hosts/2015-google...host ...
- hadoop2 环境的搭建(自动HA)
zookeeper:hadoop112.hadoop113.hadoop114 namenode:hadoop110和hadoop111 datanode:hadoop112.hadoop113.ha ...
- 【HDOJ】5632 Rikka with Array
1. 题目描述$A[i]$表示二级制表示的$i$的数字之和.求$1 \le i < j \le n$并且$A[i]>A[j]$的$(i,j)$的总对数. 2. 基本思路$n \le 10^ ...
- [Codeforces137C]History(排序,水题)
题目链接:http://codeforces.com/contest/137/problem/C 题意:给n对数,分别是一个事件的起始和终止时间.问被有几个事件被其他事件包含. 思路:先排序,按照起始 ...
- bzoj1499: [NOI2005]瑰丽华尔兹
dp. 首先我们可以看到每个时间段只能往一个方向转移最多t步(t为时间段的长度),所以我们可以按时间段dp.因为这个前后值互不影响,也不用占用这一维空间就可以省去. 然后每个时间段内是一列一列(行) ...