我的程序是这样的,我用一个DIALOG做主程序启动,启动后生成另一个DIALOG(无模式对话框),我想用PostMessage函数向第二个DIALOG发送消息。
1。请问PostMessage的第一个参数HWND hWnd怎么得到?
2。我可不可以在第一个DIALOG中直接调用另一个DIALOG中的控件呢?(比如像VB中的直接Form2.Edit1.text = "asdfas")
1。请问PostMessage的第一个参数HWND hWnd怎么得到?
2。我可不可以在第一个DIALOG中直接调用另一个DIALOG中的控件呢?(比如像VB中的直接Form2.Edit1.text = "asdfas")
解决方案 »
- VS2008:对于基于MDI多文档的工程,如何使户界面中的右键菜单风格和框架的菜单栏一致?
- 帮我分析一下这个程序,打开文件,显示程序内容
- 如何在CListCtrl中设置改变某一行的背景色或字体色
- 在局域网中,怎么发现一台主机是连在HUB上还是在交换机上,通过程序
- 严重BS倒粪帖!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 怎样让我的程序开机自动运行
- 怎样获得当前活动的窗口的句柄?
- 100分求助如何用DirectShow技术创建ASF格式的文件
- 请问VC高手们你们一般开发项目时用VC工具第一步是做什么
- socket的入门问题1
- 棘手的问题
- 简单的问题,我有两个对话框(一个主,一个从),我怎样才能在其中一个对话框中“得到另一个对话框的句柄?”
2:可以。先用dlg.GetDlgItem找到要操纵的控件。
HWND hDlg, // handle of dialog box //有EDIT框的对话框的句 柄
IDE_EDIT, // identifier of control // EDIT控件的ID
WM_SETTEXT, // message to send //消息
WPARAM wParam, // first message parameter
"asdfas" // second message paramete//字符串
);
2. 以你的例子和CDialog dlg2;为例:
dlg2.GetDlgItem(IDC_EDIT1)->SetWindowText("asdfas");
或者:dlg2.SetDlgItemText(IDC_EDIT1, "asdfas");
(当然,你也可以用动态数据交换技术,为IDC_EDIT1关联一个CString m_strEdit1;这样:
dlg2.m_strEdit1 = "asdfas";
dlg2.UpdateData(FALSE);)
dlg2.m_pFirstDlg = this->m_hWnd;ShowWindow(dlg2);
...
CAlarm256Dlg * m_pDlg=(CAlarm256Dlg *)GetDlgItem(IDD_ALARM256_DIALOG);int a = ::PostMessage(m_pDlg->GetSafeHwnd(), WM_MSG_ONE, 0, 0);
//这个a返回是1,应该成功了吧!但是我消息没有收到,而且我监视m_pDlg它的内容始终是0x00000000,这不对吧
m_pDlg->GetDlgItem(IDC_MSG)->SetWindowText("asdfas");
//这么执行出现非法操作对话框
我有两个对话框类
CAlarm256Dlg
CMainBoardDlg(主的,在OnInitDilog中生成CAlarm256Dlg的无模式对话框).
在CAlarm256Dlg中增加一个自定义消息,代码如下:我按照你的代码做的,代码如下:
const WM_MSG_ONE = WM_USER + 100;
afx_msg LONG OnBtnOne(WPARAM wParam, LPARAM lParam);CAlarm256Dlg * m_pDlg=(CAlarm256Dlg *)GetDlgItem(IDD_ALARM256_DIALOG);BEGIN_MESSAGE_MAP(CAlarm256Dlg, CDialog)
//{{AFX_MSG_MAP(CAlarm256Dlg)
//}}AFX_MSG_MAP
ON_MESSAGE(WM_MSG_ONE, OnBtnOne)
END_MESSAGE_MAP()LONG CAlarm256Dlg::OnBtnOne(WPARAM wParam, LPARAM lParam)
{
m_strMsg = _T("按键1");
return 0;
}
//上面的这些代码,没错吧?然后在CMainBoardDlg中的一个按键函数如OnBtnOne()中增加如下代码?int a = ::PostMessage(m_pDlg->GetSafeHwnd(), WM_MSG_ONE, 0, 0);
//这个a返回是1,应该成功了吧!但是我消息没有收到,而且我监视m_pDlg它的内容始终是0x00000000,这不对吧?结果是程序,没有反映,看来是消息没有收到。请再帮忙解释一下好吗?
CAlarm256Dlg * m_pDlg=(CAlarm256Dlg *)GetDlgItem(IDD_ALARM256_DIALOG);
不能这么取
你的m_pDlg一定是0x0PostMessage()永远返回1应该这样m_pDlg = new CAlarm256Dlg(this);
HWND hHandle = pDlg->GetSafeHwnd();