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, 0, &rt, 0);
    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,0,(PVOID)&rt,0);

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

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

1.判断位置

RECT rt;
SystemParametersInfo(SPI_GETWORKAREA,   0,   &rt,   0)    // 获得工作区大小

  //任务栏在下面的高度
  int   y   =   ::GetSystemMetrics(SM_CYSCREEN)-rt.Height();
  int   y   =   rt.top;    //上面
  int   y   =   rt.left;   // 左
  int   y   =   ::GetSystemMetrics(SM_CXSCREEN)-rt.Width(); // 右  
2.得到高度,然后可判断位置

CRect   rect;
CWnd *pWndPrev=   FindWindow("Shell_TrayWnd", "");     // 调用本对象即this的Findwindow函数,返回窗口指针

  pWndPrev->GetWindowRect(&rect);
  //rect.bottom-rect.top   就是任务栏的高度  

if(rect.top>0)   //下面
if(rect.left>0)   //左面 

或者
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;不过可以接受了。

再次证明有时候,不能只是套别人的方法,自己还是要动动脑,用自己的方法去实现。要相信自己,有的想法是行得通的。

时间: 2024-10-09 05:16:12

MFC最大化显示任务栏的相关文章

UIScrollView UITableView 上拉隐藏导航栏和tabbar 下拉显示导航栏和tabbar

//UIScrollView  UITableView 上拉隐藏导航栏和tabbar 下拉显示导航栏和tabbar-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ CGPoint translation = [scrollView.panGestureRecognizer translationInView:scrollView.superview];    if

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

扩展屏幕下都显示任务栏!!! win7系统本身无法设置该功能(目前我是不知道) 但可以下载第三方软件来解决该问题. 第一步:Dual Monitor Taskbar 下载软件 下载链接:http://pan.baidu.com/s/1o61isjw 密码:yzcp 第二步:安装完在扩展屏幕上便会出现任务栏 第三步:在扩展屏下任务栏中右击属性来设置相关的功能. 比如显示Windows按键.可以 镜像-两个任务栏控制同一个页面,也可以设置单独控制自己显示屏页面. 这样便解决了两个屏幕双任务栏的功能了

MFC对话框显示BMP图片

1.MFC对话框显示BMP图片我们先从简单的开始吧.先分一个类: (一) 非动态显示图片(即图片先通过资源管理器载入,有一个固定ID) (二) 动态载入图片(即只需要在程序中指定图片的路径即可载入) 为方便说明,我们已经建好一个基于对话框的工程,名为Ttest. 对话框类为CTestDlg (一)    非动态载入图片. 方法1.先从最简单的开始,用picture 控件来实现. 步骤: 先在资源里Import一张图片,ID为IDB_BITMAP2 然后在对话框上添加一个picture控件,右键点

win7不显示语言栏

某天重新开机,发现窗口右下角语言栏消失了, 使用输入法的时候不能使用平时用的几个输入法了, 于是百度重新显示语言栏的方法,控制面板里面设置语言栏显示等方法都不行, 也使用了360安全卫士里面的工具来修复也不成功, 后来找到一个工具, http://pan.baidu.com/s/1pJ68G1X 下载运行之后就可以了.

隐藏显示任务栏

实现效果: 知识运用: API函数FindWindow和ShowWindow 实现代码: private const int SW_HIDE = 0; private const int SW_RESTORE = 9; [DllImport("user32.dll")] //寻找窗口列表中第一个符合指定条件的顶级窗口 public static extern int FindWindow(string IpClassName,string IpWindowName); [DllImpo

Puppeteer最大化显示,分辨率自适应

Puppeteer自适应分辨率,可以将defaultViewport设为null, 启动的时候还是半屏显示,点击最大化按钮,可以最大化显示. 这样分辨率能够自适应操作系统. 具体可看:https://github.com/GoogleChrome/puppeteer/issues/3688#issuecomment-453218745 原文地址:https://www.cnblogs.com/mengff/p/11596083.html

隐藏,显示任务栏,桌面 C++代码

HWND desktop,task; desktop=FindWindow(L"ProgMan",NULL); task=FindWindow(L"Shell_TrayWnd",NULL); ShowWindow(task,SW_HIDE);//隐藏任务栏 //ShowWindow(desktop,SW_HIDE);//隐藏桌面 HWND desktop,task; desktop=FindWindow(L"ProgMan",NULL); tas

MFC中显示 .bmp格式的位图

最近在看VisualC++ 图像处理的书籍,表示一直在从基础做起,今天就记录一个简单功能的实现,显示.bmp格式的位图. 首先需要理解的是窗口创建的过程包括两个步骤:首先擦除窗口的背景,然后在对窗口进行重新绘制. 一般而言,对于单文档或多文档的MFC程序,显示图像的代码要放在OnDraw函数之中.刚刚说过,窗口重绘时,要先将窗口的背景擦除,也就是发送WM_ERASEBKGND消息,然后用OnEraseBkgnd()函数处理这个消息,所以我们的显示图像的代码也可以放在这个函数之中.当然,这里只是为

Sharepoint 只显示导航栏,打开文档库或列表内容显示空白

Sharepoint 打开文档库或列表时显示空白,最基本的操作命令菜单如:New , Actions Settings 等都没有显示,只能显示左边的导航栏. 通过Site Actions进入 Site Settings,在Content and structure 中可以看到该文档库的内容,对文档库进行设置,删除以前的view,然后新建一个standard view. 问题解决. 最后询问用户,是由于不小心点击到了edit page,并误以为web part上的小叉是关闭,结果导致在页面删除了该