关于CComboBox的使用,编辑项的文字

Drop List 模式 没啥说的。

 1 int num = m_cbTable.GetCount();
2
3 FBusRouteTimeTable* pTable = (FBusRouteTimeTable*)itr->CurrentItem();
4
5 m_cbTable.InsertString(num, pTable->GetName().c_str());
6
7 m_cbTable.SetItemDataPtr(num, pTable);
8
9
10
11 m_cbTable.SetCurSel(0);
12
13

 

主要说说Dropdown模式。因为是可编辑的,我想实现一个即时编辑保存的功能。

Dropdown模式下的SetCurSel()得到的永远是-1,因为它没有选中任何item,只是用一个CEdit来显示了当前的item的字符,所以要改变item的内容就要自己设置一个变量来记录“当前选中的item”。

需要响应一个CBN_KILLFOCUS消息,然后删掉选中item,再在同一位使用新的字符串置插入一个新的item。

 

 1 void FTabDialogBusLineTime::OnCbnKillfocusComboBuslineTime()
2
3 {
4
5 // TODO: 在此添加控件通知处理程序代码
6
7 if (m_curTableIndex == -1)
8
9 {
10
11 return;
12
13 }
14
15 CString cstr;
16
17 m_cbTable.GetWindowText(cstr);
18
19 CString cstrOld;
20
21 m_cbTable.GetLBText(m_curTableIndex, cstrOld);
22
23 if (cstr!="" && cstr!=cstrOld)
24
25 {
26
27 FBusRouteTimeTable* pTemp = (FBusRouteTimeTable*)m_cbTable.GetItemDataPtr(m_curTableIndex);
28
29 pTemp->SetName(cstr.AllocSysString());
30
31 SetComboBoxItem(m_cbTable, m_curTableIndex, cstr);
32
33 m_cbTable.SetCurSel(m_curTableIndex);
34
35 }
36
37 }
38
39
40 inline bool SetComboBoxItem( CComboBox& cbCtrl, int index, LPCTSTR newText, void* newDataPtr = NULL)
41
42 {
43
44 void* pTemp = newDataPtr;
45
46 if (newDataPtr == NULL)
47
48 {
49
50 pTemp = cbCtrl.GetItemDataPtr(index);
51
52 }
53
54 if (cbCtrl.DeleteString(index) == CB_ERR )
55
56 {
57
58 return false;
59
60 }
61
62 cbCtrl.InsertString(index, newText);
63
64 cbCtrl.SetItemDataPtr(index, pTemp);
65
66 return true;
67
68 };

 

你可能感兴趣的:(combobox)