1:我在一个对话框里添加了一个Edit控件和一个List控件,我在Edit控件里填多少数值,List控件里就显示多少列数据,我用EN_CHANG这消息来实现,现在的问题是只要Edit数值一变,List控件就立马刷新,比如最初为1000条数据的显示,而我现在改成10条,那么就得去掉2个0,就是每去1个0,List控件就刷新了1次,但是我想我去掉2个0,让List控件只刷新1次就显示10条数据,该怎么解决呢?2:一个对话框里有一些控件,然后我想显示几个,隐藏几个,就用GetDlgItem(ID)->ShowWindow(false)函数但是不知道怎么了整个对话框都隐藏了?下面的代码在另一个文件调用生成这个对话框
C***ListDlg dlg;
if (dlg.DoModal()==IDCANCEL)
{
    return 0;
}
GetDlgItem(ID_STATIC)->ShowWindow(dlg,false);//不让静态文本控件显示
GetDlgItem(ID_EDIT)->ShowWindow(dlg,false);//不让Edit控件显示上面的代码有错码?

解决方案 »

  1.   

    电脑怎么可能知道你到底要显示多少行,
    解决方法:在数字后面加个非数字的标识符号*什么的
    检测edit控件输入是否最后一位是*
    是显示前面数字行数,不是,不发送消息不进行刷新
    第二个问题:
    你确定能编译过?
    查MSDN showwindow的参数凭记忆也没有false啊,是SW_SHOWNORMAL SW_HIDE(可能前面两个字母不对,记不清了)自己查查,还有GetDlgItem(ID_EDIT)返回的就是cwnd*吧?怎么还有dlg?
      

  2.   

    1.你可以通过其他方式 比如增加一个设置按钮
    2.你的对话框DoModal后  下面的代码执行不到了  
    况且GetDlgItem(ID_STATIC)->ShowWindow(dlg,false); 没有这样用的
      

  3.   

    楼上+楼下的:DoModal是判断语句啊 , 判断是否退出 , 退出当然执行不到了。
      

  4.   


    第一个问题你理解错了 我想说明是个EN_CHANG这个消息是只要Edit框一边,你只要在这消息所对应的的函数进行你想要操作就行,而我做的就是刷新List列表框而已,从1000变到10需要2步,则这消息所对应的函数就执行了2遍,而我想要的是一步到位,就是我去掉2个0,他只刷新一次就显示10条数据第二个是伪代码,我只是写下我大概怎么写的思路而已。
      

  5.   

    EN_CHANG消息是只要Edit框里的数据有变动,他就会执行对应的函数,其实这样没错,就是我想1000变成10的时候去掉2个0,就是说做了2不操作,就是说Edit框里的数值变了2次,所以对应的函数执行了2遍,而我只是在这函数里做了刷新List框操作而已,我想要的效果是从1000变到10时,只想刷新一遍List框而已,就是EN_CHANG消息反应太快了……
      

  6.   

    第二个问题  请别太纠结上面的代码问题,我主要想问的是我用ShowWindow函数时,却没有达到我想要的效果
    不知道为什么他把整个对话框都隐藏了?有什么情况才会出现这样的问题啊
    上面代码主要想表示的是我是在对话框已经创建后才去隐藏拿两个控件而已。还有第一问题好想用什么让Edit框失去“【焦点】或是【交点】”办法能实现我想要的效果,好像是我在改变Edit框的数值时,让Edit框暂时失去“【焦点】”,等我修改完后在让他获得“【焦点】”在执行相应的函数
      

  7.   

    1.你干脆加一个按钮得了,点下按钮在设置列表框的数据
    2.应该是GetDlgItem(IDC_EDIT1)->ShowWindow(SW_HIDE);
    或GetDlgItem(IDC_EDIT)->ShowWindow(SW_SHOW);PS:貌似文本框最好改掉ID,不要用原来的IDC_STATIC,就是改成IDC_STATIC1也行
      

  8.   


    第一个问题我不知道怎么处理
    第二个问题,你在DoModal之后,对DoModal的这个对话框内的操作都不起作用了。
      

  9.   

    LS  在DoModal之后,对DoModal的这个对话框内的操作都不起作用了。是这样啊? 我晕
      

  10.   

    你获取Edit控件的数据不是用函数做的吗?控件里输入的数字加个控制位不就行了?
      

  11.   

    不要在Edit control的EN_CHANG消息中处理,该在Edit control的EN_KILLFOCUS中进行处理.
      

  12.   

    2.DoModal后 下面的代码执行不到了   
    GetDlgItem(ID_STATIC)->ShowWindow(dlg,false);//不让静态文本控件显示
    GetDlgItem(ID_EDIT)->ShowWindow(dlg,false);//不让Edit控件显示
      

  13.   

    1、EN_CHANG不能实现你这个要求,因为这个消息对编辑框的改变是实时响应的,我一般的处理方式是用回车来表示完成输入,这样在OnOK函数里做相应处理,如果你不想这么处理可以用一个时钟或开一个线程来监控edit的变化,第一个时间范围,超出那个范围值没有改变就认为已经完成输入了2、ID_STATIC这个ID是静态控件的默认ID,是唯一一个可以赋予不用控件的ID,不过如果你想对控件作处理那必须改掉这个ID,用一个自定义的ID值操作