当前位置: 首页 > 编程日记 > 正文

对话框窗口最大最小化

mfc里,基于对话框的窗口,具有最大最小化的属性设置。在Border属性里选择Resizing,然后在Maximize和Minimize中选择true。在窗体当中随便拖几个控件,然后运行,此时点击最大化会发现,整个窗体的大小是变大了,但是有效区域并不会改变大小,也就是控件的大小任然不变。那么如何调整对话框中的各个控件,随窗体的大小改变而改变呢?mfc里面有一个消息WM_SIZE,这个消息能响应窗体大小改变事件。具体如何操作?

选择类向导,搜索消息WM_SIZE,添加相应的事件处理函数void CMyDlg::OnSize(UINT nType, int cx, int cy),真正改变控件大小的函数并不是此函数,它还需要配合void CMyDlg::ChangeSize(CWnd *pWnd, int cx, int cy,bool tf) 才能进行处理。具体代码如下:

void CMyDlg::OnSize(UINT nType, int cx, int cy)
{CDialogEx::OnSize(nType, cx, cy);// TODO: 在此处添加消息处理程序代码if(nType==1) return;//最小化则什么都不做  // TODO: Add your message handler code here  CWnd *pWnd;    pWnd = GetDlgItem(IDC_STATIC_PLAYCTL);  ChangeSize(pWnd, cx, cy,false);  
//  pWnd = GetDlgItem(IDC_STATIC);  
//  ChangeSize(pWnd, cx, cy);  pWnd = GetDlgItem(IDC_BUTTON_LOAD);  ChangeSize(pWnd, cx, cy,false);  pWnd = GetDlgItem(IDC_BUTTON_PLAY);  ChangeSize(pWnd, cx, cy,false);  pWnd = GetDlgItem(IDC_BUTTON_STOP);  ChangeSize(pWnd, cx, cy,false);  pWnd = GetDlgItem(IDC_BUTTON_PLAY_FORWARD);  ChangeSize(pWnd, cx, cy,false);  pWnd = GetDlgItem(IDC_BUTTON_PLAY_BACKWARD);  ChangeSize(pWnd, cx, cy,false);   pWnd = GetDlgItem(IDC_STATIC_VOLUME_TEXT);  ChangeSize(pWnd, cx, cy,false);  pWnd = GetDlgItem(IDC_STATIC_FILENAME);  ChangeSize(pWnd, cx, cy,false);  pWnd = GetDlgItem(IDC_SLIDER_MEDIA);  ChangeSize(pWnd, cx, cy,false);  pWnd = GetDlgItem(IDC_SLIDER_VOLUME);  ChangeSize(pWnd, cx, cy,false);  pWnd=GetDlgItem(IDC_STATIC_VOLUME);ChangeSize(pWnd, cx, cy,false);  pWnd=GetDlgItem(IDC_STATIC_POSITION);ChangeSize(pWnd, cx, cy,false);pWnd=GetDlgItem(IDC_BUTTONftp);ChangeSize(pWnd, cx, cy,false);pWnd = GetDlgItem(IDC_STATIC_VIDEO);  ChangeSize(pWnd, cx, cy,true);  GetClientRect(&m_rect);// 将变化后的对话框大小设为旧大小}void CMyDlg::ChangeSize(CWnd *pWnd, int cx, int cy,bool tf)    //真正改变控件大小的函数,在onsize里边不断被调用
{  if(pWnd)  //判断是否为空,因为对话框创建时会调用此函数,而当时控件还未创建   {  CRect rect;   //获取控件变化前的大小    pWnd->GetWindowRect(&rect);  ScreenToClient(&rect);//将控件大小转换为在对话框中的区域坐标  //    cx/m_rect.Width()为对话框在横向的变化比例  rect.left=rect.left*cx/m_rect.Width();//调整控件大小  rect.right=rect.right*cx/m_rect.Width();  rect.top=rect.top*cy/m_rect.Height();  rect.bottom=rect.bottom*cy/m_rect.Height();  pWnd->MoveWindow(rect);//设置控件大小  }  }

ok,在onsize函数里边,主要是这两句:pWnd = GetDlgItem(IDC_STATIC_PLAYCTL); ChangeSize(pWnd, cx, cy,false);,其中IDC_STATIC_PLAYCTL是我项目中的一个picture控件,利用GetDlgItem获取该控件的句柄,然后调用ChangeSize函数实现具体的调整。

ChangeSize函数里边的代码注释也很详细,我就不解释了。这样做以后,运行发现确实能实现想要的效果。无论是最大化还是你随意的伸缩窗体,各个控件均能很良好的实现相应的调整。但是我实验的时候,由于我写的是一个播放器,中间很大一块是一个Picture控件,下面是一些控制按钮。刚开始的时候,我没有太关心onsize函数里边每个控件被调用的顺序,此时我的Picture控件不是最后一个被调用,所以最大化的时候发现当Picture控件已经最大化后,位于它之后的一些按钮控件便会在原来的位置闪烁几下,才调整到最终的位置。于是我改变了调用的顺序,将picture控件最后调用,正如代码中的那样,于是没有出现刚才的现象了。

但是,这种方法有一个缺点,就是会闪屏。你想啊,每个控件调整自己的大小以适应新窗口的大小是有先后顺序和执行时间的。从最初的状态到最终的状态中,控件在不断变化位置,于是产生了闪屏。这是我自己的理解。好在影响不是特别大,所以更好的方法我就没有再接着找寻了。但肯定有更好的方法,如果控件太多,中间转换的时间还是很可观的。可能闪屏现象就会更严重一点。

拙见。小记。

相关文章:

4场直播,哈工大、亚马逊等大咖为你带来机器学习与知识图谱的内容盛宴

机器学习和知识图谱是当今技术领域的热门话题,随着相关技术的不断发展,无论是对两类技术单独的探讨,还是将机器学习和知识图谱相结合的尝试,都在吸引越来越多的关注。5月16日下午,来自亚马逊、墨奇科技、Second State、…

【失败的尝试】C++中使用string进行switch判断

贴出错误代码&#xff1a; #include <iostream>#include <string>using namespace std;void main(){ string str; cin>>str; switch(str) { case "ab": cout<<"one"<<endl; break; case &…

springmvc 拦截器、国际化、验证

2019独角兽企业重金招聘Python工程师标准>>> springmvc 拦截器 继承了HandlerIntercepter的类可以作为拦截器类&#xff1a; package com.yawn.intercepter;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import o…

由MessageBox和AfxMessageBox的使用异同所感

我记得刚开始学图形界面编程的时候&#xff0c;接触的最早的一个函数应该就是MessageBox,之前都一直是控制台程序&#xff0c;突然能运行蹦出一个对话框感觉还是很新鲜的。当时还利用MessageBox写一些恶搞程序&#xff0c;利用上面的yes or no 按钮进行判断等等。但是说实话感觉…

iRobot的30年成长史

作者 | Colin Angle译者 | 苏本如&#xff0c;编辑 | 郭芮题图视觉中国出品 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;建造一个漫游者&#xff0c;把它送上月球&#xff0c;出售电影版权。这是我们在1990年开始iRobot时的第一个商业模式&#xff0c;我们…

iPhone开发:通过NSURLRequest获得服务器返回的http header和http status

HTTP连接的头信息包括在NSHTPURLResponse类中。如果你拥有一个NSHTTPURLResponse变量&#xff0c;你可以通过发送allHeaderFields信息&#xff0c;轻而易举地获取以NSDictionary形式保存的头信息。对于一个同步请求 – 由于会引发阻塞所以不推荐使用 – 是很容易初始化一个NSHT…

今天开始记录自己苹果开发博客旅程!~

做ios开发也蛮久了&#xff0c;现在才想到要自己开个博客&#xff0c;然后记录点自己平时工作学习中遇到的各种问题以及解决后的心得。现在公司的app第一个版本已经上线了&#xff0c;更加期待以后的发展和更迭。还记得刚进公司接受项目时那种忐忑不安的心理&#xff0c;现在想…

一步一步实现扫雷游戏(C语言实现)(三)

使用WIN32API连接窗口 此项目相关博文链接 一步一步实现扫雷游戏&#xff08;C语言实现&#xff09;(一&#xff09; 一步一步实现扫雷游戏&#xff08;C语言实现&#xff09;(二) 一步一步实现扫雷游戏&#xff08;C语言实现&#xff09;(三) 一步一步实现扫雷游戏&#xff08…

关于模态对话框和非模态对话框的创建、显示,以及和父对话框的传值

当然网上关于这方面的技术博文非常多&#xff0c;此处我只是进行一下小记&#xff0c;再加一点自己的体会&#xff0c;方便以后查询。 一、模态对话框 1.创建及显示 模态对话框是一种阻塞式的对话框&#xff0c;即没有处理完该对话框&#xff0c;不能对其他地方进行操作。比…

《评人工智能如何走向新阶段》后记(再续25)

415&#xff0c;开发近红外光激发的纳米探针&#xff0c;监测大脑深层活动&#xff0c;理解神经系统功能机制。 开发、设计电压敏感纳米探针一直是个技术难关。 群体神经元活动的在体监测是揭示神经系统功能机制的关键。 近日《美国化学会志》期刊报导一项新的研究成果&…

sftp 限制用户登陆指定目录(家目录)

sftp 限制用户登陆指定目录(家目录)本文源地址http://blog.chinaunix.net/uid-42741-id-3069880.html即限制 sftp 用户登陆后&#xff0c;只能在家目录下活动&#xff0c;不能到其他或上级目录该功能需要4.8以上版本[rootbackup ~]# ssh -VOpenSSH_5.3p1, OpenSSL 1.0.1e-fips …

C#多线程学习

任何程序在执行时&#xff0c;至少有一个主线程。在.net framework class library中&#xff0c;所有与多线程机制应用相关的类都是放在System.Threading命名空间中的。如果你想在你的应用程序中使用多线程&#xff0c;就必须包含这个类。 Thread类有几个至关重要的方法&#x…

开启一个新的终端并执行特定的命令

我的项目中有利用到远程控制&#xff0c;从windows端远程控制linux端&#xff0c;那么也就是接收远程的命令并在本机执行并返回结果。在父进程中用到popen()函数&#xff0c;popen()函数通过创建一个管道&#xff0c;调用fork()产生一个子进程&#xff0c;执行一个shell以运行命…

《评人工智能如何走向新阶段》后记(再续26)

427&#xff0c;SNN机理性测试 SNN利用时空处理&#xff0c;脉冲稀疏性和较高的内部神经元带宽来最大化神经形态计算的能量效率。尽管可以在这种情况下使用常规的基于硅的技术&#xff0c;但最终的神经元突触电路需要多个晶体管和复杂的布局&#xff0c;从而限制了集成密度。论…

Android5.1.1源码 - zygote fork出的子进程如何权限降级

前言 如果不知道zygote是什么&#xff0c;或者好奇zygote如何启动&#xff0c;可以去看老罗的文章&#xff1a; Android系统进程Zygote启动过程的源代码分析所有Android应用进程都是zygote fork出来的&#xff0c;新fork出来的应用进程还保持着root权限&#xff0c;这显然是不被…

system函数

转载自此处 相关函数 fork&#xff0c;execve&#xff0c;waitpid&#xff0c;popen 头文件#includ”stdlib.h” 定义函数 int system(const char * string); 函数说明 system()会调用fork()产生子进程&#xff0c;由子进程来调用/bin/sh-c string来执行参数string字符串…

《评人工智能如何走向新阶段》后记(再续27)

439&#xff0c;彩虹一号无人机实现人类永不落地的追求 日媒&#xff1a;中国亮出杀手锏 世界各国一直在研究提高飞机的续航能力 国内研制的彩虹一号无人机采用人工智能和其他高新技术&#xff0c;飞行高度30000米&#xff0c;并终于研制成功实现人类永不落地的追求。 440&a…

使用unix工具监控cpu、内存等系统资源占用率

1&#xff09;使用 sar -u 命令监控cpu使用$ sar -u 5 512:21:15 %usr %sys %wio %idle12:21:20 54 15 13 1912:21:25 41 18 15 2712:21:30 62 20 10 912:21:35 33 11 20 3612:21:40 38 13 17 31Average 45 15 15 24%usr&#xff0d;&#xff0d;运行在用户模式下cpu的使用百分…

C# 获取图片的EXIF 信息

关于 EXIF 信息的介绍。 1 EXIF&#xff0c;是英文Exchangeable Image File(可交换图像文件)的缩写。EXIF是一种图像文件格式&#xff0c;只是文件的后缀名为jpg。EXIF信息是由数码相机在拍摄过程中采集一系列的信息&#xff0c;然后把信息放置在jpg文件的头部&#xff0c;也就…

ffmpeg录屏/摄像头/指定窗口;别名alias设置

关于ffmpeg的使用方法很多&#xff0c;我简单写一下今天我捣鼓的几个。因为我的项目中要用到录屏和录制摄像头&#xff0c;所以试了下。网上关于录制指定窗口的方法并不多&#xff0c;我也是找了好久&#xff0c;试了好久才试出来的。 好了&#xff0c;废话不多说&#xff0c;…

黄聪:BackGroundWorker解决“线程间操作无效: 从不是创建控件的线程访问它” (C# VS2008)...

在编程中经常会遇到在一个按钮中执行复杂操作&#xff0c;并将复杂操作最后返回的值加入一个ListView或ComboBox中候选。这个时候程序会卡&#xff0c;当程序员将这些卡代码放进线程(Thread)中后发现当对控件操作时出现“线程间操作无效: 从不是创建控件的线程访问它”异常。 …

AWS 中国宁夏和北京区正式上线 Amazon SageMaker,中国用户终于能用到新工具和功能!

2020年 5 月 12 日&#xff0c;亚马逊云服务 Amazon Web Services, Inc. (AWS) 宣布&#xff0c;Amazon SageMaker 在由西云数据运营的 AWS 中国 (宁夏) 区域和光环新网运营的 AWS 中国&#xff08;北京&#xff09;区域正式上线。 Amazon SageMaker 在中国的上线使中国用户获…

Ubuntu Vim YouCompleteMe 安装

0. 必要工具安装 sudo apt-get install build-essential cmake 1. 安装 vundle mkdir ~/.vim/bundle git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle 2.编辑 .vimrc set nocompatible " be iMproved, required filetype off …

ubuntu vsftpd虚拟用户配置/ubuntu12.04上搭建vsftpd服务示例linux

转自这里 在ubuntu中安装完vsftpd后&#xff0c;安装libdb4.6-util: 复制代码 代码示例: sudo apt-get install db4.6-util 在etc下面建立目录vsftpd, 创建一个txt文档&#xff0c;比如logins.txt&#xff0c;在其中输入用户名及密码,如: 复制代码 代码示例: test 12345…

云从完成超过18亿元新一轮融资,加快上市步伐

近日&#xff0c;云从科技完成新一轮融资&#xff0c;总规模超过18亿元人民币&#xff0c;投资方除了中国互联网投资基金、上海国盛、广州南沙金控、长三角产业创新基金等政府基金外&#xff0c;还包括工商银行、海尔金控等产业战略投资者&#xff0c;进一步强化“AI国家队”的…

input core input.c (1)

drivers/input/input.c 就是所谓的input的核心程序。 分析这个文件&#xff0c;先从input_init开始。 1: static int __init input_init(void) 2: { 3: err class_register(&input_class); 4: err input_proc_init(); 5: err register_chrdev(INPUT_MAJOR, "i…

Swift解读专题四——字符串与字符

2019独角兽企业重金招聘Python工程师标准>>> Swift解读专题四——字符串与字符 一、引言 Swift中提供了String类型与Characters类型来处理字符串和字符数据&#xff0c;Swift中的String类型除了提供了许多方便开发者使用的方法外&#xff0c;还可以与Foundation框架…

非模态对话框的销毁

前面写过一篇关于模态和非模态对话框的文章&#xff0c;关于模态对话框和非模态对话框的创建、显示&#xff0c;以及和父对话框的传值 。文章末尾我遗留了一个问题&#xff0c;即当销毁非模态对话框后&#xff0c;需要置创建该非模态对话框的指针为NULL,但是具体是怎么操作呢&a…

LAMP兄弟连PHP课程学习笔记 第二天 PHP中使用变量

2019独角兽企业重金招聘Python工程师标准>>> 一、变量的介绍 变量&#xff1a;是指临时储存值的容器&#xff0c;这个值可以是数字或者文本或者其他组合。可以在程序使用的过程中更改。 二、变量的声明 1、如果用到的数据需要多次被调用时就声明为变量&#xff0c;P…

清华孵化,打造智能驾驶感控平台,超星未来获千万A轮融资

2020年5月14日&#xff0c;智能驾驶初创企业北京超星未来科技有限公司今天宣布已完成数千万元A轮融资&#xff0c;由恒大高科技领投&#xff0c;中关村前沿基金、和米资本、宝钜投资及图灵创投进行跟投。本轮融资将帮助超星未来在人才端和研发端持续投入&#xff0c;通过软硬件…