请问在模态对话框中如何使用RichEdit控件?

liuliulyh 2009-09-22 08:51:46
问题描述如下:
我写了一个程序需要完成以下功能:
a) 定义一个非模态窗口,CommandDlg dlg;在while循环里
if(dlg.Domodal()!=IDOK)return null;
b) 从Edit控件中读取一个命令;
c) 调用某功能函数执行,返回执行结果;
d) 将执行结果显示在RichEdit上;
a b 功能都执行正确,但运行到c的dlg.m_RichEdit.SetDlgItemText时出现断言错误,Debug Assertion Failed! File:winocc.cpp Line:138 ;跟踪看到 RichEdit Ctr的指针为空,请问这是怎么回事啊?问题出在哪?怎么解决呢?
...全文
306 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyster2008 2009-09-22
  • 打赏
  • 举报
回复
要么采用非模式对话框吧,要么把c,d两步移动到对话框的相应函数中
fishion 2009-09-22
  • 打赏
  • 举报
回复
你应该用
dlg.m_Str = "....";
dlg.DoModal

在dlg的OnInitDialog()中用_RichCtrl.SetWindowText(m_Str );
如果你非要在dlg.DoModal后面才调用SetWindowText,那你就用Create来创建非模态对话框
liuliulyh 2009-09-22
  • 打赏
  • 举报
回复
那应该怎么做呢?能指点一下吗?
oyster2008 2009-09-22
  • 打赏
  • 举报
回复
那就不行了,窗口已经销毁了怎么还能调用SetWindowText呢
liuliulyh 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 oyster2008 的回复:]
SetWindowText是在dlg.DoModal返回之后调用的吗?
[/Quote]
是的
oyster2008 2009-09-22
  • 打赏
  • 举报
回复
SetWindowText是在dlg.DoModal返回之后调用的吗?
fishion 2009-09-22
  • 打赏
  • 举报
回复
Command dlg不需要new呀
fishion 2009-09-22
  • 打赏
  • 举报
回复
如果是Rich Edit 2.0版的就用
BOOL CtestApp::InitInstance()
{
// InitCommonControlsEx() is required on Windows XP if an application
AfxInitRichEdit2();//


使用m_RichCtrl.SetWindowText(_T("ddd"));设置内容
liuliulyh 2009-09-22
  • 打赏
  • 举报
回复
AfxInitRichEdit()这个初始化已经做过了,要不对话框都是弹不出来的,我说的是声明了Command dlg;之后需要 new一下吗?
oyster2008 2009-09-22
  • 打赏
  • 举报
回复
在CWinAPP类的InitInstance函数里面调用AfxInitRichEdit(或者AfxInitRichEdit2)
fishion 2009-09-22
  • 打赏
  • 举报
回复
BOOL CtestApp::InitInstance()
{
// InitCommonControlsEx() is required on Windows XP if an application

AfxInitRichEdit();//初始化
liuliulyh 2009-09-22
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 fishion 的回复:]
dlg.m_RichEdit.SetDlgItemText,m_RichEdit已经是与控件ID关联了,你怎么还用SetDlgItemText,你应该用SetWindowText
[/Quote]
我的dlg.m_RichEdit在SetDlgItermText里得到的句柄为空,我觉得需要初始化,但是不知道在哪初始化
hanjiangying 2009-09-22
  • 打赏
  • 举报
回复
Richedit控件在对话框工程中使用时,需要先初始化的,一般在App类中,否则就会出错。另外,一般在设置RichEdit显示内容时,不用SetWindowText这个函数,这个你在百度上一搜就知道了,我是用手机发帖,没法详细说了
fishion 2009-09-22
  • 打赏
  • 举报
回复
dlg.m_RichEdit.SetDlgItemText,m_RichEdit已经是与控件ID关联了,你怎么还用SetDlgItemText,你应该用SetWindowText
liuliulyh 2009-09-22
  • 打赏
  • 举报
回复
谢谢楼上的回答哈!
我的RichEidt是直接放在对话框上的,在ClassWizard里为IDC_RICHEDIT 添加了control类m_RichEdit,没有做其他的操作了。m_RichEdit需要初始化吗?CommandDlg dlg;dlg需要new一下分配空间吗?
lanseshenhua 2009-09-22
  • 打赏
  • 举报
回复
你的RichEdit是不是嵌入式的?
reneeland 2009-09-22
  • 打赏
  • 举报
回复
RichEdit Ctr可能读取了一个无效的地址,你把涉及到这个指针操作的代码好好看看,是不是保存了什么临时空间,函数结束时这个存储空间已经没有了~~~
oyljerry 2009-09-22
  • 打赏
  • 举报
回复
m_RichEdit 是否在对话框中创建,绑定成功...
liuliulyh 2009-09-22
  • 打赏
  • 举报
回复
有谁懂哈,指点一下啦
liuliulyh 2009-09-22
  • 打赏
  • 举报
回复
谢谢oyljerry的指点啊!
加载更多回复(9)

16,550

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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