关于CListBox和CComboBox修改窗口Style的问题

 

在界面编程中,经常遇到修改CListBox和CComboBox窗口式样(style)的问题.可恼的时,一旦窗口创建后(Creation),没有办法可以修改窗口式样.也就是说,ModifyStyle()和SetWindowLong()都不起作用(但调用会成功).如下面的代码:

// you can not change the style of a list box dynamically, after creation.

A. Use ModifyStyle()

m_ListBox.ModifyStyle(0,WS_HSCROLL|LBS_MULTICOLUMN);

B. Use SetWindowLong()

long style=GetWindowLong(m_ListBox,GWL_STYLE);

style|=LBS_MULTICOLUMN;

style|=WS_HSCROLL;

SetWindowLong(m_ListBox1,GWL_STYLE,style);

而在模式对话框运用中,系统是不产生OnCreate()消息的,所以就没机会修改窗口式样了.

1. 关于"CListBox"的多列功能:

当使用该功能时”垂直滚动”将不起作用,这是因为第一列后的列要等前一列的行用完后才开始使用,这很象报纸上的”栏”,有时也叫”蛇形列(snaking column)”.如果窗口只有一行, 多列显示的list象一个横向list.除非一定要这样做,不如用TabStop功能.

2. 关于"CComboBox"中list的多列功能:

CComboBox其实有3个窗口,分别为combo,edit,list.要得到edit和list的窗口句柄不容易可以参考”http://support.microsoft.com/default.aspx?scid=kb;en-us;Q174667”. 在”.net”下可以使用GetComboBoxInfo(),可惜VC++6.0下无这个函数.

// .net

//typedef struct ComboBoxInfo_tag

//{

//int cbSize;

//RECT rcItem;

//RECT rcButton;

//int  stateButton;

//HWND hwndCombo;

//HWND hwndEdit;

//HWND hwndList; // That's what I'm interested in....

//} COMBOBOXINFO,*PCOMBOBOXINFO;

//[DllImport("user32")] public static extern bool

//BOOL GetComboBoxInfo(HWND hwndCombo,COMBOBOXINFO& info);

 

//  COMBOBOXINFO info;

//  BOOL bl=GetComboBoxInfo(this->m_hWnd, info);

CComboBox中的listbox叫”COMBOLBOX”,不过跟CLlistBox好像一样(?).

3. 下面说一下对CComboBox中的listbox修改式样的方法:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值