Метод GetSel всегда возвращает ноль в элементе управления CEdit

В приложении MFC CEdit управление диалогом подкласс. В другом диалоге есть цифровая клавиатура, которая должна отправлять значения в это текстовое поле. Если текст выделен в элементе управления редактирования, GetSel Метод возвращает начальный и конечный индекс выделенного текста, и он будет заменен значением, полученным с клавиатуры. Это отлично работает.

Теперь, если подкласс CEdit стать частью обычая CComboBox контролировать GetSel метод на CEdit управление combobox всегда возвращает 0.

Кажется, я не понимаю, в чем причина и решение. И был бы признателен за любую помощь. Благодарю.

Обновить:

Вот фрагмент кода, который пытается получить выделенный текст

BOOL CBaseDialog::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN && pMsg->lParam == 2)
{
switch (pMsg->wParam)
{
case VK_TAB:
//NextDialogCtrl();
break;
case 'ret':
//keybd_event(VK_RETURN, 0, 0, 0);
return FALSE;
case '?':
break;
default:
if (m_LastFocused >= 0)
{
CWnd* pwnd = GetDlgItem(m_LastFocused);

if (pwnd->IsKindOf(RUNTIME_CLASS(CComboBox)) )
{
CCustomComboBox* ctl = (CCustomComboBox*)pwnd;

//this method always returns 0 index for the
//start and end position index
ctl->m_edit->GetSel(m_LastStPos, m_LastEndPos);
}
}
} break;
}
}

Комбо подклассами выглядит так:

BOOL CSymbolDlg::OnInitDialog()
{
CDialog::OnInitDialog();

//combo is CCustomComboBox type
combo.SubclassDlgItem(IDC_COMBO,this);

//rest of the code...
}

И контроль CEdit:

HBRUSH CCustomComboBox::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
if (nCtlColor == CTLCOLOR_EDIT)
{
//[ASCII 160][ASCII 160][ASCII 160]Edit control
if (m_edit.GetSafeHwnd() == NULL)
m_edit.SubclassWindow(pWnd->GetSafeHwnd());
}
else if (nCtlColor == CTLCOLOR_LISTBOX)
{
//ListBox control
if (m_listbox.GetSafeHwnd() == NULL)
m_listbox.SubclassWindow(pWnd->GetSafeHwnd());
}
HBRUSH hbr = CComboBox::OnCtlColor(pDC, pWnd, nCtlColor);
return hbr;
}

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]