MFC的列表框不显示内容!解决办法
MFC的列表框不显示内容!!
我想现在组合框里选择类别然后再到列表框里选择具体选项,可是选了组合框后发现列表框里什么都没有!!比如我在组合框选择”品牌“后,要列表框列出“索尼”,‘诺基亚’,摩托罗拉“,可是列表框里什么都没有,代码如下:
struct Pinpai{
char * strType;
char * strname;
bool isselect;
};
struct CPU{
char * strcpu;
char * hz;
bool isselect;
};
struct RAM{
char * strram;
char * mb;
bool isselect;
};
struct FEN{
char * strfen;
char * strname;
bool isselect;
};
Pinpai P[]={"品牌","索尼",false,
"品牌","摩托罗拉",false,
"品牌","诺基亚",false
};
CPU C[]={"CPU主频","1024",false,
"CPU主频","800",false,
"CPU主频","600",false,
"CPU主频","312",false
};
RAM R[]={"内存","512",false,
"内存","256",false,
"内存","128",false,
"内存","64",false
};
FEN F[]={"分辨率","480*854",false,
"分辨率","360*640",false,
"分辨率","320*480",false,
"分辨率","240*320",false
};
以上是我定义的结构体,下面是组合框函数:
void CShoujiDlg::OnEditchangeCombo1()
{
// TODO: Add your control notification handler code here
int Index=m_cmbType.GetCurSel();
m_cmbType.GetLBText(Index,m_strType);
m_lsname.ResetContent();
if(m_strType=="品牌"){
for(int i=0;i<3;i++){
m_lsname.AddString(P[i].strname);
}
}
else if(m_strType=="CPU主频"){
for(int i=0;i<4;i++){
m_lsname.AddString(C[i].hz);
}
}
else if(m_strType=="内存"){
for(int i=0;i<4;i++){
m_lsname.AddString(R[i].mb);
}
}
else if(m_strType=="分辨率"){
for(int i=0;i<4;i++){
m_lsname.AddString(F[i].strname);
}
}
}
运行结果:选择对应的组合框选项后列表框没有显示!!!
------解决方案--------------------
如果我没有猜错的话,你的程序不会收到 CBN_EDITCHANGE 通知。也就是说你贴出的这些代码根本就没有执行。
你应该映射 CBN_SELCHANGE 通知,而不是 CBN_EDITCHANGE 通知。
它们的区别:
CBN_SELCHANGE : 当你更改当前选择时,控件的父窗口会收到这个通知。
CBN_EDITCHANGE: 当你更改COMBO中的文本时(一般是键盘输入,或复制粘贴)时,控件的父窗口会收到这个通知。
我想现在组合框里选择类别然后再到列表框里选择具体选项,可是选了组合框后发现列表框里什么都没有!!比如我在组合框选择”品牌“后,要列表框列出“索尼”,‘诺基亚’,摩托罗拉“,可是列表框里什么都没有,代码如下:
struct Pinpai{
char * strType;
char * strname;
bool isselect;
};
struct CPU{
char * strcpu;
char * hz;
bool isselect;
};
struct RAM{
char * strram;
char * mb;
bool isselect;
};
struct FEN{
char * strfen;
char * strname;
bool isselect;
};
Pinpai P[]={"品牌","索尼",false,
"品牌","摩托罗拉",false,
"品牌","诺基亚",false
};
CPU C[]={"CPU主频","1024",false,
"CPU主频","800",false,
"CPU主频","600",false,
"CPU主频","312",false
};
RAM R[]={"内存","512",false,
"内存","256",false,
"内存","128",false,
"内存","64",false
};
FEN F[]={"分辨率","480*854",false,
"分辨率","360*640",false,
"分辨率","320*480",false,
"分辨率","240*320",false
};
以上是我定义的结构体,下面是组合框函数:
void CShoujiDlg::OnEditchangeCombo1()
{
// TODO: Add your control notification handler code here
int Index=m_cmbType.GetCurSel();
m_cmbType.GetLBText(Index,m_strType);
m_lsname.ResetContent();
if(m_strType=="品牌"){
for(int i=0;i<3;i++){
m_lsname.AddString(P[i].strname);
}
}
else if(m_strType=="CPU主频"){
for(int i=0;i<4;i++){
m_lsname.AddString(C[i].hz);
}
}
else if(m_strType=="内存"){
for(int i=0;i<4;i++){
m_lsname.AddString(R[i].mb);
}
}
else if(m_strType=="分辨率"){
for(int i=0;i<4;i++){
m_lsname.AddString(F[i].strname);
}
}
}
运行结果:选择对应的组合框选项后列表框没有显示!!!
------解决方案--------------------
如果我没有猜错的话,你的程序不会收到 CBN_EDITCHANGE 通知。也就是说你贴出的这些代码根本就没有执行。
你应该映射 CBN_SELCHANGE 通知,而不是 CBN_EDITCHANGE 通知。
它们的区别:
CBN_SELCHANGE : 当你更改当前选择时,控件的父窗口会收到这个通知。
CBN_EDITCHANGE: 当你更改COMBO中的文本时(一般是键盘输入,或复制粘贴)时,控件的父窗口会收到这个通知。