| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 676 人关注过本帖
标题:求教 SDK 窗口 滚动条设置 几个语句的作用!!!!!!!!
只看楼主 加入收藏
missu_1314
Rank: 2
等 级:论坛游民
帖 子:46
专家分:98
注 册:2010-9-8
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:5 
求教 SDK 窗口 滚动条设置 几个语句的作用!!!!!!!!

case WM_VSCROLL:
{
si.cbSize = sizeof(si);         //此语句必须设置为 结构体的大小  
si.fMask  = SIF_ALL;               // 此语句 设置 和 后面的那一条语句 有什么联系??? 如果没有联系的话 有什么作用??
GetScrollInfo(hwnd, SB_VERT, &si);   // 此 语句我的理解为 把窗口垂直滚动条信息  存入si结构体变量中


iVertPos = si.nPos;   // 此语句 保存刚才得到的窗口滚动条位置 到 iVertPos 变量中



//下面的语句是 通过接收到的消息,改变si.nPos的值,
switch ( LOWORD(wParam))           
{
case   SB_TOP:
     si.nPos  = si.nMin;
     break;

case    SB_BOTTOM:
    si.nPos   = si.nMax;
    break;

case   SB_LINEUP:
    si.nPos  -= si.nPos;
    break;

case    SB_LINEDOWN:
    si.nPos  +=  si.nPos;
    break;

case    SB_PAGEUP:
    si.nPos   -=   si.nPage;
    break;

case    SB_PAGEDOWN:
    si.nPos    +=    si.nPage;
    break;

case    SB_THUMBPOSITION:
    si.nPos    =  si.nTrackPos;
    break;

default:
break;
}


// 下面这3句的作用是什么?? 我理解的  通过刚才上面的保存原来的位置 ,再通过接收滚动条消息改变原来si.nPos的值,再比较两个值,
//改变的话就滚动更新窗口, 不改变的话不不变,,  这3句没有多大作用 , 百思不得其解,,谁可以帮我解释下。。
si.fMask = SIF_POS;                        
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
GetScrollInfo(hwnd, SB_VERT, &si);


// 和 原来保存的滚动条位置 进行比较,, 不同就滚动窗口, 相同就不处理
if ( si.nPos != iVertPos)      
{
    ScrollWindow(hwnd, 0, cyChar * (iVertPos - si.nPos), NULL, NULL);
    UpdateWindow(hwnd);
}

return 0;
}




上面的 绿色注释 为我的理解,  觉得应该没有什么问题,, 红色注释的地方 有问题, 还请各位大大帮忙 解惑!!! 谢谢


[ 本帖最后由 missu_1314 于 2012-5-10 18:01 编辑 ]
搜索更多相关主题的帖子: 结构体 信息 位置 
2012-05-10 18:00
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
说下我的理解不知对不对
1.在使用GetScrollInfo & SetScrollInfo 之前要知道所需的参数信息是什么 所以要首先写si.cbSize = sizeof(si);         si.fMask  = SIF_ALL 或者 POS PAGE RANGE TRACKPOS DISABLENOSCROLL中的一个或几个。
2.
si.fMask = SIF_POS; // 指定要复制的信息
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);// 有检查和设置的作用
GetScrollInfo(hwnd, SB_VERT, &si);// 取得滚动后的位置
貌似把si.fMask = SIF_POS;注释掉没影响 但是SetScrollInfo(hwnd, SB_VERT, &si, TRUE);和前面的si.fMask = SIF_ALL 不能去掉。

梅尚程荀
马谭杨奚







                                                       
2012-05-10 19:59
missu_1314
Rank: 2
等 级:论坛游民
帖 子:46
专家分:98
注 册:2010-9-8
收藏
得分:0 
以下是引用有容就大在2012-5-10 19:59:36的发言:

 说下我的理解不知对不对
1.在使用GetScrollInfo & SetScrollInfo 之前要知道所需的参数信息是什么 所以要首先写si.cbSize = sizeof(si);         si.fMask  = SIF_ALL 或者 POS PAGE RANGE TRACKPOS DISABLENOSCROLL中的一个或几个。
2. si.fMask = SIF_POS; // 指定要复制的信息
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);// 有检查和设置的作用
GetScrollInfo(hwnd, SB_VERT, &si);// 取得滚动后的位置
貌似把si.fMask = SIF_POS;注释掉没影响 但是SetScrollInfo(hwnd, SB_VERT, &si, TRUE);和前面的si.fMask = SIF_ALL 不能去掉。
case WM_VSCROLL:
{
si.cbSize = sizeof(si);         
si.fMask  = SIF_ALL;               
GetScrollInfo(hwnd, SB_VERT, &si);

iVertPos = si.nPos;  
 
switch ( LOWORD(wParam))           
{
case   SB_TOP:
     si.nPos  = si.nMin;
     break;

case    SB_BOTTOM:
    si.nPos   = si.nMax;
    break;

case   SB_LINEUP:
    si.nPos  -= si.nPos;
    break;

case    SB_LINEDOWN:
    si.nPos  +=  si.nPos;
    break;

case    SB_PAGEUP:
    si.nPos   -=   si.nPage;
    break;

case    SB_PAGEDOWN:
    si.nPos    +=    si.nPage;
    break;

case    SB_THUMBPOSITION:
    si.nPos    =  si.nTrackPos;
    break;

default:
break;
}

si.fMask = SIF_POS;                        
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);
GetScrollInfo(hwnd, SB_VERT, &si);

if ( si.nPos != iVertPos)      
{
    ScrollWindow(hwnd, 0, cyChar * (iVertPos - si.nPos), NULL, NULL);
    UpdateWindow(hwnd);
}

return 0;
}

上面代码,, 去掉红色代码后, 滚动条功能感觉没有什么变化! 你知道它的作用吗??   我知道大概的是 比较原来滚动条位置 和 变动后的位置,, 如果不一样 就重新设置,, 问题是: 为什么删除后表现出来功能还是一样? 它是预防什么样的情况发生儿进行处理?

蓝色 那句代码 是不能删除的, 有点像老兄说的, 是必须要写得, 因为不写,滚动条的  拖动鼠标滚动功能不能用,, 但点击滚动条上下的 箭头还是可以更新内容的.
 
2012-05-10 22:17
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:20 
SetScrollInfo(hwnd, SB_VERT, &si, TRUE);还在
他把si.nPos重置了

为什么删除后表现出来功能还是一样?  应该和WM_PAINT有关系。

梅尚程荀
马谭杨奚







                                                       
2012-05-11 12:11
missu_1314
Rank: 2
等 级:论坛游民
帖 子:46
专家分:98
注 册:2010-9-8
收藏
得分:0 
查了一上午 资料,, 说得都不是很清楚, 先就这样理解吧,, 等以后学得多了再回头看说不定已经不是问题啦  谢谢
2012-05-11 13:08
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
我现在是能用 能运行下来就成 哈哈

梅尚程荀
马谭杨奚







                                                       
2012-05-11 13:43
快速回复:求教 SDK 窗口 滚动条设置 几个语句的作用!!!!!!!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023665 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved