又是组合框,为什么显示组合框内容时会出错

茂一茂 2011-12-22 11:49:42


void edgePara::OnSelchangeCombo1()
{
CStatic *lbl1=(CStatic *)GetDlgItem(IDC_STATIC);
lbl1->SetWindowText("dfds"); //<<<这一段是我测试的,下面的程序还没执行,执行到这里就出错
return; //不执行下面程序
CString txt;
m_EdgeColor.GetLBText(m_EdgeColor.GetCurSel(),txt);
lbl1->SetWindowText(txt); //如果执行的话,到这里就出错
//MessageBox(txt,"选择内容"); //但不使用上面显示,而是用这个,竟然不出错,运行也正常。
}


---------------------------
FVX_Test1.exe - 应用程序错误
---------------------------
"0x5f438ddb" 指令引用的 "0x00000020" 内存。该内存不能为 "read"。


要终止程序,请单击“确定”。
要调试程序,请单击“取消”。
---------------------------
确定 取消
---------------------------
...全文
124 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
非常陶醉 2012-06-29
  • 打赏
  • 举报
回复
CStatic *lbl1=(CStatic *)GetDlgItem(IDC_STATIC);
lbl1->SetWindowText("dfds");
这两句改为 GetDlgItem(IDC_STATIC)->SetWindowText("dfds");即可
gold_water 2011-12-22
  • 打赏
  • 举报
回复
虽然不出错,估计txt的内容也是非预期的。
茂一茂 2011-12-22
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fairyprince 的回复:]

IDC_STATIC 是取不到的控件ID改名比如 IDC_STATIC1
[/Quote]

果然,但为什么,我下面用 MessageBox的竟然可以呢?

lbl1->SetWindowText(txt); //如果执行的话,到这里就出错
//MessageBox(txt,"选择内容"); //但不使用上面显示,而是用这个,竟然不出错,运行也正常。
fairyprince 2011-12-22
  • 打赏
  • 举报
回复
IDC_STATIC 是取不到的控件ID改名比如 IDC_STATIC1
liujie250079934 2011-12-22
  • 打赏
  • 举报
回复
IDC_STATIC 是把控件托到对话框上默认的 所有新托上去的STATIC默认都是IDC_STATIC 他们的ID号也都一样 所以系统区别不了谁是谁 就出错了
处处闻啼鸟 2011-12-22
  • 打赏
  • 举报
回复
如果 GetLBText()不行,,可以试试

GetDlgItemText(IDC_COMBO_ADD, FilePath);



CWnd::GetDlgItemText()

int GetDlgItemText( int nID, LPTSTR lpStr, int nMaxCount ) const;
int GetDlgItemText( int nID, CString& rString ) const;

返回值:
指定了被拷贝到缓冲区中的实际字节数,不包括结尾的null字符。如果没有拷贝文本,则返回0。

参数: nID 指定了要获取其标题的控件的整数标识符。
lpStr 指向要接收控件的标题或文本的缓冲区。
nMaxCount 指定了要拷贝到lpStr的字符串的最大长度(以字节为单位)。如果字符串比nMaxCount要长,它将被截断。
rString 对一个CString对象的引用。

说明:
调用这个函数以获得与对话框中的控件相关的标题或文本。GetDlgItemText成员函数将文本拷贝到lpStr指向的位置并返回拷贝的字节的数目。
fairyprince 2011-12-22
  • 打赏
  • 举报
回复
CStatic *lbl1=(CStatic *)GetDlgItem(IDC_STATIC);
取出来不用当然不会出错了,

lbl1->SetWindowText(txt);
这里已经使用了 lbl1 其实指针是空的所以出错了
处处闻啼鸟 2011-12-22
  • 打赏
  • 举报
回复
添加选项可以用

m_combo1.AddString("0");
m_combo1.AddString("1");
m_combo1.AddString("2");
m_combo1.AddString("3");
m_combo1.AddString("4");



CComboBox::AddString

int AddString( LPCTSTR lpszString );

返回值:
返回值大于等于0时,是列表中项的下标。出错时,返回CB_ERROR,没有足够的空间存放新的字符串时返回CB_ERRSPACE。

参数: lpszString 指向将要添加的字符串(以null结尾)的指针。

说明:
本函数在组合框中的列表框中添加一个字符串。如果列表框的风格不是CBS_SORT的,则在列表的末尾添加该字符串。否则,该字符串按照排序的次序插入到列表中。
在列表的指定位置插入一项,需使用成员函数InsertString。
处处闻啼鸟 2011-12-22
  • 打赏
  • 举报
回复
请问你是要设置组合框中的字符吗?

用这个看看 m_combo1.SetCurSel(combo1);


CComboBox::SetCurSel

int SetCurSel( int nSelect );

返回值:
调用成功时返回选中的项的下标。如果nSelect大于列表中项的个数,则返回CB_ERR。如果nSelect为-1,则清除当前的选择并返回CB_ERR。

参数: nSelect 指定要选中的字符串的下标。如果为-1,则清除当前的选择,编辑控件中的内容设置为空。

说明:
本函数在组合框的列表框中选择一个字符串。必要时列表框会滚动,以使该字符串在列表的可视区内(列表是可见的时)。编辑控件中的文本将相应地变为选中的字符串。此前在列表框中的选择将不复存在。

16,466

社区成员

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

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

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