我建了一个对话框,在对话框上建了一个ListView列表视图控件,又建了一个组合框(ComboBox),它们都是以对话框为父窗口。当我在程序中把组合框移动到ListView上面时,发现单击组合框,不能展开列表,更不能选择。怎么试也没有办法。后来的在程序中插入了Beep函数,发现单击组合框的时候,列表框(ListView)的CLICK被触发。这个怎么办?按理说组合框覆盖在列表框上面,单击组合框,应该是组合框收到CLICK消息,然后打开列表才对,现在是列表框收到CLICK消息,当然打不开组合框了。这个怎么办呢?

解决方案 »

  1.   

    combobox 应该以 listview 为父窗口 创建。
      

  2.   

    可以到 http://bbs.aisnote.com 去看看
      

  3.   

    为什么要把combobox拉到listview上?
    你点击的时候,是listview的窗口区域。
    消息传递的时候,先传给父窗口,在传到字窗口,你的listview和combobox父窗口都是同一个
      

  4.   

    我是准备用ComboBox做输入设备。据说ListView是没有编辑功能的,我只好用一个ComboBox来模拟。点击ListView某个项目的时候,把ComboBox移到这个项目上面并盖住它,然后实际上是在编辑ComboBox,但是最我可以修改ListView中被盖住的那个项目的内容。就好象能编辑一样。我的理解是:ComboBox既然盖住了Listview,那它就是当前窗口了,鼠标单击,鼠标消息应该发到ComboBox才对。奇怪的是我用编辑框就可以修改它,编辑框的父窗口同样是对话框,但是单击编辑框的时候,鼠标消息就不进ListView,直接入Edit了,这个这什么就可以呢?
      

  5.   

    这涉及zorder的问题,但windows 对 zorder的控制不是很好。
    你可以这样做:
    wndCombobox.SetWindowPos(ListViewHwnd, ) ,或者查一下 MSDN 关于SetwindowPos的用法。
    把 combox的zorder 提到 listview 之前。这样,点击的时候,就会点到 combox上了。第2中方法就是简单的 如上面我提到的,combox.create(listviewHwnd) , 把 listview 当作combox的父窗口,这样就可以了。
    edit 为什么可以,因为edit 只有一个窗口,而 combox 有2 个窗口,一个 dropdown的窗口,是 combox 内部创建的。点一下那个箭头,是show一下那个dropdown 的window。
    你可以去 bbs.aisnote.com 提问,直接给你个例子玩玩。
      

  6.   

    你的意思是不是控件重合了?
    这样设计是不合理的
    listctrl是可以做扩展的
    你搜XListCtrl
      

  7.   

    我的原意是想把文件中的数据显示在对话框上,并可以修改。就象浏览数据库时的一样。先是考虑用几百个编辑框,后来有人说这个太麻烦了。应该用ListView,可是弄了半天我才知道原来ListView只管显示,是不能修改的。有人建议我用一个编辑框模拟修改,方法就是点击列表视图的某个项目时,取得这个项目的大小和位置,然后把编辑框大小和位置设得和它一样,这样编辑框就覆盖在上面了,然后编辑编辑框,最后把编辑框的内容设置到列表视图的该项目上面,造成列表视图能够被编辑的效果。我试验结果是:编辑框可以覆盖在上面,也可以正常使用。但是列表视图的某些项目,我希望它只能输入指定的项目,具体的说就是只能输入声母或韵母,比如ang,ei等,输入别的东西不允许。于是我又想到组合框。可是我发现:组合框覆盖在列表视图上面的时候,却工作不正常。单击右侧的向下箭头,拉不出下拉列表。经过调试发现:当鼠标在组合框上面单击的时候,CLICK消息实际上进入了列表视图里面。可是为什么编辑框就工作正常呢?我的列表视图,编辑框和组合框均以对话框为父窗口,也就是说,它们之间是兄弟关系。为什么编辑框覆盖在列表视图的时候,单击消息就进入编辑框而不进入列表视图,而组合框覆盖在上面的时候就不行呢?从道理上讲:组合框覆盖在列表视图上面以后,在组合框上单击鼠标,消息应该发往组合框,对吧?可是为啥发到它的兄弟——列表视图去了呢?尽管鼠标单击的区域也是列表视图的区域,可是毕竟它是被覆盖住的啊,这是为什么呢?
      

  8.   

    把辅助的combox的父窗口设成listview再试试
      

  9.   

    我的程序一共要显示50到60个项目,每个项目需要5个编辑框,总共就是250到300个编辑框。你觉得这对系统消耗比较大,是吗?主要消耗的是什么资源?内存还是CPU?还是别的?
      

  10.   

    你不是说总共就是250到300个编辑框是可以的,combo不行。300combo 不少。
      

  11.   

    意即要编辑LISTCONTROL内容,手工拖上百个编辑框是不是太累了不如动态创建
      

  12.   

    你刚开始的思路还是不错的
    但是现在思路严重有问题
    我说的XListCtrl你看了么?
    不能实现你的需求么
      

  13.   

    既然这样,还不如直接用vsflex8.ocx插件.
      

  14.   

    我用的是C/SDK,网上搜到的XListCtrl好象都是C++,它本身好象就是一个类,是吧?
      

  15.   

    你用SDK做恐怕是比较麻烦
    XListCtrl确实是基于MFC的
    虽然你用SDK的方法完全可以做出一模一样的东西
    而且其实你用的应该也就是C++语言
    不过如果说让你去研究XListCtrl怎么在SDK下实现确实太不负责任了
      

  16.   

    感谢!暂时不用ListCtrl做了。