滚动条笔记

来源:互联网 发布:淘宝付费流量免费流量 编辑:程序博客网 时间:2024/05/13 17:26

  关于滚动条:

  首先肯定还是头文件,窗口过程函数,主函数。

  主函数中,首先定义窗口句柄HWND,窗体类名,类型为WNDCLASS,同时为了以后使用的方便,可以在此定义一个字符串,类型为TCHAR,作为以后的窗体名。然后是一个消息循环的定义,类型为MSG。

  接下来进入窗体类的具体定义,定义之后调用RegisterClass注册窗体类,此时必须注意使用与之前定义的类名相同的名称。注册之后,开始利用之前申明的窗口句柄创建一个窗体,此时调用CreateWindow函数创建窗体类。注意此时应该利用WS_VSCROLL或者WS_HSCROLL添加滚动条。成功创建窗体之后,可以使用ShowWindow显示窗口,然后紧接着利用UpdateWindow更新窗口。

窗体此时创建完毕,接下来进入消息的循环。通常我们利用while(GetMessage())来判断消息循环是否结束。其中可能用到TranslateMessage和DisptchMessage();

 

  接下来进入程序的重点,那就是窗口消息处理函数WindowProc。

进入WindowProc,首先定义一个设备描述表的句柄HDC,TEXTMETRIC可定义字体信息,然后利用TCHAR创建一个字符数组,PAINTSTRUCT定义一个画图的结构,循环次数i和字体的各种信息,比如字体高度,字体宽度,平均宽度,行距等等。还有一个Int型变量记录滚动条图块的位置。

  然后进入消息的循环。利用switch(uMsg),可以分别对不同的消息传递采取不同的对策。比如WM_CREATE消息。此时,可以通过GetDC()获取设备描述表的句柄,同时记得ReleaseDC必须和它同步使用。在GetDC和ReleaseDC之间,可以利用GetTextMetrics()获取字体信息。并利用之前所申明的字体实例,通过调用tmHeight等函数来获得一系列的字体消息,包括最大高度,平均高度,字符间距等等。然后利用SetScrollRange()设置滚动条的范围,利用SetScrollPos()获取滚动条的小图块的位置。

  当传进来的消息是WM_SIZE消息的时,我们可利用HIWORD获取窗口过程函数定义中的lParam参数的高字节,以此来赋值给显示的最大高度。利用LOWORD获取lParam参数的低字节,以此赋值给最大宽度。当消息传入的是WM_VSCROLL时,我们可继续使用一个switch(LOWORD(wParam))语句来判断传入的滚动条消息具体是什么。(参数为窗口过程处理函数中的wParam的低字节)其中传入的滚动条命令可能是SB_LINEUP,SB_LINEDOWN,SB_PAGEUP,SB_PAGEDOWN,SB_THUMBPOSITION等信息。此后为了不然鼠标的范围超过滚动条的范围,可用if语句判断并修改,以确保不会越界,当传入的是WM_PAINT消息时,我们可以使用BeginPaint获取窗体句柄,并开始绘制图形。此时应该记得用EndPaint来结束绘制。其中BeginPaint和EndPaint只能在WM_PAINT消息中使用,并且他们总是成对使用的。在BeginPaint和Endpaint之间,我们开始输出文字,利用for()循环输出,利用wsprintf()格式化输出格式,利用函数TEXTOUT()输出文字。然后当传入的是WM_DESTROY消息的时候,通过调用PostQuitMessage()销毁窗口,然后结束消息循环,并且退出程序。

 

  然后返回值。程序结束。