比如我的程序有A和B 2个对话框,程序启动时A对话框出现,操作之后设置B对话框的某项指定的菜单为禁止使用(这个也不知道如何实现,请大家帮帮忙),然后再隐藏自身。
然后
B *Bdlg;
Bdlg->Create(B_ID);
BDlg->Show(SW_SHOW);现在问题是我想让B对话框关闭后,已经隐藏的A对话框也关闭,于是我在B的OnClose()消息里写到:A *Adlg = new A();
Adlg->OnClose(); //这么用不行,会提示不能访问A的受保护成员
Adlg->OnCancel(); //也不行,提示跟上面一样于是我就
Adlg->Create(A_ID); 
Adlg->OnCancel();   //还是不行,这样完全就是出现的一个新的对话框了,不是原来那个隐藏的了请大家帮帮忙,为这个问题我都搞了好几天了,我希望能用指针方便的操作2个对话框,最好不要用SendMessage(),如果只有用SendMessage()才能实现的话,要如何具体的使用SendMessage()。
还有那个关于操作另1个对话框菜单的问题。
求大家帮帮忙吧

解决方案 »

  1.   

    1.
    B *Bdlg;
    Bdlg->Create(B_ID);
    BDlg->Show(SW_SHOW);
    你这段代码没出问题?Bdlg没有new就Create?2.
    修改菜单状态用EnableMenuItem3.
    A *Adlg = new A();
    Adlg->OnClose(); //这么用不行,会提示不能访问A的受保护成员
    Adlg->OnCancel(); //也不行,提示跟上面一样问题太多:第一,你这个Adlg是个指针,指向的是新new出来的A,而不是被隐藏的A。
    第二,OnClose和OnCancel是保护成员,不能直接调用,建议复习下C++
    第三,Adlg的窗口并没有建立起来,试图做销毁窗口的操作会导致程序崩溃
      

  2.   

    解决办法是,在B中,增加一个A类的指针,在Bdlg的Create之后,把隐藏的那个A的指针赋给这个指针。然后在B的OnCancel中,调用A的DestroyWindow。简单示例一下:
    A pA = new A;
    pA->Create(A_ID);
    pA->Show(SW_SHOW);
    pA->ShowWindow(SW_HIDE); // 隐藏B *pB;
    pB->Create(B_ID);
    pB->m_pA = pA;
    pB->Show(SW_SHOW);然后在B::OnCancel中
    if (m_pA)
    {
        m_pA->DestroyWindow();
        m_pA = NULL;
    }
    CDialgo::OnCancel();
      

  3.   

    用消息通信啊
    两个窗口互相知道hwnd就可以了。
    A要让B的某一项变虚,给它发消息,
    B中要写处理该消息的代码。
    B要让A关闭,给它发消息。