Я добавляю поле со списком в свой CTreeListHeader (размещенный в диалоговом окне). Как перехватить события для этого Combo в приложении MFC?
Если я добавлю стандартный макрос MFC MFC
ON_CBN_SELCHANGE(IDC_CMB, &CMFCtestDlg::OnCbnSelChangeCmb)
это не работает, потому что ComboBox отправляет уведомление в CTreeList, а nno в диалоговое окно.
Это пример кода:
BOOL CMFCtestDlg::OnInitDialog()
{
CMjAcDialog::OnInitDialog();
RECT rect;
m_cTree.InsertColumn(0, L"xxx", 0, 80);
m_cTree.InsertColumn(1, L"Popis", 0, 180);
CHeaderCtrl* pHead = m_cTree.GetHeaderCtrl();
pHead->GetItemRect(0, &rect);
if (pHead != NULL)
{
m_pCombo = new CComboBox;
RECT cmbRect;
cmbRect.left = rect.left + 1;
cmbRect.top = rect.top + 1;
cmbRect.right = rect.right - 1;
cmbRect.bottom = rect.top + 14;
m_pCombo->Create(CBS_DROPDOWN | CBS_HASSTRINGS | WS_CHILD | WS_OVERLAPPED | WS_VISIBLE, cmbRect, pHead, IDC_CMB);
m_pCombo->GetWindowRect(&cmbRect);
RECT rect;
pHead->GetClientRect(&rect);
pHead->MoveWindow(rect.left, rect.top, (rect.right - rect.left), cmbRect.bottom - cmbRect.top + 2, TRUE);
pHead->Invalidate();
}
TCHAR Planets[9][10] =
{
TEXT("Mercury"), TEXT("Venus"), TEXT("Terra"), TEXT("Mars"),
TEXT("Jupiter"), TEXT("Saturn"), TEXT("Uranus"), TEXT("Neptune"),
TEXT("Pluto??")
};
TCHAR A[16];
int k = 0;
memset(&A, 0, sizeof(A));
for (k = 0; k GetSafeHwnd(), (UINT)CB_ADDSTRING, (WPARAM)0, (LPARAM)A);
}
for (auto const& prvek : *m_pTab)
{
int pos = m_cTree.InsertItem(0, L"adfadf");
m_cTree.SetItemData(pos, (DWORD_PTR)&prvek.first);
m_cTree.SetItemText(pos, 1, L"asdasd");
}
return TRUE;
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... box-events