使用 CString 参数调用 UpdateAllViews
Calling UpdateAllViews with a CString parameter
我需要使用以下参数调用 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 *pHint
在CDocument::UpdateAllViews
和CView::OnUpdate
之间没有使用。因此,指针永远不会用作CObject
。
因此,有可能(但我不建议这样做)使用指向CString
的指针reinterpret_cast<CObject*>
,稍后在CView
中使用reinterpret_cast<CString*>
再次获取字符串指针。
可能,但再次:我不会推荐它!