使用 CString 参数调用 UpdateAllViews

Calling UpdateAllViews with a CString parameter

本文关键字:UpdateAllViews 调用 参数 CString 使用      更新时间:2023-10-16

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

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

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

还有其他方法可以做到这一点吗?

不,

没有!由于 UpdateAllView 的最后一个参数需要一个指向对象的指针,并且CString不是派生自CObject因此您需要将字符串包装在派生自 CObject 的类中:

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::UpdateAllViewsCView::OnUpdate之间没有使用。因此,指针永远不会用作CObject

因此,有可能(但我不建议这样做)使用指向CString的指针reinterpret_cast<CObject*>,稍后在CView中使用reinterpret_cast<CString*>再次获取字符串指针。

可能,但再次:我不会推荐它!