Windows学习笔记8——文字输出<二>
来源:互联网 发布:电脑打开软件迟钝 编辑:程序博客网 时间:2024/05/13 05:51
1、卷动列
<1>、 在Windows应用程序中包含卷动列的方法:
CreateWindow的第三个参数(dwStyle):包含窗口风格标识WS_VSCROLL(垂直卷动),WS_HSCROLL(水平卷动)。
<2>、卷动列的范围与位置
*每个卷动列都有一个范围和位置的概念。
*范围:由一对整数组成,分别代表最小值和最大值;位置:卷动方块在范围内的值。
*当卷动方块在卷动列的顶部(或左端)时,卷动方块的位置是范围的最小值;当卷动方块咋卷动列的底部(或最右端)时,卷动方块的位置是范围的最大值。内定的卷动范围是0到100;
*卷动方块的位置总是离散的整数值。
*改变卷动列的范围可调用:SetScrollRange(hwnd, iBar, iMin, iMax,bRsdraw);
*得到卷动列的当前范围:GetScrollRange函数;
*在卷动列范围内设置卷动方块的位置:SetSrcollPos(hwnd,iBar,iPos, bRedraw);
*得到卷动方块的当前位置:GetScrollPos函数;
<3>、Window系统对卷动列的处理:
*处理所有卷动列鼠标事件;
*当使用者在卷动列内点击鼠标时,提供一种“反相显示”的闪烁;
*当使用者在卷动列内拖动卷动方块时,移动卷动方块;
*为包含卷动列的窗口的窗口过程发送卷动列消息;
程序写作者应该完成的工作:
*初始化卷动列的范围和位置;
*处理窗口过程的卷动列消息;
*更新卷动列内卷动方块的位置;
*更新显示区域的内容以回应卷动列的改变;
<4>、卷动列消息:
在用鼠标单击卷动列或者拖动卷动方块时,Windows给窗口过程发送WM_VSCROLL(汞上下移动)或WM_HSCROLL(供水平移动)。在卷动列上每个鼠标动作都至少产生两个消息,鼠标按下,鼠标弹起;
WM_VSCROLL和WM_HSCROLL消息的两个参数,lParam只用于作为子窗口而建立的卷动列(通常在对话框内),wParam参数被分为一个低字组和一个高字组。
wParam的低字组是一个数值,它指出鼠标对卷动列进行的操作,也称“通知码”。(是以SB(scroll bar)打头的识别字);在wParam的低字组是“SB_THUMBPOSITION”或“SB_THUMBTRACK”时,wParam的高字组指定卷动方块的当前位置;对于其他的卷动列操作,wParam的高字组应该被忽略。
注意SB_THUMBTRACK和SB_THUMBPOSITION通知码:
*为了给使用者提供回馈,Windows在用户用鼠标拖动卷动方块时移动它,同时你的程序会收SB_THUMBTRACK消息,但是,如果程序写作者不通过调用SetScrollPos来处理SB_THUMBTRACK或SB_THUMBPOSITION消息,在使用者释放鼠标键时,卷动方块会迅速跳回原来位置。
*程序一般不同时处理SB_THUMBTRACK和SB_THUMBPOSITION消息,如果处理SB_THUMBTRACK消息,在使用者拖动卷动方块时,程序写作者移动显示区域的内容;但是如果处理SB_THUMBPOSITION消息,则只需要在使用者停止拖动卷动方块时移动显示区域的内容。
<5>、作为应用程序窗口一部分的卷动列(通过指定CreateWindow的第三个参数而建立的),永远不会接收到SB_TOP 、SB_BOTTOM、SB_LEFT、SB_RIGHT通知码。
<6>、应用举例
case WM_VSCROLL:
switch(LOWORD(wParam))
{
case SB_LINEUP:
scrollPos -= 1;
break;
case SB_LINEDOWN:
scrollPos += 1;
break;
case SB_PAGEUP:
scrollPos -= cyClient/cyChar;
break;
case SB_PAGEDOWN:
scrollPos += cyClient/cyChar;
break;
case SB_THUMBPOSITION:
//SetScrollPos(hwnd, SB_VERT, HIWORD(wParam), TRUE);//设置卷动方块的位置为当前拖动到的位置
scrollPos = HIWORD(wParam);
break;
default :
break;
}
<7>、绘图程序的组织
*最好在窗口过程响应WM_PAINT消息时,进行显示区域的绘图;如果需要在代码其他地方绘制显示区域,可以使用InvalidateRect函数使显示区域无效(它会发送WM_PAINT消息到消息队列);
*如果希望在显示区域无效后,立刻更新显示区域,可以在调用InvalidateRect函数之后调用UpdateWindow函数,如果显示区域中存在无效区域,则UpDateWIndow将导致Windows用WM_PAINT消息调用窗口过程,注意:这一WM_PAINT消息不进入消息队列,直接由Windows调用窗口过程,然后返回控制到UpdateWindow之后的代码。
2、Win32API中的新函数——卷动列资源函数
SetScrollRange、SetScrollPos、GetScrollRange、GetScrollPos函数是过时的,但仍可以使用;
下面介绍功能更强大的SetScrollInfo和GetScrollInfo。
SetScrollRange和GetScrollInfo 更加的新功能:
*可以改变卷动方块的大小
近似公式: 卷动方块的大小/卷动列的长度
= 页面大小/范围
= 显示的文件数量/文件的总大小
*更加卷动列的范围最大为真正的32位值
注意:卷动方块的大小与页面大小正相关,(SCROLLINFO结构中的nPage值)
<1>、函数原型:
int SetScrollInfo(HWND hwnd, int fnBar, LPSCROLLINFO lpsi, BOOL fRedraw);
BOOl GetScrollInfo(HWND hwnd, int fnBar, LPSCROLLINFO lpsi);
参数:
hwnd:滚动条控件句柄或含有标准滚动条的窗口的句柄,这取决于fnBar参数的值;
fnBar:可以是SB_CTL、SB_HORZ、SB_VERT之一;当为SB_CTL时,获取滚动条控件参数,此时hwnd参数必须是滚动条控件句柄。
lpsi:SCROLLINFO结构指针;
fRedraw:重绘标志。
<2>、注意PAINTSTRUCT结构中的rcPaint参数,这是需要重绘的矩形区域,其坐标相对于客户区。
PAINTSTRUCT ps;
ps.rcPaint.top 或ps.rcPaint.bottom,可以在绘图时灵活使用这些重绘矩形的相关信息。
<3>、关于重绘区域(右图阴影区域)
- Windows学习笔记8——文字输出<二>
- Windows程序设计学习笔记二——输出文字及滚动列
- Windows学习笔记7——文字输出<一>
- windows编程学习笔记(3)输出文字
- windows程序设计——输出文字
- 《Windows程序设计》读书笔记之二——输出文字与滚动条使用
- windows程序设计笔记__输出文字1
- 【C++】学习笔记二十八——文件输入/输出
- Python学习笔记(二)—输入和输出
- GDI学习笔记 输出文字与图形
- 《Windows程序设计》读书笔记------------->>文字输出——多行文字<<
- Windows程序设计——第四章《输出文字》要点摘要
- windows学习笔记二
- Windows程序设计:文字输出
- Windows程序设计-输出文字
- Windows学习笔记4——窗口与消息<二>
- Windows学习笔记10——图形基础<二>
- Windows学习笔记13——键盘相关<二>
- 关于CInternetSession缓存问题
- BMP图像的选择与显示
- delphi messagebox 弹出信息提示框大全
- 程序出错,谁能给我找出错误的所在
- Tomcat 启动报错The APR based Apache Tomcat Native l...
- Windows学习笔记8——文字输出<二>
- javascript 浏览器类型判断
- 执行应用程序出现: No such file or directory
- 编译器为啥出现了这种问题?
- PHP中$_FILES的使用及注意事项 (
- Java图形化界面设计——容器(JFrame)
- 一个较好的socket 类
- MFC中显示像素值保存在二维数组中的BMP图像
- 新人学c,求助%5.2f含义