vc6.0 怎么在一个窗体中改变另一个窗体上的按钮状态? 比如说:窗体1上有4个按钮,现在点击按钮4弹出另外一个窗体2,窗体2上有个按钮,现在我想点击窗体2上这个按钮让窗体1上按钮1、2、3,全部隐藏,应该怎么实现呢?求指点!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我觉得1、设置全局变量2、窗口继承或者MDI之类的 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+10003.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;} 只要得到了按钮的句柄,要改变其状态很容易。用ShowWindow就可以显示或隐藏了。其函数原型如下:BOOL ShowWindow( HWND hWnd, int nCmdShow);移动也可以,用MoveWindows。函数原型:BOOL MoveWindow( HWND hWnd, int X, int Y, int nWidth, int nHeight, BOOL bRepaint); 求助? 请教高手,XML文件读取问题 谁知道CPU-Z中的SPD信息是怎么读的? 求驱动自动安装的方法 如何弥补删除控件后造成的错误? 大家讨论一下看能不能实现这样的一个程序,MFC窗口程序同时支持命令行参数执行 向对HOOK API以及WINSOCKET熟悉的朋友请教,WIN2/XP下我应该HOK哪个API?? 全局变量新问题,高手帮忙 请大家介绍一本com+的初学者看的书好吗? 注册表如何快速定位ProgID? CLSIDFromProgID()的计算复杂度是多少? 用vc++中的MFC如何删除txt文本中的信息? 菜单中的字体可以改变大小吗?
1、设置全局变量
2、窗口继承或者MDI之类的
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;
}
用ShowWindow就可以显示或隐藏了。其函数原型如下:
BOOL ShowWindow( HWND hWnd,
int nCmdShow
);移动也可以,用MoveWindows。函数原型:
BOOL MoveWindow( HWND hWnd,
int X,
int Y,
int nWidth,
int nHeight,
BOOL bRepaint
);