SetWindowText的问题

buleysh 2014-09-03 11:32:15
void CMainFrame::OnTest()
{
// TODO: 在此添加命令处理程序代码
CPropertySheet sheet(_T("测试"),this);
CFirstPage *m_firstPage = new CFirstPage;
CScendPage *m_scendPage = new CScendPage;
sheet.AddPage(m_firstPage);
sheet.AddPage(m_scendPage);

int m_firstOption;
int m_scendOption;
CString temp;

m_firstOption = ::GetPrivateProfileInt(_T("Option"),_T("FirstOption"),0,_T(".\\option.ini"));
m_scendOption = ::GetPrivateProfileInt(_T("Option"),_T("ScendOption"),0,_T(".\\option.ini"));

temp.Format(_T("%d"),m_firstOption);

m_firstPage->m_edit.SetWindowText(temp);

sheet.DoModal();
delete m_firstPage;
delete m_scendPage;
}


程序总是在 m_firstPage->m_edit.SetWindowText(temp); 产生中断,是SetWindowText给的参数不对吗?
那应该怎么将一个整形传给Edit Control显示出来呢?
如何将一个Edit控件设置成灰色,只能显示不能编辑呢?

...全文
538 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
V_wo独尊 2014-09-03
  • 打赏
  • 举报
回复
中断在第四行? 至于只读的那个,MFC的话,直接修改Edit的属性,吧ReadOnly选上就可以了吧
buleysh 2014-09-03
  • 打赏
  • 举报
回复
将m_firstPage->m_edit.SetWindowText(temp); 换成SetDlgItemText(m_firstPage->IDC_EDIT,temp); 编译提示:错误 3 error C2039: “sheet”: 不是“CFirstPage”的成员 这又是什么状况啊???关sheet什么事。。。。
buleysh 2014-09-03
  • 打赏
  • 举报
回复
就是这么做的啊,可现在
void CWnd::SetWindowText(LPCTSTR lpszString)
{
	ENSURE(this);
	ENSURE(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL));

	if (m_pCtrlSite == NULL)
		::SetWindowText(m_hWnd, lpszString);
	else
		m_pCtrlSite->SetWindowText(lpszString);
}
这里出现了中断,是什么原因呢
SiGoYi 2014-09-03
  • 打赏
  • 举报
回复
看着没错啊! 显示int还不容易,定义一个CString str; str.Format(_T("%d"), 你的int变量);
V_wo独尊 2014-09-03
  • 打赏
  • 举报
回复
引用 14 楼 majianwei0705 的回复:
[quote=引用 13 楼 buleysh 的回复:] [quote=引用 12 楼 majianwei0705 的回复:] 你的 m_firstPage 有没有Create出来,new出来的只是一个对象,如果没有Create的话,句柄等资源还没有分配,使用的话会出错。ASSERT(::IsWindow(m_hWnd)); 就是断言这个控件已经初始化完毕,已经是一个窗口对象,句柄可用了。
对于这点不是很清楚,具体应该如何Create呢?sheet.DoModal();能执行这一句不是说明已经实例了吗?[/quote] 额,模态对话框啊,你重载一些OnInitDialog,把这些初始化工作放到那里面去做吧[/quote] 在Sheet的OnInitDialog中,调用完其子类的OnInitDialog,Sheet及其子控件就可以使用了
V_wo独尊 2014-09-03
  • 打赏
  • 举报
回复
引用 13 楼 buleysh 的回复:
[quote=引用 12 楼 majianwei0705 的回复:] 你的 m_firstPage 有没有Create出来,new出来的只是一个对象,如果没有Create的话,句柄等资源还没有分配,使用的话会出错。ASSERT(::IsWindow(m_hWnd)); 就是断言这个控件已经初始化完毕,已经是一个窗口对象,句柄可用了。
对于这点不是很清楚,具体应该如何Create呢?sheet.DoModal();能执行这一句不是说明已经实例了吗?[/quote] 额,模态对话框啊,你重载一些OnInitDialog,把这些初始化工作放到那里面去做吧
buleysh 2014-09-03
  • 打赏
  • 举报
回复
引用 12 楼 majianwei0705 的回复:
你的 m_firstPage 有没有Create出来,new出来的只是一个对象,如果没有Create的话,句柄等资源还没有分配,使用的话会出错。ASSERT(::IsWindow(m_hWnd)); 就是断言这个控件已经初始化完毕,已经是一个窗口对象,句柄可用了。
对于这点不是很清楚,具体应该如何Create呢?sheet.DoModal();能执行这一句不是说明已经实例了吗?
V_wo独尊 2014-09-03
  • 打赏
  • 举报
回复
你的 m_firstPage 有没有Create出来,new出来的只是一个对象,如果没有Create的话,句柄等资源还没有分配,使用的话会出错。ASSERT(::IsWindow(m_hWnd)); 就是断言这个控件已经初始化完毕,已经是一个窗口对象,句柄可用了。
buleysh 2014-09-03
  • 打赏
  • 举报
回复
为什么都只能通过Value类型来改变控件状态,用Control类型就会崩溃呢?
buleysh 2014-09-03
  • 打赏
  • 举报
回复
m_firstPage->m_option1.SetCheck(1); 中断位置,{ ASSERT(::IsWindow(m_hWnd)); ::SendMessage(m_hWnd, BM_SETCHECK, nCheck, 0); } 这说明了什么呢?::IsWindow(m_hWnd) ,这个是什么意思?是出问题的地方?
buleysh 2014-09-03
  • 打赏
  • 举报
回复
引用 8 楼 majianwei0705 的回复:
通过CEdit变量肯定可以更新信息啊,而且不需要UpdateData这样。 是不是CEdit控件未创建完成? 如果 ENSURE(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL)); 这儿崩溃的话应该就是了,否则的话,就有点奇怪了
CFirstPage *m_firstPage = new CFirstPage; new 的时候不是CFirstPage的变量都已经创建了吗?刚才又再改m_firstPage上的另一个空间, m_firstPage->m_option1.SetCheck(1); 同样的错误,所以我猜想是不是因为在创建m_firstPage的时候各种控件的状态已经定下了,没办法更改?或者需要重绘?刚学mfc好多概念还不清晰
V_wo独尊 2014-09-03
  • 打赏
  • 举报
回复
通过CEdit变量肯定可以更新信息啊,而且不需要UpdateData这样。 是不是CEdit控件未创建完成? 如果 ENSURE(::IsWindow(m_hWnd) || (m_pCtrlSite != NULL)); 这儿崩溃的话应该就是了,否则的话,就有点奇怪了
buleysh 2014-09-03
  • 打赏
  • 举报
回复
重新定义了一个文本变量, m_firstPage->m_editText.Format(_T("%d"),m_firstOption); UpdateData(FALSE); 为什么这样就可以,通过CEdit变量就不能更新信息呢???
buleysh 2014-09-03
  • 打赏
  • 举报
回复
忽略debug信息后提示遇到不适当的参数
buleysh 2014-09-03
  • 打赏
  • 举报
回复
中断在第二行,我已经恨上mfc了

16,473

社区成员

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

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

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