c++ - 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"));
}
解决方案
假设您的CEditControl
实例是某种 的孩子CView
,您可以这样做:
void CEditControl::OnEnSetfocus()
{
CView *view = static_cast<CView *>(GetParent());
CMFCDoc *doc = static_cast<CMFCDoc *>(view->GetDocument());
doc->shape_onfocus_ = true;
...
}
推荐阅读
- java - JxBrowser Java,Gradle 问题
- client-server - 关于“向后/向前兼容性”的语义
- javascript - 如果在函数中也修改了状态,则去抖动不起作用
- typescript - 从长字符串 Typescript 中删除特定字符
- python - 在单个单元格而不是单独的单元格中打印多个值
- python - 在python中按两个值排序。一升一降
- angular - 为什么每次到达 Angular 延迟加载模块下的页面时都会初始化 NgRx 存储?
- sql - 计算平衡体积的窗口函数
- symfony - 无法使用多个提供商和防火墙注销 Symfony 5
- selenium - 无法通过 xpath 索引(硒)获取元素