1、我继承CCombobox自绘控件
class MyCombobox : public CCombobox
{
...
}
2、在OnCtlColorListBox中子类化了m_listbox
3、在对话框中动态创建了一个实例,是DOWNLIST类型的
m_pCombo = new MyCombobox;
m_pCombo->Create(WS_CHILD|WS_VISIBLE|CBS_DROPDOWN|CBS_HASSTRINGS|CBS_AUTOHSCROLL,CRect(0,0,200,300),this,nID);
4、并用AddString()函数添加了三条字符串
m_pCombo->AddString("red");
m_pCombo->AddString("green");
m_pCombo->AddString("blue");
5、问题是:
在运行界面中,选择三条中某一条记录时,所选择的文本不能成为本控件的文本,我在调试时发现控件内部的DrawItem中可以正确获得鼠标所选择的项,然后我在控件内部用SetWindowText(str)设置此控件的文本,却不成功
谢谢各位高手指点,不尽感谢!
class MyCombobox : public CCombobox
{
...
}
2、在OnCtlColorListBox中子类化了m_listbox
3、在对话框中动态创建了一个实例,是DOWNLIST类型的
m_pCombo = new MyCombobox;
m_pCombo->Create(WS_CHILD|WS_VISIBLE|CBS_DROPDOWN|CBS_HASSTRINGS|CBS_AUTOHSCROLL,CRect(0,0,200,300),this,nID);
4、并用AddString()函数添加了三条字符串
m_pCombo->AddString("red");
m_pCombo->AddString("green");
m_pCombo->AddString("blue");
5、问题是:
在运行界面中,选择三条中某一条记录时,所选择的文本不能成为本控件的文本,我在调试时发现控件内部的DrawItem中可以正确获得鼠标所选择的项,然后我在控件内部用SetWindowText(str)设置此控件的文本,却不成功
谢谢各位高手指点,不尽感谢!
用CCOmboBox::SetCurSel比如选择了第一行,就用 this->SetCurSel(0);
SetCurSel(nIndex);后
我用GetWindowText(sz);sz还是为“”啊
取值别人已经给你说啦,不是用GetWindowText,这个和edit不一样
用SetCurSel(nIndex);因为是自绘控件,所以在OnPaint中,
OnPaint
{
...
CString sz;
GetWindowText(sz);//在这里sz的值还是为空
dc.DrawText(sz,&rc,DT_TOP | DT_SINGLELINE);
...
}
1.
你的sz是怎么定义的?2.
在初始化的时候你的combo可能没有sel,GetCurSel() 可能返回CB_ERR 你应该判断是否有选择,有选择的时候再
GetLBText
我先把OnPaint中的画文本这句先注释掉,主要是为了暂时不出异常,应该不会影响控件外部获取这个控件的文本吧,
但在控件外部,用m_pCombox->GetWindowText(strValue); strValue还是为空
m_pCombox->SetCurSel(0);
我用m_pCombox->SetCurSel(0);这句了,控件外部m_pCombox->GetCurSel还是-1
m_pCombox->SetCurSel(0);这句也是在控件外部吧?调用的时候AddString完成没有,也就是说,你的combo是不是空的?