列表框的简单问题 (来者有分)

Smallfrogs 2004-02-03 12:00:39
// IDC_LISTBOX ListBox的ID号
// 有一个ListBox,里面有n行,当选择第一行时自动弹出一个MessageBox,选中第二行时自动弹出一个
// MessageBox……以此类推
//
// 但是为什么下面代码无法实现呢?

//SampleDlg.h
class CSampleDlg : public CDialog
{
afx_msg void OnSelNumber();
}

//SampleDlg.cpp

BEGIN_MESSAGE_MAP(CSampleDlg, CDialog)
ON_BN_CLICKED(IDC_CHECKLISTBOX, OnSelNumber)
END_MESSAGE_MAP()

BOOL CSampleDlg::OnInitDialog()
{
CDialog::OnInitDialog();

……

mylist.Create (
WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_HSCROLL|WS_TABSTOP,
CRect(10,80,450,200),
this,
IDC_LISTBOX);
mylist.AddString("1");
mylist.AddString("2");
mylist.AddString("3");
mylist.AddString("4");
mylist.AddString("5");
mylist.AddString("6");
mylist.AddString("7");

……
)


void CSampleDlg::OnSelNumber ()
{
if (mylist.GetCurSel ()==0)
MessageBox("0");
if (mylist.GetCurSel ()==0)
MessageBox("1");
……
}

哪里错了?
...全文
71 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
karlson0211 2004-02-03
  • 打赏
  • 举报
回复
我还真没找到你的
ON_BN_CLICKED(IDC_CHECKLISTBOX, OnSelNumber)

只有
BEGIN_MESSAGE_MAP(CSecondDlg, CDialog)
//{{AFX_MSG_MAP(CSecondDlg)
ON_LBN_SELCHANGE(IDC_LIST1, OnSelchangeList1)
c(IDC_LIST1, OnDblclkList1)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
这两个还有点象,但是ON_BN_CLICKED(IDC_CHECKLISTBOX, OnSelNumber)也同样可以
karlson0211 2004-02-03
  • 打赏
  • 举报
回复
帮你调试成功了,用OnSelchangeList1() 的响应,不用ON_BN_CLICKED
void CSecondDlg::OnSelchangeList1()
{
// TODO: Add your control notification handler code here
if (m_listbox1.GetCurSel ()==0)
MessageBox("0");
if (m_listbox1.GetCurSel ()==1)
MessageBox("1");
if (m_listbox1.GetCurSel ()==2)
MessageBox("1");
if (m_listbox1.GetCurSel ()==3)
MessageBox("1");
if (m_listbox1.GetCurSel ()==4)
MessageBox("1");
}
你试试
Smallfrogs 2004-02-03
  • 打赏
  • 举报
回复


那个是我打错了 :(

问题不在这里
yjgx007 2004-02-03
  • 打赏
  • 举报
回复
void CSampleDlg::OnSelNumber ()
{
if (mylist.GetCurSel ()==0)
MessageBox("0");
if (mylist.GetCurSel ()==1) // 改为1
MessageBox("1");
……
}
karlson0211 2004-02-03
  • 打赏
  • 举报
回复
要动态生成的控件最好还是用发送消息的方法来控制
fzd999 2004-02-03
  • 打赏
  • 举报
回复
动态生成的控件不能用静态消息映射,楼主你当然没办法实现想要的功能。

只能使用PreTranslateMessage来派发消息映射,执行相应的函数,其他的都一样
cottonsheerly 2004-02-03
  • 打赏
  • 举报
回复
为什么非要动态创建?先隐藏或者别的不行吗?
Smallfrogs 2004-02-03
  • 打赏
  • 举报
回复
“动态生成的控件不能用静态消息映射”

这句话好像不能这么说

问题我已经找到了
出在Create的时候

解决方法很简单,看看ClistBox Create的style,按照最初的想法做就可以了

当然,最初的问题有2个:
一是消息响应出现错误,不应该是ON_BN_CLICKED,应该是ON_LBN_SELCHANGE
二是Create时候Style出现问题,差一个Style,所以不能响应

问题解决~!
yjgx007 2004-02-03
  • 打赏
  • 举报
回复
困,要睡了如果还不行明天再说吧
yjgx007 2004-02-03
  • 打赏
  • 举报
回复
今天重做系统了明天还要装vc
ON_BN_CLICKED(IDC_CHECKLISTBOX, OnSelNumber)

mylist.Create (
WS_CHILD|WS_VISIBLE|WS_VSCROLL|WS_HSCROLL|WS_TABSTOP,
CRect(10,80,450,200),
this,
IDC_LISTBOX);

两个资源ID不同?是不是又敲错?在调试状态下能进消息函数OnSelNumber?
Smallfrogs 2004-02-03
  • 打赏
  • 举报
回复
没有任何错误

就是选择1没有那个MessageBox框弹出
选择2也没有

如果使用拖动控件到界面上,双击控件生成的代码,就能够弹出MessageBox框
yjgx007 2004-02-03
  • 打赏
  • 举报
回复
到底是出什么错误请详细描述?
Smallfrogs 2004-02-03
  • 打赏
  • 举报
回复
但是只创建一个List项目也不行

郁闷了

难道就没有人使用动态创建控件的方法?
yjgx007 2004-02-03
  • 打赏
  • 举报
回复
可能和sort排序有关
Smallfrogs 2004-02-03
  • 打赏
  • 举报
回复
晕,IDC_CHECKLISTBOX是我敲错了,应该是IDC_LISTBOX

谢谢fzd999(花差花差)
如果用PreTranslateMessage,该怎么写呢?
Smallfrogs 2004-02-03
  • 打赏
  • 举报
回复
怀疑问题出在void CTestDlg::DoDataExchange(CDataExchange* pDX)上

如何让动态创建的CListBox实现这个功能?
Smallfrogs 2004-02-03
  • 打赏
  • 举报
回复
邪门了

使用控件拖动生成的CListBox是可以的

但是不知道为什么,我动态生成的ListBox确不可以

谁知道为什么啊?

Smallfrogs 2004-02-03
  • 打赏
  • 举报
回复
谢谢,我试试看

16,551

社区成员

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

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

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