【转】VC限制窗口大小

vc窗口自由调整大小的实现 本篇主要是基于Easysize的使用,具体Easysize代码下载和详细的英文说明,大家可以看这里,这里主要谈使用后的具体细节说明1,将在对话框的属性里设置 边框可调整大小的2,在主窗体cpp添加 #include EasySize.h ,也可以按照原创的方法添加到 stdafx.h中 3,在定义主窗体的地方class CEasySizeDemoDlg : public CDial 阅读详情

原文:http://hi.baidu.com/wentao/blog/item/d1ae76c6bd04f5139c163d50.html

 

其实方法很多的,这里列出几个比较常见的方法来,
这里是以SDI的框架窗口为例子来试验的。

1.创建一个最大化的窗口,并且不能改变其大小

那么首先,

app的InitInstance中  
在原来pMainFrame->ShowWindow(m_nCmdShow);  
                  的前面加上  
   
DWORD   dwStyle   =   GetWindowLongm_pMainWnd->m_hWnd,   GWL_STYLE);  
// dwStyle   &=   ~(WS_SIZEBOX);  
dwStyle   &=   ~(WS_MAXIMIZEBOX);  
dwStyle   &=   ~(WS_MINIMIZEBOX);  
SetWindowLong(m_pMainWnd->m_hWnd,   GWL_STYLE,   dwStyle);  


m_pMainWnd->ShowWindow(SW_SHOWMAXIMIZED);  
   
然后把m_pMainWnd->ShowWindow(m_nCmdShow);可以删了

这里我把dwStyle   &=   ~(WS_SIZEBOX);注释调了,因为把这个属性去掉的话,会产生麻烦,就是我这个窗口最大话显示的时候,
会把任务栏也遮了,靠,实在是另人郁闷
但是如果不把这个属性去掉的话,那么通过拖拉,还是可以改变这个窗口的大小的,那怎么办呢,
真伤脑筋阿,换个思路吧

一般窗口大小的改变,都是用户拖动窗口边框而造成的。所以,我们可以截获主窗口消息WM_NCHITTEST在其响应函数中判断CWnd::OnNcHitTest()的返回值是否为HTRIGHT,HTLEFT,HTTOP,HTBOTTOM四个值之一,如果是,说明用户此时已点击了四个边框之一,此时我们应该返回HTCLIENT.那么,鼠标的形状就不会变成水平或垂直的双向箭头,用户就不可能依靠拖动边框来改变窗口大小了。

用class wizard看了以下,竟然没有找到WM_NCHITTEST这个消息,郁闷,只能手动添加消息映射了

在BEGIN_MESSAGE_MAP(CMainFrame, CMDIFrameWnd)下添上
ON_WM_NCHITTEST()

在框架类的头文件下
声明
afx_msg UINT OnNcHitTest(CPoint point);

实现

UINT CMainFrame::OnNcHitTest(CPoint point)
{
     if(CWnd::OnNcHitTest(point) == HTRIGHT || CWnd::OnNcHitTest(point) == HTLEFT || CWnd::OnNcHitTest(point) == HTTOP || CWnd::OnNcHitTest(point) == HTBOTTOM)
       return HTCLIENT;

      return CWnd::OnNcHitTest(point);
}
这样好了吗,没
这只是限制了四条边,虽然不能拖拉四条边了,但是四个角阿呢,郁闷,真麻烦

再加上
HTTOPLEFT
HTTOPRIGHT
HTBOTTOMLEFT  
HTBOTTOMRIGHT

这样4边+4角,靠,看你怎么玩

圆满了吗??
没,还缺一点点 ,缺什么
双击窗口最上方也就是caption区域时窗口会变小,而且没办法回复
怎么办??
凉拌………………

有办法的啦

添加ON_WM_NCLBUTTONDBLCLK消息  
   
void   CMainFrame::OnNcLButtonDblClk(UINT   nFlags,   CPoint   point)  
{  
          if(nFlags   !=   HTCAPTION)  
              CFrameWnd::OnNcLButtonDblClk(nFlags,   point);  
}    
   
手动添加一下  
WM_NCLBUTTONDBLCLK  
这个消息的处理  
   
记得BEGIN_MESSAGE_MAP  
那边要加  
ON_WM_NCLBUTTONDBLCLK

这也是手动添加了消息映射,处理以下,ok,搞定,手工


2.创建一个不可改变大小的窗口,
哦,yeah,这个简单了

app的InitInstance中  
在原来pMainFrame->ShowWindow(m_nCmdShow);  
                  的前面加上  
   
DWORD   dwStyle   =   GetWindowLong(m_pMainWnd->m_hWnd,   GWL_STYLE);  
dwStyle   &=   ~(WS_SIZEBOX);  

SetWindowLong(m_pMainWnd->m_hWnd,   GWL_STYLE,   dwStyle);  


m_pMainWnd->ShowWindow(SW_SHOW);  

如果还想把最大,最小话窗口去掉,再加上这个
dwStyle   &=   ~(WS_MAXIMIZEBOX);  
dwStyle   &=   ~(WS_MINIMIZEBOX);
把 (WS_SIZEBOX)去掉以后,我们就不能改变窗口大小了,

当然,也可以用WM_NCHITTEST的方法了


3.限制窗口的大小范围

响应WM_GETMAXMININFO 的消息

处理之
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
// TODO: Add your message handler code here and/or call default

lpMMI->ptMinTrackSize.x   = 100 ;  
   lpMMI->ptMinTrackSize.y   = 100 ;  
   lpMMI->ptMaxTrackSize.x   = 200 ;  
    lpMMI->ptMaxTrackSize.y   = 200;  


CFrameWnd::OnGetMinMaxInfo(lpMMI);
}

这样的话,窗口就被我框死啦,嘿嘿
长和宽的范围都是100-200

当然
MINMAXINFO这个结构体内容也是非常丰富的,可以做的事很多,具体可以察msdn了。

VC 窗口大小 限制窗口大小 VC 窗口大小 限制窗口大小  其实方法很多的,这里列出几个比较常见的方法来,这里是以SDI的框架窗口为例子来试验的。1.创建一个最大化的窗口,并且不能改变其大小那么首先, app的InitInstance中     在原来pMainFrame->ShowWindow(m_nCmdShow);                     的前面加上         DW 阅读详情

相关推荐

VC中创建不可改变大小的窗口,及其限制窗口大小的办法

VC 窗口大小 限制窗口大小   其实方法很多的,这里列出几个比较常见的方法来, 这里是以SDI的框架窗口为例子来试验的。 1.创建一个最大化的窗口,并且不能改变其大小 那么首先,  app的InitInstance中      在原来pMainFrame->ShowWindow(m_nCmdShow);                     

xjbclz的专栏 3152

VC++ 限制窗口的大小范围的方法

响应WM_GETMAXMININFO 的消息。长和宽的范围都是100-200。这样的话,窗口就被我框死啦。

506

VC限制窗口最大化时的窗体大小

摘要:VC/C++源码,界面编程,限制最大化  VC++限制最大化窗口时的窗体大小,最大化时候不是全部显示,而是按照指定大小来显示,在有些信息管理系统中,需要这么做。源码简洁可读性大,特别是VC的新手们更应该关注。

使用VC6.0实现窗口的任意分割

使用VC6.0实现窗口的任意分割南京邮政局计算机中心 张中庆一、关于CSplitterWnd类 我们在使用CuteFtp或者NetAnt等工具的时候,一般都会被其复杂的界面所吸引,在这些界面中窗口被分割为若干的区域,真正做到了窗口的任意分割。 那么我们自己如何创建类似的界面,也实现窗口的任意的分割呢 ?在VC6.0中这就需要使用到CSplitterWnd类。CSplitte

ysotn的专栏 1972

本地服务器搭建Uptime Kuma网站监控服务

本文主要介绍如何在Linux系统中一键部署Uptime Kuma运维监控服务,并将这个服务映射至公网实现随时随地远程访问。如果您像我一样在服务器上托管了多个网站,并且没有足够的时间来手动检查每个网站的在线状态,那么当出现问题时,您可能无法及时收到通知来处理这些问题。因此,搭建一个在线监控服务是很有必要的,它可以在状态异常时提醒您,以便您能够及时处理问题,确保网站的稳定性和可用性。监控服务有很多,我最终选择了Uptime Kuma,因为Uptime Kuma是开源免费的,

Tiam_cr的博客 1822

Rockchip rv1126平台在gstreamer1中添加OpenCv实现视频流负片的效果

rv1126 gstreamer opencv negetive effect

Aisy_D的专栏 1463

[MFC]Dialog窗口大小调整控制OnSize/OnSizing

参考:http://www.360doc.com/content/08/1210/09/799_2090143.shtml 参考:MSDN 0. 启用对话框为可调节对话框 在对话框 属性->外观-->Border,选择Resizing 1.对话框的大小限制,预想好允许用户调整的大小范围,通常下限为我们自认为需要确保的大小信息 MinWidth = ;

春夜喜雨的专栏 2万+

手把手教你用 Docker 构建自己的 CentOS 基础镜像

目录一、准备CentOS基础镜像二、撰写Dockerfile三、构建Docker镜像四、生成Docker容器 相信码农们经常会听说:虚拟机将成为历史,Docker才是未来 !!! 事实如此,现在大部分公司都在用 Docker 技术,想拥有自己的 Docker 专属镜像,那么 Dockerfile 就是入门,现在让我们一起来看一下 ------ 构建 Docker 镜像的全过程。 好文章 记得收藏...

Nick.Peng's Blogs 1万+

VC窗口自由的调整大小的实现

VC窗口自由的调整大小的实现。具体代码和详细的英文说明,大家可以看原文,本篇是使用后的具体细节说明。 1,将在对话框的属性里设置 边框可调整大小的 2,在主窗体cpp添加 #include EasySize.h ,也可以按照原创的方法添加到 stdafx.h中 3,在定义主窗体的地方 以下是引用片段: class CEasySizeDemoDlg : public CD

youyongyoumou的专栏 2997

如何编译RustDesk(Unbuntu 和Android版本)

备注:官方文档上,一边都是基于sciter,这个在后面已经不建议使用了,但是依然可以编译刚开始的时候看官方的文档,涉及的东西比较多,也搞的一头雾水,通过B站上一个视频,可以通过CI/CD来编译,以及act本地试试(最终放弃,大概需要下载大几十G的容器下来)。最终总算明确了方向,可以用自动化流水线来编译。直接看CI/CD的脚本文件文件在.github/workflows目录下,重点研究 bridge.yml 和flutter-build.yml 这两个文件。

lvronglee的专栏 2547

抖音小程序开发 唤起收银台支付(可以选择支付宝APP支付或微信H5支付)

什么都别说,先看效果: 字节跳动也开放了小程序给商家接入,可以在旗下APP如抖音、今日头条、今日头条极速版等应用中即点即用,基于庞大的数亿用户量为其引流,帮助商家获取用户流量,销售商品,其模式和微信小程序差不多。 1、后台管理地址: https://developer.toutiao.com/ 2、开发文档地址: https://developer.toutiao.com/dev/cn/min...

悟空码字的博客 1万+

VC禁止或允许拖拽改变窗口尺寸

1 使用MFC:PreCreateWindow中添加:   固定大小:cs.style=WS_OVERLAPPED   |   WS_SYSMENU   |WS_MINIMIZEBOX   ;   可改变大小,把如上改为: cs.style=WS_OVERLAPPED   |   WS_SYSMENU   |WS_MINIMIZEBOX   |   WS_THICKFRAME;  这样的窗口

sha_jinhao的专栏 1万+

手把手教你用gmid方法设计二级运放:从理论到仿真全流程(附避坑指南)

本文详细介绍了使用gmid方法设计二级运放的全流程,从理论到仿真实践,特别针对初学者常见问题提供避坑指南。通过系统化的晶体管尺寸确定技术,帮助工程师在性能、功耗和面积之间找到最佳平衡点,适用于模拟集成电路设计中的关键模块开发。

weixin_29213525的博客 271

VC编程小技巧之框架窗口及其他

1.修改主窗口风格 AppWizard生成的应用程序框架的主窗口具有缺省的窗口风格,比如在窗口标题条中自动添加文档名、窗口是叠加型的、可改变窗口大小等。要修改窗口的缺省风格,需要重载CWnd::PreCreateWindow(CREATESTRUCT& cs)函数,并在其中修改CREATESTRUCT型参数cs。CWnd::PreCreateWindow函数先于窗口创建函数执...

dinaoju5134的博客 218

SimpleITK使用——1. 进行Resample/Resize操作

文章目录1. 变换到一个新的spacing1.1 使用Resample()的方法1.1.1 完整代码1.1.2 转换前后图像1.2 使用ResampleImageFilter()的方法2. 已知原图和变换后目标图像的大小2.1 代码2.2 转换后图像3. 相关内容说明3.0 体素和spacing3.1 Resample() 函数说明3.2 itk::simple::ResampleImageFilter函数说明 1. 变换到一个新的spacing 1.1 使用Resample()的方法 1.1.1

啷个哩个啷 8079

【YOLOv8科研级优化】基于YOLOv9的GELAN模块重构C2f结构,实现精度与效率的同步提升

打开确保模型解析器能识别GELANBlock模块。通过将YOLOv9的GELAN模块集成到YOLOv8的C2f模块中,我们实现了一个“强特征表达+高效计算”的目标检测模型。这个改进不仅在工程上能提升复杂场景下的检测效果,更在科研上提供了“多分支特征融合”的创新思路——这种思路可以延伸到其他检测网络(如Faster R-CNN、SSD)的改进中,帮你在论文中打造独特的研究点。

know_F0727的博客 201

vc窗口编程

1. 如何改变窗口的图标?    向窗口发送 WM_SECTION消息。   Example:    HICON hIcon=AfxGetApp() ->LoadIcon(IDI_ICON);    ASSERT(hIcon);    AfxGetMainWnd() ->SendMessage(WM_SECTION,TRUE,(LPARAM) hIcon); 2. 如何改变窗口的缺省风格?  

(RING~~~)Arrgghh! For the last time, I'm a Developer, not a Detector! 1104

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

VC限制程序窗口的变化大小

 处理WM_GETMINMAXINFO消息(在找到这个消息,需要在classwizard的class info页中把message filter改成window)void CAboutDlg::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) {    // TODO: Add your message handler code here and/or call def

学习、学习、再学习 449

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

使用VC6.0实现窗口的任意分割(转)

 一、关于CSplitterWnd类我们在使用CuteFtp或者NetAnt等工具的时候,一般都会被其复杂的界面所吸引,在这些界面中窗口被分割为若干的区域,真正做到了窗口的任意分割。 那么我们自己如何创建类似的界面,也实现窗口的任意的分割呢 ?在VC6.0中这就需要使用到CSplitterWnd类。CSplitterWnd看上去像是一种特殊的框架窗口,每个窗口都被相同的或者不同

ydr001ml的专栏 549

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

VC窗口限制最小高度的问题解决总结

  前几天在修改公司的软件界面的时候,发现通过调整窗口矩形大小: CRect rect; rect.left = 0; rect.right = 400; rect.top = 0; rect.bottom = 100; childWnd.MoveWindow(&rect);   通过这种方式去将窗口的大小进行设置的时候,发现在对应的childWnd的OnS...

weixin_34249678的博客 181
上一篇: 【转】在主线程中慎用WaitForSingleObject或WaitForMultipleObjects
下一篇: 【转】MFC中使菜单变灰
code09
博客等级 码龄18年 31粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值