当前位置: 首页 > news >正文

考古:MFC界面的自适应缩放(代码示例)

        MFC窗体的控件的自适应缩放早期VS开发环境是不支持的,后来VS开发环境提供了支持但也简单,或者固定的缩放比例不符合要求。我一向坚持一个理念:“不支持缩放的窗口不是好窗口”,所以需要有一个自定义的缩放处理。机制不复杂,就是重载OnSize处理窗口大小变化。

        这是对话框的OnSize,MFC会自动生成这个函数的框架:

void CMyDlg::OnSize(UINT nType, int cx, int cy) 
{CDialog::OnSize(nType, cx, cy);// TODO: Add your message handler code hereswitch(nType){case SIZE_MAXIMIZED:break;case SIZE_RESTORED:break;case SIZE_MINIMIZED:ShowWindow(SW_HIDE);break;default:return;}MoveCtrl(cx,cy);//这个函数是自己写的,重新设定控件位置
}

        MoveCtrl是自己定义的函数,在里面重新计算布局,设置空间位置即可。之所以要写成个函数,是因为这个函数在OnInitDialog里也需要执行一次,以便完成初始布局,这样设计对话框的时候就不用那么精确了,控件随便摆一下就行了。

        OnInitDialog的处理:

	RECT rect;//初始化控件 GetClientRect(&rect);MoveCtrl(rect.right, rect.bottom);

        因为子控件都是基于父窗口的客户区的,所以用对话框的客户区的大小为基准来设置子控件。

        这是MoveCtrl的一个示例:

int CProxyDlg::MoveCtrl(int cx, int cy)
{RECT rect;//工具栏,顶if(IsWindow(m_MainToolBar)){m_MainToolBar.MoveWindow(0,0,cx,toolbarhigh);}//系统,中,左if(IsWindow(m_Tab_Sys.m_hWnd) && IsWindow(m_Tree_Sys.m_hWnd) && IsWindow(m_Tree_User.m_hWnd)){rect.left=bdry;rect.right=bdry+tabsyswide;rect.top=toolbarhigh;rect.bottom=cy-statehigh;m_Tab_Sys.MoveWindow(&rect);m_Tab_Sys.GetWindowRect(&rect);m_Tab_Sys.SendMessage(TCM_ADJUSTRECT,(WPARAM)FALSE,(LPARAM)&rect);ScreenToClient(&rect);m_Tree_Sys.MoveWindow(&rect);m_Tree_User.MoveWindow(&rect);}//当前连接,中,右if(IsWindow(m_Tree.m_hWnd)){rect.left=bdry+tabsyswide+sepwide;rect.right=cx-bdry;rect.top=toolbarhigh;rect.bottom=cy-statehigh;m_Tree.MoveWindow(&rect);}//状态栏,底if(IsWindow(m_Static_State.m_hWnd)){rect.left=0;rect.right=cx;rect.top=cy-statehigh;rect.bottom=cy;m_Static_State.MoveWindow(&rect);}return 1;
}

        主要用到IsWindow来判断控件是否已经创建、MoveWindow来移动控件,其余就是各种布局计算。

        有兴趣可以自己写一套布局类,不过真正理想的界面除了自适应缩放,还应该能拉伸调整,这就困难些了,别的高级语言或类库,直接提供了split面板,不用自己写。

(这里是结束)

相关文章:

考古:MFC界面的自适应缩放(代码示例)

MFC窗体的控件的自适应缩放早期VS开发环境是不支持的,后来VS开发环境提供了支持但也简单,或者固定的缩放比例不符合要求。我一向坚持一个理念:“不支持缩放的窗口不是好窗口”,所以需要有一个自定义的缩放处理。机制不复杂&#x…...

计算机网络 | 物理层

计算机网络 | 物理层 计算机网络 | 物理层基本概念数据通信基本知识(一)一个数据通信流程的例子数据通信相关术语三种通信方式数据传输方式串行传输和并行传输同步传输和异步传输 小结 数据通信基本知识(二)码元(Symbo…...

Centos下编译ffmpeg动态库

文章目录 一、下载ffmpeg安装包二、编译ffmpeg三、安装yasm 一、下载ffmpeg安装包 下载包 wget http://www.ffmpeg.org/releases/ffmpeg-4.4.tar.gz解压 tar -zxvf ffmpeg-4.4.tar.gz二、编译ffmpeg 进入解压的目录 cd ffmpeg-4.4编译动态库 ./configure --enable-shared…...

深度学习:UserWarning: The parameter ‘pretrained‘ is deprecated since 0.13..解决办法

深度学习:UserWarning: The parameter ‘pretrained’ is deprecated since 0.13 and may be removed in the future, please use ‘weights’ instead. 解决办法 1 报错警告: pytorch版本:0.14.1 在利用pytorch中的预训练模型时&#xff0…...

leetcode-279. 完全平方数

1. 题目链接 链接: 题目链接 2. 解答 #include <stdio.h> #include <stdlib.h> #include <stdbool.h>bool issquare(int n) {if (n 1 || n 4) return true;if (n 2 || n 3) return false;for (int i 3; i < n/2; i ) {if (n i*i) return true;}…...

MySQL常用指令

创建新的数据库 1、创建新的数据库 create database YOLO;显示本地创建的数据库 2、显示本地创建的数据库 show databases;进入新创建的数据库 3、进入新创建的数据库 use YOLO;在新创建的数据库内添加表&#xff08;表内插入内容&#xff09; 4、创建表并添加表内容 creat…...

Pulsar 之架构,客户端以及多区域容灾

Pulsar 之架构&#xff0c;客户端以及多区域容灾 架构BrokersClusters元数据存储配置存储区持久存储Apache BookKeeperLedgersLedgers读一致性托管Ledgers 日志存储 Pulsar 代理服务发现 Pulsar client(客户端)客户端设置阶段Reader interface 多区域容灾备份(GEO-REPLICATION)…...

【SQL】MySQL中的索引,索引优化

索引是存储引擎用来快速查询记录的一种数据结构&#xff0c;按实现方式主要分为Hash索引和B树索引。 按功能划分&#xff0c;主要有以下几类 单列索引指的是对某一列单独建立索引&#xff0c;一张表中可以有多个单列索引 1. 单列索引 - 普通索引 创建索引&#xff08;关键字i…...

uniapp 跳转到指定位置

this.$router.push({name: Demo,params: {id: 123} })这样就实现了页面的跳转&#xff0c;并且将参数id传递给了Demo组件。 如果需要跳转到当前页面的不同位置&#xff0c;我们可以使用锚点来实现。锚点是一个HTML元素的标识符&#xff0c;可以用于定位和跳转到该元素。例如&a…...

基于java的图书馆预约座位系统的设计与实现(部署+源码+LW)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于java的图书馆预约座…...

golang 拉取 bitbucket.org 私有库

以 bitbucket.org 平台和mac电脑为例 前置条件私库需要给你账号权限&#xff0c;可拉取的权限&#xff0c;否则无法进行正常拉取 我们采用ssh方式&#xff0c;需要在本地生成对应的 rsa 的公钥和私钥&#xff0c;将公钥配置如下图&#xff1a; 在 .ssh/config 写入你的配置 H…...

Sub-1G射频收发器soc芯片 UM2080F32 低功耗 32 位 IoTP

UM2080F32是基于 ARM Cortex M0 内核的超低功耗、高性能的、单片集成 (G)FSK/OOK 无线收发机的 32 位SOC 芯片。 UM2080F32 工作于200MHz~960MHz 范围内&#xff0c;支持灵活可设的数据包格式&#xff0c;支持自动应答和自动重发功能&#xff0c;支持跳频操作&#xff0c;支持 …...

国际减灾日 | 智慧减灾——百分点科技的数据科学视角

国际减轻自然灾害日简称“国际减灾日”&#xff0c;由联合国于1989年设立&#xff0c;旨在关注全球灾害风险&#xff0c;呼吁各国政府、组织和个人积极参与减灾工作&#xff0c;以保护人民生命财产安全。今年10月13日是第34个国际减灾日&#xff0c;主题为“共同打造有韧性的未…...

ChatGLM流式输出的报错修复

ChatGLM中的openai_api.py中的代码如下&#xff1a; # codingutf-8 # Implements API for ChatGLM2-6B in OpenAIs format. (https://platform.openai.com/docs/api-reference/chat) # Usage: python openai_api.py # Visit http://localhost:8000/docs for documents.import …...

HDLbits: ece241 2013 q12 // Exams/m2014 q4k

两道题目&#xff0c;有一样的问题&#xff1a; 第一道&#xff1a;ece241 2013 q12 下面的代码错误&#xff0c;一直没看出来哪里有问题&#xff1a; module top_module (input clk,input enable,input S,input A, B, C,output Z ); reg [7:0] q;dff dff_1(clk,enable,S,q[…...

vue3模板-vscode设置(语法糖)

选择菜单里的 文件 > 首选项 > 用户代码片段 vscode模板 {"Print to conaole":{"prefix": "v-ts", //在新建立的页面中输入C就会有智能提示&#xff0c;Tab就自动生成好了"body": ["<template>"," <…...

RFID超高频读写器的特点和应用

RFID读写器根据不同的工作频段可以分为高频读写器和超高频读写器&#xff0c;高频读写器通常在13.56Mhz频段工作&#xff0c;超高频读写器一般在860-960M Hz频段工作。下面我们就来为大家详细介绍一下&#xff0c;超高频读写器的特点和实际应用。 超高频读写器的工作原理 超高频…...

诡异事件:开发的安卓摄像头应用突然不能保存图片,回滚代码都查不出来

昨天对摄像头应用进行了大规模修改&#xff0c;在一个工程中&#xff0c;同时编译两个app。一番辛苦工作之后&#xff0c;成功。进行了测试&#xff0c;发现诡异的事情&#xff1a;照相无法保存&#xff01; 那怎么办&#xff1f;赶紧增加搞权限&#xff0c;没用。 逐个版本回滚…...

validator库的使用详解

目录 基本使用前言请求模型的定义编写接口及测试 翻译校验错误提示信息自定义错误提示信息的字段名自定义校验规则常见的参数校验字段 基本使用 前言 在做API开发时&#xff0c;需要对请求参数的校验&#xff0c;防止用户的恶意请求。例如日期格式&#xff0c;用户年龄&#x…...

ADS版图中连接提示线设置

ADS版图连接提示线设置 简述solve 简述 在ADS版中连接提示线设置&#xff0c;如下图1所示&#xff0c;有点类似于AD中“金线”&#xff0c;提示同一网络的焊盘&#xff0c;但在ads中&#xff0c;是产生了同一层的wire&#xff0c;证据如图2所示。如果没有设置的话&#xff0c;…...

如何用tiny11builder打造轻量Windows 11系统:绕过硬件限制的完整指南

如何用tiny11builder打造轻量Windows 11系统&#xff1a;绕过硬件限制的完整指南 【免费下载链接】tiny11builder Scripts to build a trimmed-down Windows 11 image. 项目地址: https://gitcode.com/GitHub_Trending/ti/tiny11builder 老旧电脑无法流畅运行Windows 11…...

Z-Image-Turbo_Sugar脸部Lora效果增强:ControlNet+Lora联合调控Sugar脸部结构

Z-Image-Turbo_Sugar脸部Lora效果增强&#xff1a;ControlNetLora联合调控Sugar脸部结构 想生成那种又纯又欲、甜度爆表的Sugar风格脸部图片吗&#xff1f;是不是经常遇到模型生成的脸型不够精致、五官比例失调&#xff0c;或者风格不够统一的问题&#xff1f;今天&#xff0c…...

从RNN到Mamba:一个算法工程师的‘长文本’建模踩坑与选型指南

从RNN到Mamba&#xff1a;一个算法工程师的‘长文本’建模踩坑与选型指南 当处理长达数万token的日志序列时&#xff0c;传统RNN的梯度消失问题让模型难以捕捉跨时段的异常模式&#xff0c;而Transformer的二次方复杂度又让显存迅速耗尽。这种困境促使我开始系统评估结构化状态…...

边缘计算中的存储挑战与解决方案

边缘计算中的存储挑战与解决方案 背景 作为一个专注于存储架构的技术人&#xff0c;我一直在关注边缘计算的发展。最近团队在部署边缘计算解决方案时&#xff0c;遇到了许多存储相关的挑战。为了帮助团队更好地理解和解决这些挑战&#xff0c;我决定写这篇实践指南。 边缘计算的…...

Android崩溃分析进阶:结合addr2line与IDA Pro精准定位SO文件崩溃点

1. 从崩溃日志到问题定位&#xff1a;为什么SO文件这么难缠&#xff1f; 每次看到Android应用崩溃日志里出现"signal 11 (SIGSEGV)"这种字样&#xff0c;我就知道今晚又要加班了。特别是当崩溃发生在SO文件中时&#xff0c;那种无力感就像在漆黑的房间里找一根掉落的…...

【限时开放】CPython核心团队亲授:2026 Python原生AOT编译接入Checklist(含12个预编译hook校验点)

第一章&#xff1a;Python原生AOT编译方案2026的演进背景与核心价值近年来&#xff0c;Python在云原生、边缘计算与实时系统场景中的部署瓶颈日益凸显&#xff1a;CPython解释器的启动延迟、内存开销及运行时JIT缺失&#xff0c;严重制约了其在低延迟服务、嵌入式Python模块和安…...

拆解Lite-HRNet的‘轻量’魔法:ShuffleBlock与CCWBlock如何省下80%算力

拆解Lite-HRNet的‘轻量’魔法&#xff1a;ShuffleBlock与CCWBlock如何省下80%算力 在计算机视觉领域&#xff0c;高分辨率网络&#xff08;HRNet&#xff09;因其出色的特征保持能力而备受推崇&#xff0c;但随之而来的计算成本却让许多实际应用望而却步。Lite-HRNet的出现&a…...

Drone流水线进阶玩法:用.drone.yml实现多阶段构建+钉钉通知(2023最新版)

Drone流水线进阶实战&#xff1a;多阶段构建与智能通知全链路设计 当你的团队从单体架构转向微服务时&#xff0c;CI/CD流水线会突然变得复杂起来。上周我接手的一个电商项目就遇到了典型问题&#xff1a;每次代码提交后需要同时处理Java后端的Maven构建、前端Node.js打包、Doc…...

AI的正规方程法与梯度下降法的比较研究

...

别再只用四线制SPI了!用菊花链连接多个传感器,Arduino引脚不够的救星

菊花链SPI&#xff1a;突破Arduino引脚限制的多传感器连接方案 当你在智能温室项目中需要同时监测温度、湿度和光照强度&#xff0c;却发现Arduino Uno的GPIO引脚已经捉襟见肘时&#xff0c;传统四线制SPI的局限性就暴露无遗。每个新增的传感器都意味着多占用一个宝贵的片选引…...