WTL的CScrollContainer

WTL:如何利用滚动窗口ScrollWnd查看图片Image 这个问题说起来简单,做起来难。 虽然说是WTL,但我想MFC应该没有太大差别。 关键点:ScrollWindow,MoveWindow。 首先看ScrollWnd。 class ScrollWnd : public CWindowImpl //MFC中直接继承CWnd,WTL的精髓就是模板 { private: const int LINE; //定义移动的距离 public 阅读详情

最近碰到要根据已定义的模板动态创建控件的难题,需求如下:

1. 提供几种可输入的数据类型,每个类型对应一种控件用来输入该类型

2. 可自定义输入模板,某个模板包括1种或几种数据类型

blog.youkuaiyun.com/flyback

由上面的需求可以得出结论,要实现的功能是可以动态创建各种输入控件并把它们排列在一起。

动态创建控件没啥问题,只是控件多了以后怎么办?应该需要一个可以上下滚动的窗口显示动态创建的控件

万能的网络没有告诉我答案,它只说要有光,于是就有了光,我说要有上下滚动的窗口,于是...什么都没有发生。

blog.youkuaiyun.com/flyback

过程:

1. 窗口本身是可以通过SetStyle(WS_xxx...)设置滚动条的,但是需要自己根据滚动条发出的事件对控件的位置进行调整,这个网上是有的,但是实现得比较琐碎,不愿看,可能也比较容易出错

2. 用别人的控件,网上没找到,有显示图片的,不合适

3. 用wtl自带的, 网上只说有这个东西,至于怎么用,没有人发例子,可能好简单

4. 于是只能自己上,自己好简单一下,留个念想


解题:

atlscrl.h 里

WTL有个实现模板叫做CScrollWindowImpl

template <class T, class TBase = ATL::CWindow, class TWinTraits = ATL::CControlWinTraits>
class ATL_NO_VTABLE CScrollWindowImpl : public ATL::CWindowImpl<T, TBase, TWinTraits>, public CScrollImpl< T >


CScrollImpl模板类WTL已经给我们实现了所有需要操作滚动条的功能,用的话就用一个特化的类 CScrollContainer


class CScrollContainer : public CScrollContainerImpl<CScrollContainer>
{
public:
	DECLARE_WND_CLASS_EX(_T("WTL_ScrollContainer"), 0, -1)
};
// blog.youkuaiyun.com/flyback

它是一个容器,那么就需要给它加上容器的内容,这个容器可以设置内容的大小,这样看来就相当于容器的大小是一个窗口,而内容的大小就是滚动条的滚动范围

所以:

在自己的窗口上加上两个对象


CScrollContainer	m_wndParameters;
CInternalWnd		m_wndInternal;	

m_wndParameters是容器,而m_wndInternal就是容器要显示的内容

class CInternalWnd:public CWindowImpl<CInternalWnd> 你懂的

初始化:

m_wndParameters.Create(m_hWnd, &rt, 0, WS_VISIBLE|WS_CHILD|WS_BORDER|..., ..., ...);
m_wndParameters.ShowWindow(SW_SHOW);
m_wndParameters.UpdateWindow();
// blog.youkuaiyun.com/flyback

rt是容器的大小,即要显示的窗口大小

那么,因为我们要动态创建窗口控件,所以需要选择合适的时机创建内容窗口

RECT rt = {0};
::GetWindowRect(GetDesktopWindow(), &rt);
m_wndInternal.Create(m_wndParameters.m_hWnd, &rt, "", WS_VISIBLE|WS_CHILD/*|WS_CLIPCHILDREN|WS_CLIPSIBLINGS*/);
m_wndInternal.SetParent(m_wndParameters.m_hWnd);
m_wndInternal.ShowWindow(SW_SHOW);
m_wndInternal.UpdateWindow();
SIZE sz = {0};
sz.cy = rt.bottom; // 设置内容的高度和屏幕显示的高度一样,其实不一定够
m_wndParameters.GetClientRect(&rt);
sz.cx = rt.right;
m_wndParameters.SetClient(m_wndInternal.m_hWnd);
m_wndParameters.SetScrollSize(sz);
// blog.youkuaiyun.com/flyback


完鸟!




自定义控件滚动条操作(一) 一.说明 当你的窗口范围比要显示的内容的范围小的时候, 就可以使用滚动条了. 1.1 这是控件的大小(GetClientRect函数可获得)   1.2 内容需要显示的范围   1.3 增加滚动条 如果控件可以再显示内容上滚动, 那么就可以显示全部内容了. 理解: A.     整个滚动条代表了”显示内容的范围”(红色框部分), 滚动块(滚动条中的红色块)代表了”控 阅读详情

相关推荐

非客户区自绘WTL版本

标题栏自绘是很多初学者最苦恼的问题,目前网上的例子要么是系统默认的标题按钮时不时的会重现出来,要么是影响了窗口非客户区原来默认的行为(去掉系统菜单)等等,各种的不如意,于是本人研究试验了下,感觉这个是比较完美的了,不影响任何原来窗口的特性,比如标题栏系统菜单等,要么是把非客户区去掉了,然后自己模拟,笔者也有这样处理过,不过这里只演示非客户区标题栏绘制的例子,代码简单易学

在WTL中利用滚动窗口类CScrollWindowImpl显示BMP图片

之前我也写了一篇用滚动窗口类显示图片的博客: http://blog.youkuaiyun.com/zhoujielunzhimi/article/details/7899735 本文与之不同,上面的这个滚动窗口具有通用性,比如滚动窗口可以装载控件,但是比较繁琐的是滚动参数需要自己去控制。 下面要介绍的是利用WTL的类CScrollWindowImpl来完成,这个类只是用来显示图片,对于控件暂不知(个人

周洁伦之谜_相信我 3025

delphi android发送与接收广播

在发送广播时,使用`SendBroadcast`函数,并传入广播的Action。在接收广播时,创建一个继承自`TAndroidBroadcastReceiver`的类,并在`onReceive`方法中处理接收到的广播。然后,使用`RegisterBroadcastReceiver`函数注册广播接收器,并在`UnregisterBroadcastReceiver`函数中取消注册。请注意替换示例代码中的`YOUR_ACTION`为实际的广播Action。// 处理接收到的广播。

GuoGuoABC 1207

WTL自绘滚动控件

关于学习版源码索取: satng@qq.com 转载于:https://my.oschina.net/u/158055/blog/694485...

chenkai5182的博客 181

小白跑WRF第三天,安装三方依赖库

小白跑WRF第三天,安装三方依赖库各类安装包的准备 各类安装包的准备 官网教程:https://www2.mmm.ucar.edu/wrf/OnLineTutorial/compilation_tutorial.php 根据官网教程需要的安装包有以下几个 系统环境 用途 zlib-1.2.7 zlib是提供数据压缩用的函式库。 netcdf-4.1.3 读nc文件的。 mpich-3.0.4 用于并行运算的工具。 libpng-1.2.50 libpng是一款C语言编写的比较底层

weixin_42372313的博客 1万+

利用Virtuoso IC 618进行LDO稳定性分析与补偿设计

本文详细介绍了如何利用Virtuoso IC 618进行LDO稳定性分析与补偿设计。通过搭建仿真环境、运行STB分析诊断环路问题,并深入探讨密勒补偿、调零电阻等关键技术,帮助工程师在Virtuoso平台中高效完成LDO的稳定性优化与验证,确保芯片在各种工艺角下的鲁棒性。

weixin_29170327的博客 162

一些细碎的注意点

最近项目开始忙起来了,不能像之前每天发好几篇博客了,那就开一篇文章记录一下平时遇到的一些问题,供以后参考。问题1:一个继承自COwnerDraw的重绘控件无法正常绘制原因:在使用此控件的Dialog中,漏掉了REFLECT_NOTIFICATIONS() ,此函数能够反射消息给控件处理。 问题2:WTL下,建立了一个Dialog,通过OnSize和SetFullScreen等方法都

TracyZhongcf的专栏 3545

CTF-Web学习笔记:服务端请求伪造(SSRF)篇

本文系统介绍了CTF比赛中SSRF漏洞的攻防技术。首先解析了SSRF的核心原理,即利用服务器对用户输入URL的未校验缺陷,诱导其访问内网资源。然后详细分析了5类常见CTF题型:文件读取、内网探测、云服务元数据窃取、协议绕过及组合漏洞利用。重点讲解了绕过URL过滤、利用特殊协议(如dict://、gopher://)等实战技巧,并通过一道SSRF+Redis的高阶题目演示完整攻击链。最后给出防御建议:严格校验输入URL、禁用危险协议、实施内网隔离等。

Deng7326的博客 1688

wtl界面3

WM_CONTEXTMENU处理右键环境菜单. 命令栏CCommandBarCtrl控件,有TrackPopupMenu方法,与win32的TrackPopupMenuEx一样. BOOL CCommandBarCtrlImpl::TrackPopupMenu(HMENU hMenu, UINT uFlags, int x, int y,LPTPMPARAMS lpParams = NULL) 使用前,加载菜单资源.有CMenu和CMenuHandle两个类. LRESULT CMainFrame::On

个人进步之路 617

USB通讯速度翻倍秘诀:手把手教你用WinUsb替代HID协议(附Zadig驱动配置图解)

本文详细介绍了如何通过WinUsb技术替代传统HID协议,实现USB通讯速度的显著提升。从技术对比、实现原理到Zadig驱动配置图解,手把手教你完成免驱高速通讯方案,适用于数据采集、固件升级等场景,实测速度可达HID协议的2倍以上。

weixin_29168675的博客 133

STM32实战开发(65):STM32摄像头图像采集开发教程

我们将会详细介绍如何使用STM32进行摄像头控制、图像数据采集以及如何将采集到的图像数据传输到其他设备进行处理。通过这篇博客,您将能够掌握STM32与摄像头模块的图像采集技术,应用于各种图像处理场景。为了确保STM32能够正确接收图像数据,我们需要配置STM32的GPIO引脚,并通过外部中断捕获这些信号。为了实现更高效的图像采集,可以通过DMA进行数据传输,将图像数据直接从GPIO引脚存储到内存中。通过DMA传输,我们可以将采集到的图像数据直接存储在内存中的一个缓冲区,然后进行后续的图像处理。

2201_76125393的博客 2537

[WTL/Win32]_[初级]_[如何设置ListView的列宽不出现水平滚动条]

1. 开发`WTL/Win32`的程序时,经常会用到表格控件`CListViewCtrl`。这个控件需要设置列的宽度,当用完`100%`的宽度来平均分配给列宽时,一加载数据多,就会出现垂直滚动条后,水平滚动条也会同时出现的问题。怎么设置才能让水平滚动条不出现?

小白 1158

Python学习第1天:初识Python

Python 作为目前最流行的编程语言之一,凭借其简洁优雅的语法和强大的生态系统,成为了无数开发者的首选。本系列文章将带你从零基础入门,逐步掌握 Python 编程的核心技能。今天我们先来认识 Python,并安装好开发环境。Python(英式发音:/ˈpaɪθən/;美式发音:/ˈpaɪθɑːn/)是由荷兰人吉多·范罗苏姆(Guido von Rossum)发明的一种编程语言,是目前世界上最受欢迎和拥有最多用户的编程语言。

tigerhhzz的博客 433

wtl,9到10版的改进

wtl,9到10的改进

个人进步之路 777

【100%通过率】华为OD机试真题 Python【数字最低位排序】【最低位排序】

2023华为OD机试真题 Python【数字最低位排序】【最低位排序】 给定一个非空数组(列表) 起元素数据类型为整型 请按照数组元素十进制最低位从小到大进行排序 十进制最低位相同的元素,相对位置保持不变 当数组元素为负值时,十进制最低为等同于去除符号位后对应十进制值最低位

MISAYAONE的博客 1901

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

wtl中滚动条

<br />C++<br />http://www.codeproject.com/KB/wtl/CustomListCtrl.aspx<br /> <br /> <br />WTL:<br />http://blog.youkuaiyun.com/cheungmine/archive/2010/01/11/5178854.aspx

快慢机的地盘 1217

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

ScrollContainer和PageIndicator的使用

FB 手机项目初始必做 1  新建手机项目 2  在XXX-app.xml修改 S3list   -->   cn.jonny.S3list portrait direct 3  启动方法-AIR模拟器---Apple iPad 4 项目-属性-ActionScript构建路径  项目接口 WApp.create_one_building RefreshCommand 5 有

3481

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

WTL 给一个对话框添加垂直滚动条

1.消息映射宏: MESSAGE_HANDLER(WM_VSCROLL, OnVscroll) MESSAGE_HANDLER(WM_SIZE, OnSize) MESSAGE_HANDLER(WM_MOUSEWHEEL, OnMouseWheel)2.在OnInitDialog里获取窗口的实际大小,以及初始化滚动条位置: ::GetWindowRect(m_hWnd, &m_wndRect); ScreenToClient(&m_wndRect); m_nScrollPos =

Keep It Simple, Stupid 3062

WTL: CPaneContainerImpl 源代码分析

我用过这个类,尽管对它并不是很清楚。在分割窗口或者TAB窗口

xianlaowu的专栏 988

=WM_VSCROLL(消息反射) 和 WM_VSCROLL(消息响应)的区别

=WM_VSCROLL(消息反射) 和 WM_VSCROLL(消息响应)的区别 所谓消息反射就是控件拥有者自己不处这个理消息,而是反射给控件对象本身来处理这个消息 1、“=WM_VSCROLL”是消息反射标志  , WM_VSCROLL是 消息响应的标志,在VC6.0的ClassWizard中注意会发现这两个不同的消息,VS2010中没有“=WM_VSCROLL”,但是

梦想博客 3905

OPC 技术文档之 OPCENUM.EXE 使用方法(vc)

在制作OPC Client 的程序的时候,常常需要浏览目标服务器的所有OPC Server方法有两个: 一是通过 IOPCAutoServer 的GetOPCServers方法得到(这个比较简单,这里不讨论)。 二是通过 OPCEnum.exe 提供的 IOPCServerList 接口的 EnumClassesOfCategories 方法实现。俺在搜索 www.google.com 的时候似乎

魔芋的专栏 1万+
上一篇: 批量修改图形文件的对比度和锐度,python 2.7
下一篇: 在mac中安装cocos2d 3.0alpha,建立第一个工程MyGame
魔芋
博客等级 码龄26年 37粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值