[Win32]简单的滚动条文本输出

本文详细介绍了在Win32环境下处理文本输出时遇到的空间不足问题,提出通过响应WM_SIZE消息高效获取客户区尺寸。同时,讨论了滚动条的创建、范围设置、滑块位置调整以及滚条消息的处理,特别强调了SB_THUMBTRACK和SB_THUMBPOSITION消息在滑块拖动过程中的作用。最后,提到了滚动条在子窗口中的特殊情况及其通知码定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 文本输出时空间不足的问题:

在上一个例子中屏幕明显不够大,而Windows只能简单地从客户区顶部显示那些信息,只能依赖把落在客户区之外的部分剪裁掉


2. 客户区尺寸大小的高效获取办法:

如果每次需要使用客户区尺寸时都调一次GetClientRect效率会非常低,因此获取该尺寸最佳的时机就是在响应WM_SIZE消息的时候,每当客户区形状或大小发生改变时就会产生WM_SIZE消息,而其附加参数wParam的低16位和高16位分别保存即时的窗口宽和高,因此可以声明两个静态变量来保存宽和高,这样就可以在任何消息响应中共享该变量了:

static int		cxClient, cyClient;

#define LOWORD(l)           ((WORD)(l))
#define HIWORD(l)           ((WORD)(((DWORD)(l) >> 16) & 0xFFFF))

case WM_SIZE:
	cxClient = LOWORD( lParam );
	cyClient = HIWORD( lParam );
	return 0;
其中LOWRD和HIWORD宏定义在windef.h中

通常在响应WM_SIZE消息之后会立即产生一个WM_PAINT消息,因为类风格重定义了CS_HREDRAW | CS_VREDRAW,一旦窗口形状大小发生改变则需要重绘!


3. 滚动条的简介:

创建滚动条:在CreateWindow的时候添加Window Style参数WS_VSCROLL(垂直滚动条)或WS_HSCROLL(水平滚动条)

!客户区并不包含滚动条所占用的空间

滚条的使用方法:


设置滚动条的范围:

BOOL SetScrollRange( // 设定滚条的范围
	HWND	hWnd,    // 滚条所属窗口
	int		nBar,    // 设置的是哪个滚条,SB_VERT(垂直滚条)或SB_HORZ(水平滚条),SB表示Scroll Bar  
	// Windows用一组整数值表示滚条的范围
	int		nMinPos, // 位置最小值
	int		nMaxPos, // 位置最大值  
	BOOL	bRedraw  // TRUE表示滚条要重绘否则不需要立即重绘
	);
滑块的位置总是离散值,一个范围为0 ~ 4的滚条总共有5个位置:


设置滑块的位置:

int SetScrollPos( HWND hWnd, int nBar, int nPos, BOOL bRedraw );

其中第3个参数就是指定滑块的位置,必须处于nMin和nMax范围内!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值