hamishd wrote:
Hello, I'm creating some CComboBoxes at runtime, as I don't know how
many I'll need, it depends on the data entering the parent dialog.
So I declare a member variable in my Dialog to hold my CComboBoxes:
CComboBox *combos[10];
Then, in the OnInitDialog(), is do this:
for(int i=0;i<nCombos;i++){
combos[i] = new CComboBox;
rect.top = 1; rect.bottom = rect.top + 240; rect.left = 0; rect.right
= 100;
if(!combos[i]->Create(CBS_DROPDOWNLIST | CBS_SORT | WS_VISIBLE |
WS_TABSTOP | WS_VSCROLL, rect, this, i))
{
TRACE(_T("Failed to create combo-box\n"));
return FALSE;
}
combos[i]->AddString("Example text");
combos[i]->AddString("More text..");
combos[i]->SetWindowPos(NULL, 200, i*30, 0, 0, SWP_NOZORDER |
SWP_NOSIZE);
}
This is creating them ok. However, I want to know how to handle changes
in selection etc, as I want to enable / disable certain boxes depending
on the selections in each box. Also, I was unsure what to put in the
4th parameter of the Create() function.
Can anyone help?
Reserve a sequential range of IDs for your controls. Something like
this in resource.h...
#define IDC_COMBO_0 500
#define IDC_COMBO_9 509
Assign these IDs to the controls in your create call 4th param:
IDC_COMBO_0 + i
And put ON_CONTROL_RANGE in your dialog's message map for each message
you want to handle:
ON_CONTROL_RANGE(CBN_SELCHANGE, IDC_COMBO_0, IDC_COMBO_9, OnSelChange)
Then this gets the messages...
void Cxx::OnSelChange(UINT nID)
{ UINT comboID = nID - IDC_COMBO_0;
Thanks Scott. Perfect