CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
IBM Rational 系统开发最佳实践工具包 WebSphere MQ 最佳实践 TOP 15
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

动态加入滚动条后,水平滚动条与RichEdit显示内容不能同步的问题??请大家帮助,谢谢!

楼主xtmes(E-TECH)2006-03-14 14:20:57 在 VC/MFC / 界面 提问

动态加入滚动条后,水平滚动条与RichEdit显示内容不能同步的问题??请大家帮助,谢谢!  
  BOOL   CCmdLineDlg::OnInitDialog()    
  {  
  CDialog::OnInitDialog();  
                    ...  
  if(m_iAutoHorz){  
  m_wndCmdRecorder.ModifyStyle(0,WS_HSCROLL);//wndCmdRecorder是一个RichEdit控制变量  
  }  
  else{  
  m_wndCmdRecorder.ModifyStyle(WS_HSCROLL,0);  
  }  
  问题如题,请问怎么同步呢,我要在资源里直接设置WS_HSCROLL就没有问题. 问题点数:20、回复次数:23Top

1 楼striking(庸人自扰)回复于 2006-03-14 14:48:29 得分 0

不能同步   ?是什么意思Top

2 楼xtmes(E-TECH)回复于 2006-03-14 14:56:14 得分 0

不能同步就是,滚动条的范围和显示位置都不正确.Top

3 楼striking(庸人自扰)回复于 2006-03-14 15:21:19 得分 0

//   The   pointer   to   my   rich   edit   control.  
  extern   CRichEditCtrl*   pmyRichEditCtrl;  
   
  //   Add   auto   horizontal   and   vertical   scrolling.    
  pmyRichEditCtrl->SetOptions(ECOOP_OR,   ECO_AUTOVSCROLL   |    
        ECO_AUTOHSCROLL);  
  Top

4 楼xtmes(E-TECH)回复于 2006-03-14 15:38:38 得分 0

这句话加进去没有效果啊.大哥也写个对话框的程序帮我看看吧.不用写几行代码的:).先谢谢了:)!!!Top

5 楼xtmes(E-TECH)回复于 2006-03-14 15:47:14 得分 0

我在资源里已经设置了Auto属性了,应该和这个没有关系,而且我加了这个代码也没有作用呢Top

6 楼striking(庸人自扰)回复于 2006-03-14 15:55:07 得分 0

//   The   pointer   to   my   rich   edit   control.  
  extern   CRichEditCtrl*   pmyRichEditCtrl;  
   
  int   nFirstVisible   =   pmyRichEditCtrl->GetFirstVisibleLine();  
   
  //   Scroll   the   rich   edit   control   so   that   the   first   visible   line  
  //   is   the   first   line   of   text.  
  if   (nFirstVisible   >   0)  
  {  
        pmyRichEditCtrl->LineScroll(-nFirstVisible,   0);  
  }  
   
  Top

7 楼xtmes(E-TECH)回复于 2006-03-14 21:27:15 得分 0

这样好象更不行了,  
  用m_wndCmdRecorder.ModifyStyle(0,WS_HSCROLL);得出来的滚动条,好象和初始化时,它自动生成的滚动条不是一个东西?Top

8 楼xtmes(E-TECH)回复于 2006-03-14 21:29:53 得分 0

我该怎么办啊~~Top

9 楼striking(庸人自扰)回复于 2006-03-15 10:29:09 得分 0

linescroll   也不行?  
   
  你有没有研究一下linescroll   ?  
   
  还有你的richedit是否有这个ES_MULTILINE属性?Top

10 楼xtmes(E-TECH)回复于 2006-03-15 10:52:07 得分 0

大哥,你看明白我的意思没有"动态加入滚动条后",这里的滚动条不是一开始就有了.而且创建了RichEdit之后,我动态添加的属性.你所说的linescroll   当然可以滚动RichEdit了,但是我动态添加的水平滚动条,一是位置ScrollPos不正确,二是大小了不正确.  
  你可以简单地试一下就清楚了.  
  创建一个MFC的对话框程序,加入一个RichEdit,在资源的属性里没有WS_SCROLL|AUTO_HSCROLL属性.  
  现在你在对话框的OnInitDialog里面加上下面的代码:  
  m_wndCmdRecorder.ModifyStyle(0,WS_HSCROLL);//wndCmdRecorder是一个RichEdit控制变量  
  你看看这个显示的水平滚动条对不对?  
  Top

11 楼xtmes(E-TECH)回复于 2006-03-15 10:54:58 得分 0

另外你说的ES_MULTILINE多行属性,包括是否加'\n'这些我都有,也已经实现了加入一行后的滚动,这不是问题的所在.  
  关键在于水平滚动属性是不是动态添加的?  
  如果动态添加的,一定不对!  
  不管是否解决,还是谢谢您了!:)Top

12 楼xtmes(E-TECH)回复于 2006-03-15 10:59:04 得分 0

而且,好象在RichEdit中,用以下方法得不到那个水平滚动条(即使在水平滚动条已经出现的情况).太神奇了.呵呵,百思不得解.  
  CScrollBar*   pBar=m_wndCmdRecorder.GetScrollBarCtrl(SB_HORZ);  
  Top

13 楼striking(庸人自扰)回复于 2006-03-15 11:21:04 得分 20

被我调出来了.   你在m_wndCmdRecorder.ModifyStyle(0,WS_HSCROLL);//wndCmdRecorder是一个RichEdit控制变量之后  
   
  重新movewindow一下.  
  m_wndCmdRecorder.ModifyStyle(0,WS_HSCROLL);//  
   
  if   (   m_wndCmdRecorder.GetStyle()   &   WS_HSCROLL   )    
  {  
  AfxMessageBox(   "WS_HSCROLL"   );  
  }  
   
  CRect   rc;  
  m_wndCmdRecorder.GetClientRect(   &rc   );  
   
  m_wndCmdRecorder.MoveWindow(   rc   );  
  Top

14 楼striking(庸人自扰)回复于 2006-03-15 11:23:16 得分 0

最好先   load     RICHED20.DLLTop

15 楼xtmes(E-TECH)回复于 2006-03-15 11:51:29 得分 0

谢谢兄弟啊,感觉你回了这么多,结贴后一定给分:).  
  不过现在关键出来了,你看看那个水平滚动条,然后你再直接在资源里面设置水平滚动.  
  两个创建的滚动条差别大了.呵呵.  
  你创建这个,中间的滑块大小不对,而且也拖不走.  
  你再看看直接用资源设置的那个,中间的滑块大小会随文本发生变化的.  
  你说的Load肯定做了的.AfxOleRichEdi2()Top

16 楼striking(庸人自扰)回复于 2006-03-15 11:56:18 得分 0

换这个,   我不知道那个函数  
   
  m_hInstRichEdit20   =   LoadLibrary("RICHED20.DLL");  
   
  我已经是重新建工程,   按照你的要求试的.   没有问题了.  
   
  20分不够了.~~~呵呵.Top

17 楼xtmes(E-TECH)回复于 2006-03-15 12:08:16 得分 0

给一百分也可以啊.分没问题,我们讨论一下吧.你没有发现动态创建的滚动条和在资源里加属性静态创建出来那个不一样么?  
  其实m_hInstRichEdit20   =   LoadLibrary("RICHED20.DLL");和AfxInitRichEdit2()的功能完全一样.Top

18 楼xtmes(E-TECH)回复于 2006-03-15 12:10:58 得分 0

要不我结贴了,兄弟有没有MSN,QQ或POPO,我们交流一下吧:)Top

19 楼striking(庸人自扰)回复于 2006-03-15 12:12:00 得分 0

刚刚有发现,   汗一个..   这么困难...~~~~Top

20 楼xtmes(E-TECH)回复于 2006-03-15 12:12:45 得分 0

我的MSN:zy1075874@hotmail.com  
  POPO:zhangyiabc@163.com  
  我们讨论一下吧.我先给你分?呵呵Top

21 楼xtmes(E-TECH)回复于 2006-03-15 12:14:33 得分 0

加我MSN,我们讨论.呵呵.这个问题不是这么容易的.我现在的做法是.重新创建这个RichEdit.这样做不太好.我是这么做的  
  if(m_iAutoHorz){  
  CRect   rt;  
  m_wndCmdRecorder.GetWindowRect(&rt);  
  m_wndCmdRecorder.DestroyWindow();  
  m_wndCmdRecorder.CreateEx(WS_EX_CLIENTEDGE,ES_MULTILINE   |   ES_AUTOVSCROLL   |   ES_AUTOHSCROLL   |   ES_NOHIDESEL   |   ES_WANTRETURN   |   WS_VSCROLL     |   WS_HSCROLL   |   WS_GROUP   |   WS_TABSTOP,rt,this,IDC_COMMANDRECORDER);  
  }  
  else{  
  CRect   rt;  
  m_wndCmdRecorder.GetWindowRect(&rt);  
  m_wndCmdRecorder.DestroyWindow();  
  m_wndCmdRecorder.CreateEx(WS_EX_CLIENTEDGE,ES_MULTILINE   |   ES_AUTOVSCROLL   |   ES_AUTOHSCROLL   |   ES_NOHIDESEL   |   ES_WANTRETURN   |   WS_VSCROLL     |   WS_GROUP   |   WS_TABSTOP,rt,this,IDC_COMMANDRECORDER);  
  }  
  这个办法好笨啊~~~~~555555Top

22 楼xtmes(E-TECH)回复于 2006-03-15 12:21:15 得分 0

问题在于,控件创建后,动态创建的滚动条和它自动出来那个滚动条居然不是一个东西???我记得我三年前好象看到过解释这个问题的文档,现在忘了是怎么回来了.郁闷啊~~!~~~郁闷~~~~~Top

23 楼striking(庸人自扰)回复于 2006-03-15 12:33:26 得分 0

加了.   thecpp@hotmail.comTop

相关问题

  • 高手!又是两个RichEdit同步滚动的问题!
  • 请教:怎样实现当一个richedit滚动时(包括键盘和拖动滚动条)另一个richedit同步滚动
  • richedit 滚动条
  • 两个Listview滚动条同步
  • 窗口滚动时,如何使它内部的控件跟着同步滚动?
  • 怎样实现动态滚动的title
  • 请问如何令两个DataGrid同步Scroll(滚动)?
  • 如何使两个recordset的指针保持同步滚动
  • 如何使ListBox和我添加的项实现同步滚动
  • 在winform中如何让listbox和checklistbox同步滚动?

关键词

  • ws
  • pmyricheditctrl
  • richedit
  • wndcmdrecorder
  • 谢谢
  • 滚动条
  • hscroll
  • 不能同步
  • 显示
  • 问题

得分解答快速导航

  • 帖主:xtmes
  • striking

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo