繁体   English   中英

MFC将消息发送到按钮(子级到父级)

[英]MFC Send message to a button (child to parent)

我想从子窗口(CDialog)向父窗口(CFormview)发送消息。 如果在子窗口上按“取消”按钮,则对话框应退出,并且程序应继续使用父窗口上的“停止”按钮的代码。

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);
}

谁能告诉我,怎么了? 也许发布更好的主意来发送按钮单击的消息?

您的代码实际上并不是在发送消息,而是在尝试直接调用处理程序。 以与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);

AfxGetMainWnd不返回指向CFormView的指针,而是返回指向CMainFrame的指针。 如果对话框是模式对话框,则只需检查显示对话框的DoModal调用的返回值即可。 或者您可以通过调用GetParent获得指向CFormView的指针来获得更好的运气。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM