今天2016-07-23   13:26:24又来处理最大化时,窗口任务栏隐藏的bug。

前面已经用了

  1. MINMAXINFO的结构体:
  2. typedef struct {
  3. POINT ptReserved; //不用
  4. POINT ptMaxSize; //最大范围
  5. POINT ptMaxPosition; //最大的放置点
  6. POINT ptMinTrackSize; //最小拖动范围
  7. POINT ptMaxTrackSize; //最大拖动范围
  8. } MINMAXINFO;

http://blog.csdn.net/whh_1218/article/details/8495649;这里的方法,感觉缺什么,有些变量不知道。也知道怎么去处理OnGetMinMaxInfo()消息函数了。

  1. void MainDialog::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
  2. {
  3. // TODO: Add your message handler code here and/or call default
  4. //lpMMI->ptMaxSize.y = GetSystemMetrics(SM_CYFULLSCREEN) + GetSystemMetrics(SM_CYCAPTION) + GetSystemMetrics(SM_CYDLGFRAME);
  5.  
  6. CRect rt;
  7. SystemParametersInfo(SPI_GETWORKAREA, , &rt, );
  8. lpMMI->ptMaxSize.x = rt.Width();
  9. lpMMI->ptMaxSize.y = rt.Height();
  10. lpMMI->ptMaxTrackSize.x = rt.Width();
  11. lpMMI->ptMaxTrackSize.y = rt.Height();
  12.  
  13. CDialog::OnGetMinMaxInfo(lpMMI);
  14. }

这样的效果,竖放的时候不好,将窗口的大小是确定了,但是左上角的坐标不对!

然后学习了,确定任务栏大小的方法,以为真的要分情况,讨论窗口的大小了。

获得桌面工作区大小,即不包括任务栏的大小,制作窗口全屏时经常用到,方法如下:

  1. RECT rt;
  2. SystemParametersInfo(SPI_GETWORKAREA,,(PVOID)&rt,);

CRect rect;
::GetWindowRect(::FindWindow(_T("Shell_TrayWNd"), NULL), &rect);  //获取任务栏的大小

获得任务栏高度与宽度方法有二:

  1. .判断位置
  2.  
  3. RECT rt;
  4. SystemParametersInfo(SPI_GETWORKAREA, , &rt, ) // 获得工作区大小
  5.  
  6. //任务栏在下面的高度
  7. int y = ::GetSystemMetrics(SM_CYSCREEN)-rt.Height();
  8. int y = rt.top; //上面
  9. int y = rt.left; // 左
  10. int y = ::GetSystemMetrics(SM_CXSCREEN)-rt.Width(); // 右
  1. .得到高度,然后可判断位置
  2.  
  3. CRect rect;
  4. CWnd *pWndPrev= FindWindow("Shell_TrayWnd", ""); // 调用本对象即this的Findwindow函数,返回窗口指针
  5.  
  6. pWndPrev->GetWindowRect(&rect);
  7. //rect.bottom-rect.top 就是任务栏的高度
  8.  
  9. if(rect.top>) //下面
  10. if(rect.left>) //左面
  11.  
  12. 或者
  13. CWnd* p = NULL ;
  14. HWND hwnd = ::FindWindow("Shell_TrayWnd",NULL) ; // 调用公有的FindWindow函数,返回窗口句柄
  15. if(hwnd)
  16. {
  17. p = CWnd::FromHandle(hwnd) ;
  18. }
  19. 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. python 利用imap接收邮件,并保存附件

    def SaveAttachImap():# login the imap server ,retrive the  new mails ,and download the attachments. ...

  2. Android:实现数组之间的复制

    System提供了一个静态方法arraycopy(),我们可以使用它来实现数组之间的复制 System.arraycopy(src, srcPos, dst, dstPos, length); src ...

  3. SQL语句练习

    一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...

  4. MongoDB安装及简单实验

    1.Windows下安装MongoDB http://www.mongodb.org/downloads 下载msi,下一步下一步… 安装完毕后,到安装目录的bin目录下执行mongod启动数据库服务 ...

  5. Android中LayoutParams

    LayoutParams are used by views to tell their parents how they want to be laid out. See ViewGroup Lay ...

  6. VS2012安装英文的语言包后,调试的时候提示Unknown error:0x80040d10

    https://social.msdn.microsoft.com/Forums/en-US/e11a86ef-3be2-4256-92e9-d12809f2a6ca/error-0x80040d10 ...

  7. ORACLE将表中的数据恢复到某一个时间点

    执行如下SQL将test_temp表中的数据恢复到 2013-04-26  21:06:00 注意,这里一定要先删除全部数据,否则可能会导致数据重复 delete from test_temp; in ...

  8. servlet应用具体实例

    web,xml应用文件 1.<filter>参数 <filter> <filter-name>encodingFilter</filter-name> ...

  9. 类Item_equal

    class Item_equal: public Item_bool_func { List<Item_field> fields; /* list of equal field item ...

  10. HNOI2010弹飞绵羊

    不得不说块状数组好神奇的啊!这道题的标签可是splay的启发是合并(什么高大上的东西),竟然这么轻松的就解决了! var x,y,i,j,tot,n,m,ch:longint; f,k,l,bl,go ...