基于对话框的MFC AppWizard[exe]工程中,通过响应对话框上得按钮,动态建立一个新的对话框,怎么响应这个新的对话框上得按钮
基于对话框的MFC AppWizard[exe]工程中,通过响应对话框上得按钮,动态建立一个新的对话框,如何响应这个新的对话框上得按钮?
第一步:建立基于对话框的MFC AppWizard[exe]工程MyDialog
第二步:在对话框上放置按钮,点击该按钮可打开新的对话框,该按钮的响应函数如下:
void CMyDialogDlg::OnOpendialog()
{
// TODO: Add your control notification handler code here
}
第三步:插入新的对话框资源CTestDialog,新对话框对应的类命名为CTestDialog
第四步:新对话框上放置各种编辑框和按钮:
第五步:响应原对话框上的“打开对话框”按钮,显示新对话框
void CMyDialogDlg::OnOpendialog()
{
// TODO: Add your control notification handler code here
CTestDialog dlg;
dlg.DoModal();
}
第五步:响应新对话框的各种操作,例如新对话框上得按钮,代码如下
void CTestDialog::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//打开文件对话框
char szPath[MAX_PATH]; //存放选择的目录路径
CString str;
ZeroMemory(szPath, sizeof(szPath));
BROWSEINFO bi;
bi.hwndOwner = m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = szPath;
bi.lpszTitle = "请选择需要打包的目录:";
bi.ulFlags = 0;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
//弹出选择目录对话框
LPITEMIDLIST lp = SHBrowseForFolder(&bi);
if(lp && SHGetPathFromIDList(lp, szPath))
{
str.Format("选择的目录为 %s", szPath);
AfxMessageBox(str);
GetDlgItem(IDC_ESigDir)->SetWindowText(szPath);
strcpy(sig_direct,szPath);
}
else
AfxMessageBox("无效的目录,请重新选择");
CDialog::OnLButtonDown(nFlags, point);
}
问题:运行程序,出现原对话框,单击原对话框上“打开对话框”按钮,出现新对话框,但第五步中无法响应动态生成的新对话框上得按钮?请问各位前辈怎么解决?
------解决方案--------------------
void CTestDialog::OnLButtonDown(UINT nFlags, CPoint point); 你这响应的是鼠标左键按下消息,又不是按钮的消息。
------解决方案--------------------
LS正解
要用按钮事件才行呀
第一步:建立基于对话框的MFC AppWizard[exe]工程MyDialog
第二步:在对话框上放置按钮,点击该按钮可打开新的对话框,该按钮的响应函数如下:
void CMyDialogDlg::OnOpendialog()
{
// TODO: Add your control notification handler code here
}
第三步:插入新的对话框资源CTestDialog,新对话框对应的类命名为CTestDialog
第四步:新对话框上放置各种编辑框和按钮:
第五步:响应原对话框上的“打开对话框”按钮,显示新对话框
void CMyDialogDlg::OnOpendialog()
{
// TODO: Add your control notification handler code here
CTestDialog dlg;
dlg.DoModal();
}
第五步:响应新对话框的各种操作,例如新对话框上得按钮,代码如下
void CTestDialog::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//打开文件对话框
char szPath[MAX_PATH]; //存放选择的目录路径
CString str;
ZeroMemory(szPath, sizeof(szPath));
BROWSEINFO bi;
bi.hwndOwner = m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = szPath;
bi.lpszTitle = "请选择需要打包的目录:";
bi.ulFlags = 0;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
//弹出选择目录对话框
LPITEMIDLIST lp = SHBrowseForFolder(&bi);
if(lp && SHGetPathFromIDList(lp, szPath))
{
str.Format("选择的目录为 %s", szPath);
AfxMessageBox(str);
GetDlgItem(IDC_ESigDir)->SetWindowText(szPath);
strcpy(sig_direct,szPath);
}
else
AfxMessageBox("无效的目录,请重新选择");
CDialog::OnLButtonDown(nFlags, point);
}
问题:运行程序,出现原对话框,单击原对话框上“打开对话框”按钮,出现新对话框,但第五步中无法响应动态生成的新对话框上得按钮?请问各位前辈怎么解决?
------解决方案--------------------
void CTestDialog::OnLButtonDown(UINT nFlags, CPoint point); 你这响应的是鼠标左键按下消息,又不是按钮的消息。
------解决方案--------------------
LS正解
要用按钮事件才行呀