浪费了半天时间的 RichEdit 只读属性

  昨天遇到一个任务,需要给一个 RichEdit 动态加上 ReadOlny 属性,谁知这么个简单的问题浪费了我将近半天的时间!

一开始写了这样的代码:

  1. LONG lStyle = GetWindowLong( hRichEdit, GWL_STYLE );
  2.  if( bEnable )
  3.      lStyle &= (~ES_READONLY);
  4.  else
  5.      lStyle |= ES_READONLY;
  6.  SetWindowLong( hReadEdit, GWL_STYEL, lStyle );

  试了一下,谁知根本没效果,还以为写错了什么地方,折腾了半天。后来不经意看到 RichEdit 居然有个 EM_SETOPTIONS 消息,才算是基本搞定了这个问题(为什么是基本搞定?听我从头道来:)),改用下面的代码:

  1. if( bEnable )
  2.      SendMessage( hRichEdit, EM_SETOPTIONS, CEOOP_AND, (~ECO_READONLY) );
  3.  else
  4.      SendMessage( hRichEdit, EM_SETOPTIONS, CEOOP_OR, ECO_READONLY );

  现在终于可以动态设定只读属性了,但却发现了几个问题:1、设成只读再取消以后,RichEdit 表面上看上去还是只读状态的,但其实已经可以进行编辑操作了。2、设成只读的 RichEdit 如果进行了重绘,则会变成灰色,就像是 Disable 状态一样。

  因为有以上两个问题,最终我还是用 EnableWindow( hRichEdit, TRUE/FALSE ); 的办法来实现了,但始终不知是为什么,比较郁闷,看起来应该是 RichEdit 的 Bug 吧,哪位仁兄可以指点一二?

Leave a Reply