在CFileDialog对话框中添加控件_第1页
在CFileDialog对话框中添加控件_第2页
在CFileDialog对话框中添加控件_第3页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、在C对话框中添加控件关键字:C扩展类,OFNHookProc需求描述:昨天遇到一个用户需求,在C对话框(SAVE )中加入一个 Check , 一个Edit ,一个Spin控件,dlg.Domodal()=IDOK返回时要同时获得 Edit控件中的数据.实现方法:如果只需要控制控件,用方法一即可,但如果需要获取数据,则只能用方法二。我最终用的就是方法二.方法一:首先查找MSDN关于C扩展的实现描述, 上网查到实现预览图片式的C的例子。按照其思路从C派生了一个新的类 C.在类中添加以下代码#defi ne WM_CHECKZOOMIN WM_USER+1856public:BOOL bZooml

2、 n;UINT n Mul; 1100/前置声明BOOL NEAR CALLBACK Han dleNotify(HWND hDlg, LPOFNOTIFY pofn);UINT_PTR CALLBACK OFNHookProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam);/ CIMPLEMENT_DYNAMIC(C, C)C(BOOL bOpe n, LPCTSTR lpszDefExt, LPCTSTR lpsz,DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pPare ntWnd):C(bOpe

3、 n, lpszDefExt, lps z, dwFlags, lpszFilter, pPare ntWnd)/这个四个常用标识位m_ofn.Flags |= OFN_ENABLETEMPLATE |OFN_HIDEREADONLY|OFN_EXPLORER;OFN_EXPLORER | OFN_ENABLEHOOKm_ofn.lpstrTitle=_T(高级保存对话框);m_ofn.hl nsta nee = AfxGetl nsta nceHa ndle();m_ofn.lpstrFilter = _T(*bmpO*BMPO所有文件 0 *0 );m_ofn .l pTemplateNa

4、me = MAKEINTRESOURCE(IDD_);m_ofn .l pfnHook =(LPOFNHOOKPROC)OFNHookProc;/Hook function for the Comm Dlg/在这里处理我们感兴趣的消息,想要哪个,截哪个 !UINT_PTR CALLBACK OFNHookProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)switch (uMsg)case WMNITDIALOG:/初始化对话框上的控件if(Se ndDlgltemMessage(hDlg, IDC_CHECK_ZOOMIN, BM_G

5、ETCHECK,0,0)=BST_UNCHECKED):E nableWi ndow(GetDlgltem(hDlg,IDC_EDIT_ZOOMNUM),FALSE);:E nableWi ndow(GetDlgltem(hDlg,IDC_SPIN_ZOOMNUM),FALSE);:SetWi ndowText(GetDlgltem(hDlg, IDC_EDIT_ZOOMNUM),_T(1);/ShowWin dow(butto n,SW_HIDE);break;case WM_DESTROY:/ 消毁对话框LPOPEN lpOFN = (LPOPEN)GetWi ndowL on g(hDl

6、g, DWL_USER);break;case WM_COMMAND:/ 这里处理,IDC_CHECK_ZOOMIN 命令if (HIWORD(wParam) = BN_CLICKED) & (LOWORD(wParam)=IDC_CHECK_ZOOMIN)BOOL bZoomln = TRUE;if(Se ndDlgltemMessage(hDlg, IDC_CHECK_ZOOMIN, BM_GETCHECK, 0, 0)=BST_CHECKED)bZoomIn = TRUE;:E nableWi ndow(GetDlgltem(hDlg,IDC_EDIT_ZOOMNUM),TRUE);:E

7、 nableWi ndow(GetDlgltem(hDlg,IDC_SPIN_ZOOMNUM),TRUE);elsebZoomIn = FALSE;/:SetWi ndowText(GetDlgltem(hDlg, IDC_EDIT_ZOOMNUM),);:E nableWi ndow(GetDlgltem(hDlg,IDC_EDIT_ZOOMNUM),FALSE);:E nableWi ndow(GetDlgltem(hDlg,IDC_SPIN_ZOOMNUM),FALSE);HWND hParent = GetParent(hDlg);/注意hDlg是新加的模板对话框句柄,它是C对话框的子

8、部分,要获取 C对话框的句柄需要用GetParent 函数PostMessage(hPare nt,WM_CHECKZOOMIN,(WPARAM)bZooml n,(LPARAM)0);bZoomln = FALSE;break;case WM_NOTIFY:Han dleNotify(hDlg, (LPOFNOTIFY)lParam);break;return 0;/这里处理notify 消息BOOL NEAR CALLBACK Han dleNotify(HWND hDIg, LPOFNOTIFY pofn)C dlg(TRUE);switch (pof n-hdr.code)case C

9、DN_SELCHANGE:/char sz;/ Get the path of the selected file./if (CommDlg_Ope nSave_Get(GetPare nt(hDlg), szFile, sizeof(szFile) SetWi ndowText(buff);();6结果测试。C dlg(TRUE);dlg.DoModal();通过指定资源ID ,可以使用Wizard添加处理消息,OK这正是我想要的,按照它的方法,很快就实现了需求,调用如下.h/ Dialog DataAFX_DATA(C)en um IDD = IDD_ ;AFX_DATApublic:BO

10、OL bZooml n;UINT n Mui; 1100afx_msg void OnBn ClickedCheckZoomi n();afx_msg void On DeltaposSpi nZoom num(NMHDR *pNMHDR, LRESULT *pResult);virtual BOOL Onlni tDialog();afx_msg void OnEn Cha ngeEditZoo mn um();afx_msg void OnEn KillfocusEditZoo mn um();.cppC(BOOL bOpe n, LPCTSTR lpszDefExt, LPCTSTR l

11、psz,DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pPare ntWnd):C(bOpe n, lpszDefExt, lps z, dwFlags, lpszFilter, pPare ntWnd)/这个四个常用标识位m_ofn.Flags |= OFN_ENABLETEMPLATE |OFN_HIDEREADONLY|OFN_EXPLORER;OFN_EXPLORER | OFN_ENABLEHOOKm_ofn.lpstrTitle=_T(高级保存对话框);m_ofn.hI nsta nee = AfxGetI nsta nceHa ndle();m

12、_ofn.lpstrFilter = _T(*bmp0*BMP0所有文件 0 *.*0 );SetTemplate(0, IDD;BEGIN_MESSAGE_MAP(C, C)ON_COMMAND()ON_BN_CLICKED(IDC_CHECK_ZOOMIN, &C)ON_NOTIFY(UDN_DELTAPOS, IDC_SPIN_ZOOMNUM, &C)ON_EN_CHANGE(IDC_EDIT_ZOOMNUM, &C)ON_EN_KILLFOCUS(IDC_EDIT_ZOOMNUM, &C)END_MESSAGE_MAP()void C()/ TODO:在此添加控件通知处理程序代码bZo

13、omln = !bZooml n;GetDlgltem(IDC_EDIT_ZOOMNUM)-E nableWi ndow(bZooml n);GetDlgltem(IDC_SPIN_ZOOMNUM)-E nableWi ndow(bZooml n);void C(NMHDR *pNMHDR, LRESULT *pResult)LPNMUPDOWN pNMUpDow n = re in terpret_cast(pNMHDR);/ TODO:在此添加控件通知处理程序代码if (pNMUpDow n-iDelta 0)if (n Mul 1)n Mul-;elseif (n Mul SetWi n

14、dowText (I pstr); *pResult = 0;BOOL C()C();/ TODO:在此添加额外的初始化GetDlgItem(IDC_EDIT_ZOOMNUM)-E nableWi ndow(FALSE);GetDlgItem(IDC_SPIN_ZOOMNUM)-E nableWi ndow(FALSE);GetDlgItem(IDC_EDIT_ZOOMNUM)-SetWi ndowText(_T(1);bZoomIn = FALSE;n Mul = 1;return TRUE; / return TRUE unl ess you set the focus to a cont

15、rol/异常:OCX 属性页应返回FALSE void C()/ TODO:如果该控件是 RICHEDIT 控件,它将不/发送此通知,除非重写C()/ 函数并调用 CRichEditCtrl().SetEve ntMask(),/同时将ENM_CHANGE 标志 或”运算到掩码中。/ TODO:在此添加控件通知处理程序代码CString strText;GetDlgItem(IDC_EDIT_ZOOMNUM)-GetWi ndowText(strText);nMul = _wtoi(strText);if ( (n Mul 100)if (n Mul 100) nMul = 100;wchar_t buff10;_itow( nMul, buff, 10 );LPCTSTR Ipstr = (LPCTSTR)buff;GetDlgltem(IDC_EDIT_ZOOMNUM)-SetWi ndowText(lpstr);void C()/ TODO:在此添加控件通知处理程序代码CString strText;GetDlgItem(IDC_EDIT_ZOOMNUM)-GetWi ndowText(strText);nMul = _wtoi(strText)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论