在CFileDialog對話框中添加控件_第1頁
在CFileDialog對話框中添加控件_第2頁
在CFileDialog對話框中添加控件_第3頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

1、在C對話框中添加控件關鍵字:C擴展類,OFNHookProc需求描述:昨天遇到一個用戶需求,在C對話框(SAVE )中加入一個 Check , 一個Edit ,一個Spin控件,dlg.Domodal()=IDOK返回時要同時獲得 Edit控件中的數(shù)據(jù).實現(xiàn)方法:如果只需要控制控件,用方法一即可,但如果需要獲取數(shù)據(jù),則只能用方法二。我最終用的就是方法二.方法一:首先查找MSDN關于C擴展的實現(xiàn)描述, 上網(wǎng)查到實現(xiàn)預覽圖片式的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 函數(shù)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結(jié)果測試。C dlg(TRUE);dlg.DoModal();通過指定資源ID ,可以使用Wizard添加處理消息,OK這正是我想要的,按照它的方法,很快就實現(xiàn)了需求,調(diào)用如下.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 控件,它將不/發(fā)送此通知,除非重寫C()/ 函數(shù)并調(diào)用 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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論