Фокус не изменяется при нажатии клавиши табуляции во вложенном классе CWnd-Derived

Окружающая среда: VS2013, MFC, C ++

У меня есть производное от CDialog диалоговое окно с 2 статическими кнопками (ОК, Отмена), созданное с помощью редактора диалогов. Кроме того, диалоговое окно должно содержать динамически создаваемый экземпляр класса CWnd-Derived, который содержит 2 поля редактирования.

Проблема в том, что я не могу переместить фокус с помощью клавиши табуляции между полями редактирования, а также я не могу сделать так, чтобы одно из окон имело начальный фокус при открытии диалога. Когда я нажимаю клавишу табуляции, первое окно редактирования становится сфокусированным, но с этого момента я не могу отодвинуть фокус от клавиши табуляции (щелчок мышью работает).

Я уже создал CWnd со стилем WS_EX_CONTROLPARENT, но он все еще не работает, чтобы переместить фокус. Так в чем же проблема? Что я сделал до сих пор:

//the CDialog-class which should be the container for the CWnd
//.h
class CDlgSelCatalogItem : public CDialog {
CListFilterInput _ctrlList; //CWnd-Derived, contains 2 Edit-Boxes
}

//.cpp
BOOL CDlgSelCatalogItem::OnInitDialog()
{
CRect rectList(10, 10, 100, 50);
_ctrlList.Create(rectList, this);
}

//the CWnd-derived class that contains 2 edit-boxes
//.h
class CListFilterInput : public CWnd {
BOOL Create(const RECT& rect, CWnd* pParentWnd);

//2 Edit-Boxes
CEdit _ctrl1;
CEdit _ctrl2;
}

BOOL CListFilterInput::Create(const RECT &rect, CWnd *pParentWnd)
{
BOOL bRetVal;

bRetVal = CWnd::CreateEx(WS_EX_CONTROLPARENT, NULL, _T(""), WS_CHILDWINDOW | WS_VISIBLE,
rect, pParentWnd, CTRL_ID_THIS);

if (bRetVal == TRUE){
//1st box
CRect rectTextbox = ...; //calculate rect fox box

bRetVal = _ctrl1.Create(
WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP | ES_LEFT | ES_AUTOHSCROLL,
rectTextbox, this, CTRL_ID_TEXTBOX);

//2nd box above 1st
rectTextbox.MoveToY(rectTextbox.top - rectTextbox.Height());
bRetVal = _ctrl1.Create(
WS_CHILDWINDOW | WS_VISIBLE | WS_TABSTOP | ES_LEFT | ES_AUTOHSCROLL,
rectTextbox, this, CTRL_ID_TEXTBOX+1);

//set input-focus initially on 1st textbox - doesnt work
_ctrl1.SetFocus();
}

return bRetVal;
}

3

Решение

меню-> формат-> вкладка Порядок (Ctrl + D)
эта вещь обеспечивает порядок вкладок вашего диалога. Как только вы установите свой заказ, нажмите за пределами диалогового окна. Я надеюсь, что это поможет

0

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