MFC发送消息到按钮(孩子到父母)

时间:2015-08-04 18:16:44

标签: c++ button mfc parent sendmessage

我想从我的子窗口(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);
}

谁能告诉我,问题是什么? 也许发布一个更好的主意来发送按钮点击的消息?

2 个答案:

答案 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的指针。