【问题标题】:MFC Send message to a button (child to parent)MFC 向按钮发送消息(子到父)
【发布时间】:2015-08-04 18:16:43
【问题描述】:

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

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

【问题讨论】:

  • 你能告诉我们哪个错误/错误信息吗?
  • 请显示调用堆栈。
  • 您是否考虑过在不通过 MFC 的情况下学习 Windows 编程?你应该。它会教你很多与你使用的任何框架相关的东西。

标签: c++ button mfc parent sendmessage


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    AfxGetMainWnd 不返回指向 CFormView 的指针,它返回指向 CMainFrame 的指针。如果您的对话框是模态的,您可以简单地检查显示对话框的 DoModal 调用的返回值。或者,调用 GetParent 以获取指向 CFormView 的指针可能会更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-08
      • 2021-12-09
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      • 2020-02-08
      • 1970-01-01
      相关资源
      最近更新 更多