首页 > 解决方案 > MFC 编辑控制消息句柄访问 Document 对象

问题描述

我创建了一个新类扩展 CEdit 来覆盖一些消息句柄。

我的最终目标是当编辑控件成为焦点时,一些工具栏按钮变得可用。

我在 doc 中创建了一个 bool 变量。然后将 pCmdUI->enable() 设置为此布尔值。onfocus 在新的编辑控件类中被覆盖。我无法从 onfocus 消息句柄更新这个 bool vairbale。

void CMFCDoc::OnUpdateTextColor(CCmdUI *pCmdUI)
{
// TODO: Add your command update UI handler code here
pCmdUI->Enable(shape_onfocus_);
}

class CMFCDoc : public COleServerDoc
{
...
bool shape_onfocus_;
}

//edit control
#include <afxwin.h>
class CEditControl :
public CEdit
{
public:
CEditControl();
~CEditControl();
DECLARE_MESSAGE_MAP()
afx_msg void OnEnSetfocus();
};


void CEditControl::OnEnSetfocus()
{
//----- I want to update shape_onfocus_ here. -----

this->SetWindowTextA(_T("Hello world"));
}

标签: c++visual-c++mfc

解决方案


假设您的CEditControl实例是某种 的孩子CView,您可以这样做:

void CEditControl::OnEnSetfocus()
{
    CView *view = static_cast<CView *>(GetParent());
    CMFCDoc *doc = static_cast<CMFCDoc *>(view->GetDocument());
    doc->shape_onfocus_ = true;
    ...
}

推荐阅读