Предполагая, что элемент управления редактирования является дочерним классом класса CView
, лучше поместить обработчик OnUpdateUI()
в класс представления, а не в документ.
Например, еслиview-class * * * * * * * * * * (диалог), вы можете просто написать:
void CMyView::OnUpdateTextColor(CCmdUI *pCmdUI)
{
pCmdUI->Enable(GetFocus()==GetDlgItem(IDC_MYEDIT));
}
Этот фрагмент кода работает как для приложений SDI, так и для MDI.
Если класс представленияне CFormView
-приведенный (поле редактирования было создано программно), приведенный выше код можно немного изменить, и вместо вызова GetDlgItem()
вы должны перечислить список дочерних элементов представления (поищите в этом окне редактирования).
Если единственной причиной переопределения элемента управления редактирования было получение сообщений EN_SET/KILLFOCUS
, извините, это не стоило усилий, так как вы могли просто захватить их в коде представления.Тогда карта сообщений представления будет содержать:
ON_EN_SETFOCUS(IDC_MYEDIT, &CMyView::OnEnSetfocusMyEdit)
ON_EN_KILLFOCUS(IDC_MYEDIT, &CMyView::OnEnKillfocusMyEdit)
и код класса представления:
void CMyView::OnEnSetfocusMyEdit()
{
// TODO: Add your control notification handler code here
}
void CMyView::OnEnKillfocusMyEdit()
{
// TODO: Add your control notification handler code here
}
Они генерируются мастером.Перейдите на вкладку Class View, выберите свой класс и затем перейдите на страницу Events;в поддереве Controls вы можете найти свой элемент управления и добавить обработчики для его событий.Но все это не нужно, поскольку вы можете просто использовать GetFocus()/GetDlgItem()
, как предложено выше.
И, как сказали другие члены, вы можете получить доступ к классу документа из любого его представления, вызвав функцию GetDocument()
.