为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

无模式对话框和Windows通用对话框 

2018-01-14 9页 doc 26KB 36阅读

用户头像

is_321575

暂无简介

举报
无模式对话框和Windows通用对话框 无模式对话框和Windows通用对话框  无模式对话框和Windows通用对话框 1、利用对话框编辑器创建一个对话框资源 2、用ClassWizard来创建CEx07aDialog类 3、添加变量到CEx07aDialog类中 IDC_EDIT1----〉 m_strEdit1 4、编辑CEx07aDialog.h增加视图指针和函数原型 private: CView* m_pView; public: CEx07aDialog(CView* pView); BOOL Create(); 5、编辑CEx0...
无模式对话框和Windows通用对话框 
无模式对话框和Windows通用对话框  无模式对话框和Windows通用对话框 1、利用对话框编辑器创建一个对话框资源 2、用ClassWizard来创建CEx07aDialog类 3、添加变量到CEx07aDialog类中 IDC_EDIT1----〉 m_strEdit1 4、编辑CEx07aDialog.h增加视图指针和函数原型 private: CView* m_pView; public: CEx07aDialog(CView* pView); BOOL Create(); 5、编辑CEx07aDialog.h并在其中定义WM,GOODBYE消息ID #define WM_GOODBYE WM_USER + 5 //常量WM_USER是用户自定义消息中可利用的第一个消息 6、在文件CEx07aDialog.cpp中加入无模式对话框的构造函数 CEx07aDialog::CEx07aDialog(CView* pView) // modeless constructor { m_pView = pView; } 7、在CEx07aDialog.cpp文件中加进Create函数 BOOL CEx07aDialog::Create() { return CDialog::Create(CEx07aDialog::IDD); } 8、编辑CEx07aDialog.cpp文件中的OnOK和OnCancel的单击响应函数 void CEx07aDialog::OnCancel() // not really a message handler { if (m_pView != NULL) { // modeless case -- do not call base class OnCancel m_pView->PostMessage(WM_GOODBYE, IDCANCEL); } else { CDialog::OnCancel(); // modal case } } void CEx07aDialog::OnOK() // not really a message handler { if (m_pView != NULL) { // modeless case -- do not call base class OnOK UpdateData(TRUE); m_pView->PostMessage(WM_GOODBYE, IDOK); } else { CDialog::OnOK(); // modal case } } 9、编辑ex07aView.h头文件 class CEx07aView : public CView { private: CEx07aDialog* m_pDlg; } 10、修改ex07aView.cpp文件中的CEx07aView类的构造函数和析构函数 CEx07aView::CEx07aView() { m_pDlg = new CEx07aDialog(this); } 11、CEx07aView::~CEx07aView() { delete m_pDlg; // destroys window if not already destroyed } 12、在ex07aView.cpp文件的虚函数OnDraw中加进一些代码 void CEx07aView::OnDraw(CDC* pDC) { pDC->TextOut(0, 0, "Press the left mouse button here."); } 13、利用ClassWizard加进CEx07aView的鼠标消息处理函数。请加进WM _LBUTTON DOWN和 WM_RBOTTONDOWN消息的处理函数,然后再按如下的代码对 ex07aView.cpp 文件中的这两个消息处理函数分别进行编辑: void CEx07aView::OnLButtonDown(UINT nFlags, CPoint point) { // creates the dialog if not created already if (m_pDlg->GetSafeHwnd() == 0) { m_pDlg->Create(); // displays the dialog window } } void CEx07aView::OnRButtonDown(UINT nFlags, CPoint point) { m_pDlg->DestroyWindow(); // no problem if window was already destroyed } 14、在ex07aView.cpp文件中加进对对话框头文件的包含语句 #include "ex07aView.h" #include "ex07aDialog.h" 15、针对WM_GOODBYE消息加进自己的消息代码 在ex07aView.cpp将下列语句行加在BECIN MESSAGE MAP I语句之后但必须将它加在 AFX_MSG_MAP之外: BEGIN_MESSAGE_MAP(CEx07aView, CView) ON_MESSAGE(WM_GOODBYE, OnGoodbye) //{{AFX_MSG_MAP(CEx07aView) ON_WM_LBUTTONDOWN() ON_WM_RBUTTONDOWN() //}}AFX_MSG_MAP END_MESSAGE_MAP() 然后加进完整的消息处理函数 LRESULT CEx07aView::OnGoodbye(WPARAM wParam, LPARAM lParam) { // message received in response to modeless dialog OK // and Cancel buttons m_pDlg->DestroyWindow(); return 0L; } 16、在ex07aView.h中加人如下函数原型。将下面的语句加在 DECLARE_MESSAGE_MAP()语句之前AFX_ MSC括弧对之外: //{{AFX_MSG(CEx07aView) afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnRButtonDown(UINT nFlags, CPoint point); //}}AFX_MSG afx_msg LRESULT OnGoodbye(WPARAM wParam, LPARAM lParam); DECLARE_MESSAGE_MAP() Windows通用对话框--CfileDialog 1、用对话框编辑器创建对话框资源 2、利用ClassWizard来创建CSpecialFileDialog类 把名字更改相应文件名为SpecFileDlg.h和SpecFileDlg..cpp 手工将Base Class 改为CfileDialog 在SpecFileDlg.h中将class CSpecialFileDialog : public CDialog 改为class CSpecialFileDialog : public CFileDialog 加人下面两个公有数据成员 public: CString m_strFilename; BOOL m_bDeleteAll; 最后;编辑构造函数声明如下 public: CSpecialFileDialog(BOOL bOpenFileDialog, // TRUE for FileOpen, FALSE for FileSaveAs LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, D dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL); 3、在SpecFileDlg.h中用CFileDialog替换CDialog 4、在SpecFileDlg..CPP文件中CSpecialFileDialog构造函数进行编辑 CSpecialFileDialog::CSpecialFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName, DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) : CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd) { //{{AFX_DATA_INIT(CSpecialFileDialog) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_ofn.Flags |= OFN_ENABLETEMPLATE; m_ofn.lpTemplateName = MAKEINTRESOURCE(IDD_FILESPECIAL); m_ofn.lpstrTitle = "Delete File"; m_bDeleteAll = FALSE; } 5、在CSpecialFileDialog类中映射WM_INITDIALOG消息 BOOL CSpecialFileDialog::OnInitDialog() { BOOL bRet = CFileDialog::OnInitDialog(); if (bRet == TRUE) { GetParent()->GetDlgItem(IDOK)->SetWindowText("Delete"); } return bRet; } 6、在CSpecialFileDialog类中映射IDC_DELETE按钮 void CSpecialFileDialog::OnDelete() { m_bDeleteAll = TRUE; // 0x480 is the child window ID of the File Name edit control // (as determined by SPYXX) GetParent()->GetDlgItem(0x480)->GetWindowText(m_strFilename); GetParent()->SendMessage(WM_COMMAND, IDCANCEL); } 7、在ex07aView.cpp文件的虚函数OnDraw中加进一些代码 void CEx07aView::OnDraw(CDC* pDC) { pDC->TextOut(0, 0, "Press the left mouse button here."); } 8、利用ClassWizard加进CEx07aView的鼠标消息处理函数。加进WM _LBUTTON DOWN消息的处理函数 void CEx07bView::OnLButtonDown(UINT nFlags, CPoint point) { CSpecialFileDialog dlgFile(TRUE, NULL, "*.obj"); CString strMessage; int nModal = dlgFile.DoModal(); if ((nModal == IDCANCEL) && (dlgFile.m_bDeleteAll)) { strMessage.Format( "Are you sure you want to delete all %s files?", dlgFile.m_strFilename); if (AfxMessageBox(strMessage, MB_YESNO) == IDYES) { HANDLE h; WIN32_FIND_DATA fData; while((h = ::FindFirstFile(dlgFile.m_strFilename, &fData)) != (HANDLE) 0xFFFFFFFF) { // no MFC equivalent if (::DeleteFile(fData.cFileName) == FALSE) { strMessage.Format("Unable to delete file %s\n", fData.cFileName); AfxMessageBox(strMessage); break; } } } } else if (nModal == IDOK) { CString strSingleFilename = dlgFile.GetPathName(); strMessage.Format( "Are you sure you want to delete %s?", strSingleFilename); if (AfxMessageBox(strMessage, MB_YESNO) == IDYES) { CFile::Remove(strSingleFilename); } } } 9、我们还需要将包含语句#include "SpecFileDlg.h"加在如下语句行之后#include "ex07bView.h"
/
本文档为【无模式对话框和Windows通用对话框 】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索