今天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最大化显示任务栏的更多相关文章

  1. WPF自定义窗口最大化显示任务栏

    原文:WPF自定义窗口最大化显示任务栏 当我们要自定义WPF窗口样式时,通常是采用设计窗口的属性 WindowStyle="None" ,然后为窗口自定义放大,缩小,关闭按钮的样式 ...

  2. 在MFC[转载]在MFC状态栏显示时间 状态栏显示时间

    原文:在MFC状态栏显示时间,谢小哈皮儿 c/c++ vc 在mfc状态栏显示时间,在VC的控件中有个Status bar可以在窗体状态栏中添加日期和时间.其实通过简单的代码,你就能创建一个有时钟显示 ...

  3. MFC对话框显示BMP图片

    1.MFC对话框显示BMP图片我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) ...

  4. win7系统扩展双屏幕时,如何在两个屏幕下都显示任务栏

    扩展屏幕下都显示任务栏!!! win7系统本身无法设置该功能(目前我是不知道) 但可以下载第三方软件来解决该问题. 第一步:Dual Monitor Taskbar 下载软件 下载链接:http:// ...

  5. winform,wpf全屏 还显示任务栏的解决方法

    原文:winform,wpf全屏 还显示任务栏的解决方法 以wpf为例: 全屏代码: this.Topmost = true; this.WindowStyle = System.Windows.Wi ...

  6. C#使用Windows API 隐藏/显示 任务栏 (FindWindowEx, ShowWindow)

    原文 C#使用Windows API 隐藏/显示 任务栏 (FindWindowEx, ShowWindow) 今天,有网友询问,如何显示和隐藏任务栏? 我这里,发布一下使用Windows API 显 ...

  7. Linux显示各栏位的标题信息列

    Linux显示各栏位的标题信息列 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ who -H 名称 线路 时间 备注 youhaidong :0 2015-0 ...

  8. C#隐藏与显示系统任务栏和开始菜单栏按钮

    隐藏与显示系统任务栏和开始菜单栏按钮:直接上代码:       private const int SW_HIDE = 0;  //隐藏       private const int SW_REST ...

  9. Fiddler监控面板显示Server栏(Fiddler v5.0)

    1.点击Rules下的Customize Rules.js,会打开Fiddler ScriptEditor 2.去掉 UI.lvSessions.AddBoundColumn("Server ...

随机推荐

  1. QT5删除隐藏目录+隐藏文件(使用Process::start函数调用系统命令,且等待到结束)

    1.功能需求 删除一个目录(包括目录本身),同时删除该目录中所有文件及目录(含隐藏的) 2.遇到的问题 qt5中已经有了递归删除目录的函数--->bool QDir::removeRecursi ...

  2. 用于主题检测的临时日志(383b4f88-5dc7-4b08-a585-27104eb4ee7f - 3bfe001a-32de-4114-a6b4-4005b770f6d7)

    这是一个未删除的临时日志.请手动删除它.(1e2a0af2-731b-4f82-9aa0-4e2d10ed7a1a - 3bfe001a-32de-4114-a6b4-4005b770f6d7)

  3. Android 多线程断点下载

    package com.itheima.mutiledownloader; import java.io.BufferedReader; import java.io.File; import jav ...

  4. Java API —— IO流小结

    练习题: 1.复制文本文件 package cn.itcast_01; import java.io.BufferedReader; import java.io.BufferedWriter; im ...

  5. qtp与selenium2的区别

    QTP:  我觉得qtp适合的人: 对编程不是很熟悉的 厌烦了手动的功能测试,想快速进入自动化行业的 公司想快速自动化项目,并且对价格或者对盗版无所谓的 vbs脚本语言易于上手,可以培训你对代码的兴趣 ...

  6. PHP优化杂烩

    讲 PHP 优化的文章往往都是教大家如何编写高效的代码,本文打算从另一个角度来讨论问题,教大家如何配置高效的环境,如此同样能够达到优化的目的. pool 一个让人沮丧的消息是绝大多数 PHP 程序员都 ...

  7. java--面向接口编程

    之前看的一本书的笔记,上周再看设计模式的时候,想到了这篇之前在看某本书时候的笔记. 面向接口编程很重要的一点就是接口回调,用接口声明的变量称作接口变量,属于引用型变量,可以存放实现该接口的类的实例的引 ...

  8. ubuntu 乱码 改为英文

    http://878045653.blog.51cto.com/2693110/735654 解决方法: 改成全英文环境来解决 方格 乱码 : 用vim配置语言环境变量 vim / etc/envir ...

  9. When you’re nearly 40 and unmarried, and you realize you’re going to be okay

    https://medium.com/the-gathering-kind/when-you-re-nearly-40-and-unmarried-and-you-realize-you-re-goi ...

  10. git文件未改动pull的时候提示冲突

    今天在mac下使用git工具,出现一个很奇怪的问题. 先声明当前工作目录是干净的,运行 git status 没有任何文件改动,且没有任何需要push的文件. 我执行 git pull 命令,直接提示 ...