有2个对话框类CADlg,CBDlg
在CADlg中定义一成员,此成员类型是CBDlg
class CADlg
{
...
protected:
CBDlg m_dlgB;}然后在A的InitDialog中
m_dlgB.create(IDD_DIALOG_B, this)//IDD_DIALOG_B是CBDlg的模板名这样在A对话框中生成一个B现在我在B中的某个事件中(比如LBUTTONDOWN)添加如下函数
((CADlg*)m_pParentWnd)->PostMessage(TTM_MYMSG, 0, 0);//TTM_MYMSG是自定义消息
向父窗口发送一个自定义消息编译无问题,运行时候点B激发LBUTTONDOWN出现访问错误,我试图通过
((CADlg*)m_pParentWnd)->SendMessage(TTM_MYMSG, 0, 0);或者
::PostMessage(((CADlg*)m_pParentWnd)->GetSaftWnd(), TTM_MYMSG, 0, 0);
来发送消息都出问题。但是我通过((CADlg*)m_pParentWnd)->DoSomething()直接调用CADlg的某个成员函数DoSomething确没有问题。
请问这是为什么?

解决方案 »

  1.   

    m_pParentWnd是NULL,((CADlg*)m_pParentWnd)->GetSafeHwnd()也是NULL
      

  2.   

    GetParent ()->SendMessage(TTM_MYMSG,   0,   0);
      

  3.   

    2楼的正确
    不知道m_pParentWnd是你定义的还是系统的变量看看他的说明
      

  4.   

    实在不行,最稳妥的办法,在CBDlg中加入一个方法:SetParentWnd(CWnd*)并保存形参指针为成员变量, 然后CADlg调用该方法传递自身指针,然后使用成员变量访问父窗口(CADlg)或者向父窗口发送消息!
      

  5.   

    m_pParentWnd是对话框类父类CDialog定义的,通过CREATE(IDD_DIALOGB, this)传入的,绝对不是空的,
    否则通过((CADlg*)m_pParentWnd)-> DoSomething()直接调用CADlg的某个成员函数DoSomething就会有问题,这里我调用成员函数DoSOmething()是没有问题!问题出在POSTMESSAGE和SENDMESSAGE!此外,假如在A中定义的B成员是指针
    CBDlg*  m_pdlgB; 
    通过
    New然后CREATE
    这样产生的来POST,SEND却没有问题很好奇想知道为什么
      

  6.   

    ::PostMessage(((CADlg*)*)GetParent())->m_hWnd,TTM_MYMSG,0,0);
    ::SendMessage(((CADlg*)*)GetParent())->m_hWnd,TTM_MYMSG,0,0;
    都没问题