求救:如何去掉动态创建ctreectrl的滚动条?

sunshinecsdn 2006-03-30 09:47:44
自己从ctreectrl继承了一个新的类,在对话框中自动创建一个树,属性里面只设置了WS_VISIBLE,如何把滚动条给去掉啊?
如题。请xdjm帮帮忙啊,搞了2天,也没有去掉,真急人。
...全文
691 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunshinecsdn 2006-03-30
  • 打赏
  • 举报
回复
我现在用的就是楼上的方法,在树创建后,添加了n条数据,然后使用movewindow将树移动到固定的位置,滚动条就显示出来了,每次根据父窗口大小移动树,滚动条都会显示出来。
Atomictry 2006-03-30
  • 打赏
  • 举报
回复
在你的继承新类,比如CTreeCtrlEx中增加这么一个接口:
void CTreeCtrlEx::Init()
{
//another way to hide scrollbars
InitializeFlatSB(m_hWnd);
FlatSB_EnableScrollBar(m_hWnd, SB_BOTH, ESB_DISABLE_BOTH);
}

然后在你的主对话框程序的OnInitDialog函数中调用:
m_TreeCtrlEx.Init(); // m_TreeCtrlEx为CTreeCtrlEx的一个实例。

再不明白,留下邮箱。
Atomictry 2006-03-30
  • 打赏
  • 举报
回复
我靠,不早说~ 5555555~
Atomictry 2006-03-30
  • 打赏
  • 举报
回复
实现:
BOOL CYourDlg::ModifyControlStyle(CTreeCtrl* pTreeCtrl,LPCTSTR lpszClassName,DWORD dwRemove,DWORD dwAdd,DWORD dwRemoveEx,DWORD dwAddEx)
{
CWnd* pParentWnd = pTreeCtrl->GetParent();

CFont* pFont = pTreeCtrl->GetFont(); // 保存TreeCtrl字体

// ... 还需要保存TreeCtrl的原来的文本,此处忽略

CRect rcWindow;
pTreeCtrl->GetWindowRect(&rcWindow);
pParentWnd->ScreenToClient(rcWindow);

DWORD dwNewStyle = (pTreeCtrl->GetStyle() & ~dwRemove) | dwAdd;
DWORD dwNewStyleEx = (pTreeCtrl->GetExStyle() & ~dwRemoveEx) | dwAddEx;

UINT nID = pTreeCtrl->GetDlgCtrlID();

pTreeCtrl->ShowWindow(SW_HIDE);
pTreeCtrl->DestroyWindow();

BOOL bResult = pTreeCtrl->CreateEx(dwNewStyleEx,lpszClassName,"",dwNewStyle,rcWindow,pParentWnd,nID);

pTreeCtrl->SetFont(pFont); // 恢复字体

// ... 此处仅仅重新对TreeCtrl赋值,你应该恢复刚才保存的文本信息
CString str;
HTREEITEM hti = pTreeCtrl->InsertItem(_T("parent"));
for (int i = 0; i < 16; i++)
{
str = _T("child");
pTreeCtrl->InsertItem(str, hti);
}
hti = pTreeCtrl->InsertItem(_T("parent2"));
for (i = 0; i < 16; i++)
{
str = _T("child2");
pTreeCtrl->InsertItem(str, hti);
}

return bResult;
}
调用:
CTreeCtrl* pTreeCtrl = (CTreeCtrl *)GetDlgItem(IDC_TREE1);
if (pTreeCtrl->GetStyle() & ES_AUTOVSCROLL)
{
ModifyControlStyle(pTreeCtrl, "SysTreeView32", TVS_NOSCROLL, 0, 0, 0);
}
else
{
ModifyControlStyle(pTreeCtrl, "SysTreeView32", 0,TVS_NOSCROLL, 0, 0);
}

如果想做到通用其他控件,可以用模板实现。
lixiaosan 2006-03-30
  • 打赏
  • 举报
回复
试试
SetScrollInfo() , 设置 nMin and nMax 值相等
sunshinecsdn 2006-03-30
  • 打赏
  • 举报
回复
我的表述有问题啊,重新问。
不是把滚动条去掉,而是隐藏,用我自己重绘的滚动条。如果设置TVS_NOSCROLL,那我就不会得到滚动条的位置,也无法滚动窗口了。
大侠们再帮帮,谢谢!!!
lixiaosan 2006-03-30
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/commctls/treeview/styles.asp

TVS_NOHSCROLL
Version 5.80. Disables horizontal scrolling in the control. The control will not display any horizontal scroll bars.

TVS_NOSCROLL
Version 4.71. Disables both horizontal and vertical scrolling in the control. The control will not display any scroll bars.
teli_eurydice 2006-03-30
  • 打赏
  • 举报
回复
创建的时候设置样式啊
一个傻冒 2006-03-30
  • 打赏
  • 举报
回复
动态创建树控件,就可以动态的创建增加和去掉滚动条.
lamputa_lito 2006-03-30
  • 打赏
  • 举报
回复
当然还是要调用Init先.
lamputa_lito 2006-03-30
  • 打赏
  • 举报
回复
如果可以的话,改写树的afx_msg void OnNcCalcSize(BOOL bCalcValidRects,NCCALCSIZE_PARAMS* lpncsp);函数,不要调用默认的OnNcCalcSize函数好似是可以的.
内容概要:本文档为一份聚焦电气工程、自动化与控制领域的科研辅助资源合集,重点围绕永磁同步电机(PMSM)控制、逆变器建模与仿真、微电网优化调度、参数辨识与预测控制等核心技术展开。核心内容为“增量式无差拍控制”与“基于电流预测误差的参数辨识”方法的Simulink仿真实现,属于高影响力期刊论文复现项目,旨在通过仿真手段提升系统动态响应精度与参数自适应能力。文档整合了大量典型研究案例,如LCL逆变器、扩展状态观测器(ESO)、模型预测控制(MPC)、滑模控制等,系统展示了现代控制理论在电机驱动、新能源系统与电力电子变换器中的综合应用与仿真实现路径。; 适合人群:具备电力电子、自动控制理论与Simulink仿真基础,从事电气工程、自动化、新能源系统等相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:① 复现高水平期刊论文中的先进控制策略,掌握增量式无差拍与基于电流预测误差的参数辨识算法的设计原理与实现流程;② 学习并构建永磁同步电机、逆变器与微电网系统的Simulink仿真模型,提升建模与仿真能力;③ 深入理解现代控制算法(如MPC、滑模、自抗扰)在实际系统中的集成应用,增强科研创新能力与论文复现水平。; 阅读建议:此资源以Simulink仿真实践为核心,建议读者结合具体案例逐步操作,重点关注控制算法模块的搭建、参数整定与仿真结果分析,并配合相关理论文献深化理解,形成“理论-仿真-优化”的闭环学习路径,从而有效支撑科研创新与学术成果转化。

15,976

社区成员

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

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