比如说:窗体1上有4个按钮,现在点击按钮4弹出另外一个窗体2,窗体2上有个按钮,现在我想点击窗体2上这个按钮让窗体1上按钮1、2、3,全部隐藏,应该怎么实现呢?求指点!!!

解决方案 »

  1.   

    我觉得
    1、设置全局变量
    2、窗口继承或者MDI之类的
      

  2.   

    5楼说的对。
    1.在窗体2的管理类中增加一个成员变量HWND g_wnd;
    2.在按钮4的响应函数中记录窗体1的句柄
    void CTestDlgDlg::OnBnClickedButton4()
    {
    // TODO: 在此添加控件通知处理程序代码
    CPopdlg popdlg;//CPopdlg是窗体2的管理类
    popdlg.g_wnd = GetSafeHwnd();
    popdlg.DoModal();
    }
    3.自定义一个消息映射用于向窗体1发送消息
    3.1 在Resource.h中声明一个宏#define WM_MSG  WM_USER+1000
    3.2 更新窗体1的消息映射表
    BEGIN_MESSAGE_MAP(CTestDlgDlg, CDialog)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    //}}AFX_MSG_MAP
    ON_BN_CLICKED(IDC_BUTTON4, &CTestDlgDlg::OnBnClickedButton4)
    ON_MESSAGE(WM_MSG,Response)//Response是自定义消息响应函数
    END_MESSAGE_MAP()
    4.在窗体2的按钮响应函数中发送消息
    void CPopdlg::OnBnClickedButton1()
    {
    // TODO: 在此添加控件通知处理程序代码
    ::SendMessage(g_wnd,WM_MSG,(WPARAM)(LPCTSTR)"隐藏",16);
    }
    5.在窗体1中编写响应代码:
    LRESULT CTestDlgDlg::Response(WPARAM wparam,LPARAM lparam)
    {
    CString m_recv = (LPCTSTR)wparam;
    if (m_recv == "隐藏")
    {
    m_btn1.ShowWindow(SW_HIDE);
    m_btn2.ShowWindow(SW_HIDE);
    m_btn3.ShowWindow(SW_HIDE);
    }
    return 1;
    }
      

  3.   

    只要得到了按钮的句柄,要改变其状态很容易。
    用ShowWindow就可以显示或隐藏了。其函数原型如下:
    BOOL ShowWindow(          HWND hWnd,
        int nCmdShow
    );移动也可以,用MoveWindows。函数原型:
    BOOL MoveWindow(          HWND hWnd,
        int X,
        int Y,
        int nWidth,
        int nHeight,
        BOOL bRepaint
    );