被ScrollWindow折腾出来的——关于区域、重画、无效、WM_PANIT等

本文探讨了ScrollWindow函数的参数和工作原理,分析了它如何影响窗口的重画过程。当ScrollWindow导致某些区域滚动消失,这些区域会变成无效区域,触发WM_PAINT消息,但并非所有区域都会重画。同时,文章讨论了UpdateWindow、BeginPaint、InvalidateRect等相关函数在重画和无效区域管理中的作用。
摘要由CSDN通过智能技术生成

 

=========================ScrollWindow原型========================
BOOL ScrollWindow(        
    HWND hWnd,
    int XAmount,
    int YAmount,
    const RECT *lpRect,
    const RECT *lpClipRect
);
参数:
xAmount 指定了水平滚动的量,使用设备单位。在左滚时,该参数必须为负。 yAmount 指定了垂直滚动的量,使用设备单位。在上滚时,该参数必须为负。
lpRect 指向一个RECT结构,指定了要滚动的客户区的部分。假如lpRect为NULL,则将滚动整个客户区。假如光标区域与滚动矩形重叠,则插字符将被重定位。
lpClipRect 指向一个RECT结构,指定了要滚动的裁剪区域。只有这个矩形中的位才会被滚动。在矩形之外的位不会被影响,即使它们是在lpRect矩形之内。(见代码"测试一")假如lpClipRect为NULL,则不会在滚动矩形上进行裁剪。(见代码"测试二")
综上,一般将lpRect和lpClipRect指向同一个RECT。(见代码"测试三")
================================我的测试程序================================

#include  < windows.h >

LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);

int  WINAPI WinMain(HINSTANCE hInstance,HINSTANCE yY,PSTR szCmdLine, int  iCmdShow)
{
 
static  TCHAR szWndClassName[] = TEXT( " yy " );
 HWND hwnd;
 MSG msg;
 WNDCLASS wndclass;

 wndclass.style
= CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
 wndclass.lpfnWndProc
= WndProc;
 wndclass.cbClsExtra
= 0 ;
 wndclass.cbWndExtra
= 0 ;
 wndclass.hInstance
= hInstance;
 wndclass.hIcon
= LoadIcon(NULL,IDI_APPLICATION);
 wndclass.hCursor
= LoadCursor(NULL,IDC_ARROW);
 wndclass.hbrBackground
=  CreateSolidBrush ( RGB( 212 , 208 , 200 ) ) ;
 wndclass.lpszMenuName
= NULL;
 wndclass.lpszClassName
= szWndClassName;

 
if ( ! RegisterClass( & wndclass)){
  MessageBox(NULL,TEXT(
" This program requires Windows NT! " ),szWndClass
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值