关于CtreeCtrl的WM_VSCROLL消息SB_THUMBPOSITION,SB_THUMBTRACK的问题

qewer1232 2013-01-29 07:34:53
今天将原有的老项目从VS2003迁移到VS2008发现该问题。
demo如下:

m_ctrltestTree.InsertItem(TEXT("test1"),TVI_ROOT);
m_ctrltestTree.InsertItem(TEXT("test2"),TVI_ROOT);
m_ctrltestTree.InsertItem(TEXT("test3"),TVI_ROOT);
m_ctrltestTree.InsertItem(TEXT("test4"),TVI_ROOT);
m_ctrltestTree.InsertItem(TEXT("test5"),TVI_ROOT);
m_ctrltestTree.InsertItem(TEXT("test6"),TVI_ROOT);
m_ctrltestTree.InsertItem(TEXT("test7"),TVI_ROOT);
m_ctrltestTree.InsertItem(TEXT("test8"),TVI_ROOT);
m_ctrltestTree.InsertItem(TEXT("test9"),TVI_ROOT);
m_ctrltestTree.InsertItem(TEXT("test10"),TVI_ROOT);
m_ctrltestTree.InsertItem(TEXT("test11"),TVI_ROOT);
m_ctrltestTree.InsertItem(TEXT("test12"),TVI_ROOT);
m_ctrltestTree.InsertItem(TEXT("test13"),TVI_ROOT);
m_ctrltestTree.InsertItem(TEXT("test14"),TVI_ROOT);
m_ctrltestTree.InsertItem(TEXT("test15"),TVI_ROOT);

HRESULT hRet = m_ctrltestTree.SendMessage( WM_VSCROLL,MAKELONG( SB_THUMBPOSITION,5), NULL);

结果并未跳转到指定的行数,感觉ctrltestTree根本没有处理此消息,在xp系统下完全正常,win7系统下,多字节版本正常,Unicode版本存在此问题,但如果是
HRESULT hRet = m_ctrltestTree.SendMessage( WM_VSCROLL,MAKELONG( SB_LINEUP,0), NULL);
HRESULT hRet = m_ctrltestTree.SendMessage( WM_VSCROLL,MAKELONG( SB_LINEDOWN,0), NULL);又是正常的,
不知有谁碰到过类似问题?
...全文
435 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
青蛙工作室 2013-02-23
  • 打赏
  • 举报
回复
我也碰到同样的问题,用的是C++Builder2009,全Unicode版。 代码是API:SendMessage(TreeView->Handle, WM_VSCROLL , SB_THUMBPOSITION|(posi<<16) ,0); 上述代码在XP系统运行正常,完全可以达到预期效果,但在Win7、Vista、2008Server都不起作用。 现象与楼主描述的完全一样。 不禁怀疑,是不是windows从Vista版本开始对TreeView组件有过改过?
qewer1232 2013-02-22
  • 打赏
  • 举报
回复
引用 5 楼 bsnry 的回复:
楼主解决么????
没有,时间紧迫,没有深究了,我后来是用SelectSetFirstVisible做的,不用消息了,MFC尽量还是用原生的API比较靠谱。
bsnry 2013-02-03
  • 打赏
  • 举报
回复
楼主解决么????
bsnry 2013-01-30
  • 打赏
  • 举报
回复
引用 3 楼 qewer1232 的回复:
引用 2 楼 sha_jinhao 的回复:和多字节属性没关系 不是已经加入TEXT了! m_ctrltestTree.SendMessage( WM_VSCROLL,MAKELONG( SB_LINEUP,0), NULL); 估计是消息出问题了! 我说的多字节是指窗体为Unicode,即::IsWindowUniCode(m_ctrltestTree.……
貌似很牛逼的问题 始终觉得与字符集环境无关, msdn对于这个消息的解释,并没有提到过会与字符集相关
qewer1232 2013-01-29
  • 打赏
  • 举报
回复
引用 2 楼 sha_jinhao 的回复:
和多字节属性没关系 不是已经加入TEXT了! m_ctrltestTree.SendMessage( WM_VSCROLL,MAKELONG( SB_LINEUP,0), NULL); 估计是消息出问题了!
我说的多字节是指窗体为Unicode,即::IsWindowUniCode(m_ctrltestTree.GetSafeHwnd()) == TRUE,在win7 + vs2008的编译环境下,Unicode版和多字节版确实存在不同的运行结果。
jimette 2013-01-29
  • 打赏
  • 举报
回复
和多字节属性没关系 不是已经加入TEXT了! m_ctrltestTree.SendMessage( WM_VSCROLL,MAKELONG( SB_LINEUP,0), NULL); 估计是消息出问题了!
bsnry 2013-01-29
  • 打赏
  • 举报
回复
引用 楼主 qewer1232 的回复:
今天将原有的老项目从VS2003迁移到VS2008发现该问题。 demo如下: m_ctrltestTree.InsertItem(TEXT("test1"),TVI_ROOT); m_ctrltestTree.InsertItem(TEXT("test2"),TVI_ROOT); m_ctrltestTree.InsertItem(TEXT("test3")……
tree view 不熟悉,但是: 很少见过模拟wm_hscroll 消息的. 我觉得与字符集环境没有关系吧

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧