在对话框上放两个ListBox,再放置一个纵向滚动条(以下称EXTERNAL_VSCROLL),让三个控件位置交叉(重叠);
将滚动条EXTERNAL_VSCROLL的Tab Index设置为1;
在对话框的OnInitDialog中为ListBox1添加若干字符串,使其内容超过其大小,使ListBox1的纵向滚动条出现;
如下图左:
http://xsoft.bokee.com/inc/view.PNG第一个问题:
虽然EXTERNAL_VSCROLL的Tab Index为1,但是运行的时候,ListBox1遮住了EXTERNAL_VSCROLL;
如上图右第二个问题:
运行时,焦点自动在ListBox1上,但是ListBox2遮住了ListBox1;
如上图右第三个问题:
如何在运行时更改ZOrder;
试过了SetWindowPos,不能达到我想要的效果(使EXTERNAL_VSCROLL在ListBox1的上面)。第四个问题:
如何隐藏ListBox1的滚动条?我试过
1.用ModifyStyle去掉WS_VSCROLL属性,可以去掉,但是在SelChange和在ListBox1内选中一条按住鼠标左键上下拖动时滚动条重新出现;
2.试过InitializeFlatSB + FlatSB_ShowScrollBar,没有效果;
3.试过SetScrollPos,效果跟1一样;
4.试过用EXTERNAL_VSCROLL尝试挡住ListBox1自带的VScroll,结果是挡不住。

解决方案 »

  1.   

    在对话框上放两个ListBox,再放置一个纵向滚动条(以下称EXTERNAL_VSCROLL),让三个控件位置交叉(重叠); 
    将滚动条EXTERNAL_VSCROLL的Tab Index设置为1; 
    在对话框的OnInitDialog中为ListBox1添加若干字符串,使其内容超过其大小,使ListBox1的纵向滚动条出现; 
    如下图左: 
    第一个问题: 
    虽然EXTERNAL_VSCROLL的Tab Index为1,但是运行的时候,ListBox1遮住了EXTERNAL_VSCROLL; 
    如上图右 第二个问题: 
    运行时,焦点自动在ListBox1上,但是ListBox2遮住了ListBox1; 
    如上图右 第三个问题: 
    如何在运行时更改ZOrder; 
    试过了SetWindowPos,不能达到我想要的效果(使EXTERNAL_VSCROLL在ListBox1的上面)。 第四个问题: 
    如何隐藏ListBox1的滚动条?我试过 
    1.用ModifyStyle去掉WS_VSCROLL属性,可以去掉,但是在SelChange和在ListBox1内选中一条按住鼠标左键上下拖动时滚动条重新出现; 
    2.试过InitializeFlatSB + FlatSB_ShowScrollBar,没有效果; 
    3.试过SetScrollPos,效果跟1一样; 
    4.试过用EXTERNAL_VSCROLL尝试挡住ListBox1自带的VScroll,结果是挡不住。
      

  2.   

    EXTERNAL_VSCROLL在ListBox1的上面
    你就得改变画的顺序,使得系统先画ListBox1再画EXTERNAL_VSCROLL
    同理一样,条二个问题也是一样。
    如果要改变系统画的顺序,想必应该是可以实现的,不过不好意思我不知道。
      

  3.   

    第一个问题:  
    第二个问题:  好像不是跟Tab Order有关,应该是哪个控件后创建就在另一个的上面(指重叠的话),也就是说在加入控件时,控件的Id被加到resource.h中,系统创建控件窗口的顺序应该和这里的ID顺序相同第一个问题可以调用SetParent()把EXTERNAL_VSCROLL的父窗口指为ListBox1应该可以==============================================================================================
    The SetWindowPos function changes the size, position, and Z order of a child, pop-up, or top-level window
    应该可以改变子窗口z order,除非对话框内部做了调整