我想从我的子窗口(CDialog)向父窗口(CFormview)发送一条消息。如果我在子窗口按下取消按钮,对话框应该退出,程序应该继续使用父窗口的STOP按钮代码。
void ChildDialog::OnBnClickedCancel()
{
CDTParentView *pButtonWnd = (CDTParentView *)AfxGetMainWnd();
pButtonWnd->OnBnClickedbuttonStop();
CDialogEx::OnCancel();
}
但是这个objore.cpp中有一个错误:
BOOL CObject::IsKindOf(const CRuntimeClass* pClass) const
{
ENSURE(this != NULL);
// it better be in valid memory, at least for CObject size
ASSERT(AfxIsValidAddress(this, sizeof(CObject)));
// simple SI case
CRuntimeClass* pClassThis = GetRuntimeClass(); <------- error
ENSURE(pClassThis);
return pClassThis->IsDerivedFrom(pClass);
}
谁能告诉我,问题是什么? 也许发布一个更好的主意来发送按钮点击的消息?
答案 0 :(得分:3)
您的代码实际上并未发送消息,而是尝试直接调用处理程序。按照与Windows相同的方式模拟按钮的单击,然后您现有的代码将自然地处理它。
CWnd * pMain = AfxGetMainWnd();
CWnd * pButton = pMain->GetDlgItem(ID_STOP_BUTTON);
pMain->PostMessage(WM_COMMAND, MAKEWPARAM(ID_STOP_BUTTON, BN_CLICKED), (LPARAM)pButton->m_hWnd);
答案 1 :(得分:1)
AfxGetMainWnd不返回指向CFormView的指针,它返回指向CMainFrame的指针。如果对话框是模态的,则只需检查显示对话框的DoModal调用的返回值即可。或者你可以更好地调用GetParent来获取指向CFormView的指针。