使用CString参数调用UpdateAllViews

时间:2017-10-27 11:42:42

标签: c++ mfc views

我需要使用以下参数调用CDocument::UpdateAllViews方法:

  • CView* pSender
  • LPARAM lHint = 0L
  • CString pHint = ""

MSDN文档中描述的一种方法是传递CObject派生类并覆盖CView派生类中的CView::OnUpdate成员函数。

我还有其他办法吗?

1 个答案:

答案 0 :(得分:1)

没有没有!因为UpdateAllViews的最后一个参数需要一个指向对象的指针而CString不是从CObject派生的,所以你需要将该字符串包装在一个派生自CObject的类中:< / p>

class CMyHint : public CObject
{
public: 
    CString m_strHint;
};

...
CMyHint hint;
hint.m_strHint = _T("hint");
UpdateAllViews(nullptr,0,&hint);
...

void CMyView::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
    CMyHint *pMyHint = static_cast<CMyHint*)(pHint);
    CString str = pMyHint->m_strHint;
...

编辑:我只是查看了MFC的源代码。在CObject *pHintCDocument::UpdateAllViews之间无法使用CView::OnUpdate。因此指针永远不会用作CObject

所以有可能(但我不建议),您使用reinterpret_cast<CObject*>指向CString的指针以及稍后CView的指针使用reinterpret_cast<CString*>再次获取字符串指针。

可能但又一次:我不推荐它!