我需要使用以下参数调用CDocument::UpdateAllViews方法:
CView* pSender
LPARAM lHint = 0L
CString pHint = ""
MSDN文档中描述的一种方法是传递CObject派生类并覆盖CView派生类中的CView::OnUpdate
成员函数。
我还有其他办法吗?
答案 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 *pHint
和CDocument::UpdateAllViews
之间无法使用CView::OnUpdate
。因此指针永远不会用作CObject
。
所以有可能(但我不建议),您使用reinterpret_cast<CObject*>
指向CString
的指针以及稍后CView
的指针使用reinterpret_cast<CString*>
再次获取字符串指针。
可能但又一次:我不推荐它!