请教各位,RichEdit控件的显示问题。

Xman2006 2006-07-10 01:29:52
我建了一个基于对话框的工程,用CreateEx在对话框上生成两个RichEdit控件,就像QQ或MSN的聊天窗口那样。关键代码如下:
BOOL CRichEditDemoDlg::OnInitDialog()
{
……
CRect rect;

m_richViewEx.CreateEx(WS_EX_TRANSPARENT, "RICHEDIT20A", "", WS_VISIBLE | WS_CHILD |
WS_CLIPCHILDREN | WS_VSCROLL | ES_MULTILINE | ES_READONLY |
ES_AUTOVSCROLL |ES_LEFT | ES_WANTRETURN, rect,
this, IDC_RICHVIEWEX, NULL);

m_richEditEx.CreateEx(WS_EX_TRANSPARENT, "RICHEDIT20A", "", WS_VISIBLE | WS_CHILD |
WS_CLIPCHILDREN | WS_VSCROLL | ES_MULTILINE | ES_AUTOVSCROLL |
ES_LEFT | ES_WANTRETURN, rect, this, IDC_RICHEDITEX, NULL);

GetWindowRect(rect);
rect.bottom ++;
MoveWindow(rect, TRUE);

……
}

void CRichEditDemoDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

// TODO: Add your message handler code here
CRichEditCtrlEx * richView = (CRichEditCtrlEx *)GetDlgItem(IDC_RICHVIEWEX);
CRichEditCtrlEx * richEdit = (CRichEditCtrlEx *)GetDlgItem(IDC_RICHEDITEX);

if (!richView || !richEdit)
return;

richView->MoveWindow(14, 15 , 346, 149);
richEdit->MoveWindow(14, 211, 346, 63);
}

问题是:
在 OnInitDialog()函数中的

GetWindowRect(rect);
rect.bottom ++;
MoveWindow(rect, TRUE);

这段代码如果没有的话,对话框上就不会显示控件,而rect.bottom ++;这句好像又没有什么意义
改成rect.right ++;也可以。
这是怎么回事?请达人们给我解释一下以上三句话的作用。

代码参考了http://www.codeproject.com/richedit/AnimatedEmoticon.asp,在此对作者dTianx 表示感谢.

这是我在CSDN社区的处女贴,还比较穷,给分不多,请大侠们卖个薄面,谢谢了。
...全文
248 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Xman2006 2006-07-10
  • 打赏
  • 举报
回复
果然如此,EddieCai兄谢谢了,分给你,查收。
EddieCai 2006-07-10
  • 打赏
  • 举报
回复
"是OnSize先调用,然后才是OnInitDialog"

可是这时控件都没建立呢,按你写的if (!richView || !richEdit) return;
OnSize就直接返回掉啦,不会执行到后面的richView->MoveWindow(14, 15 , 346, 149);
richEdit->MoveWindow(14, 211, 346, 63);的拉~

我觉得还是我说的那个原因。
chib 2006-07-10
  • 打赏
  • 举报
回复
关注,我也用它显示聊天信息,但聊天内容超出显示框的大小时候,出现滚动条,然后richedit中的内容就会花掉,有人碰到这个问题么?怎么解决?
Xman2006 2006-07-10
  • 打赏
  • 举报
回复
我下断点看了一下,是OnSize先调用,然后才是OnInitDialog,主要是rect.bottom ++;这句真的搞不懂有什么用
EddieCai 2006-07-10
  • 打赏
  • 举报
回复
因为你在OnInitDialog里创建RichEdit的时候没有指定正确的大小吧?
然后依靠在OnSize里来进行大小的变化。
然后MoveWindow会导致OnSize的调用;
然后RichEdit就显示出来了。。。

15,980

社区成员

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

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