资源描述:
《在CFileDialog对话框中添加控件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、在CFileDialog对话框中添加控件关键字:CFileDialog扩展类,OFNHookProc需求描述:昨天遇到一个用户需求,在CFileDialog对话框(SAVE)中加入一个Check,一个Edit,一个Spin控件,dlg.Domodal()==IDOK返回时要同时获得Edit控件中的数据.实现方法:如果只需要控制控件,用方法一即可,但如果需要获取数据,则只能用方法二。我最终用的就是方法二.方法一:首先查找MSDN关于CFileDialog扩展的实现描述,上网查到实现预览图片式的CFILEDIALOG的例子。
2、按照其思路从CFileDialog派生了一个新的类CFileDialogEX.在类中添加以下代码#defineWM_CHECKZOOMINWM_USER+1856public: BOOLbZoomIn; UINTnMul;//[1~100] //前置声明---------------BOOLNEARCALLBACKHandleNotify(HWNDhDlg,LPOFNOTIFYpofn);UINT_PTRCALLBACKOFNHookProc(HWNDhDlg,UINTuMsg,WPARAMwParam,LPAR
3、AMlParam);//CFileDialogExIMPLEMENT_DYNAMIC(CFileDialogEx,CFileDialog)CFileDialogEx::CFileDialogEx(BOOLbOpenFileDialog,LPCTSTRlpszDefExt,LPCTSTRlpszFileName, DWORDdwFlags,LPCTSTRlpszFilter,CWnd*pParentWnd): CFileDialog(bOpenFileDialog,lpszDefExt,lpszFi
4、leName,dwFlags,lpszFilter,pParentWnd){ //这个四个常用标识位 m_ofn.Flags
5、= OFN_ENABLETEMPLATE
6、OFN_HIDEREADONLY
7、OFN_EXPLORER; //OFN_EXPLORER
8、OFN_ENABLEHOOK m_ofn.lpstrTitle = _T("高级保存对话框"); m_ofn.hInstance=AfxGetInstanceHandle(); m_ofn.lpstrFilter = _T("*.bmp *.
9、BMP 所有文件 *.* "); m_ofn.lpTemplateName=MAKEINTRESOURCE(IDD_FILEDIALOG_EX); m_ofn.lpfnHook= (LPOFNHOOKPROC)OFNHookProc; } //HookfunctionfortheCommDlg//在这里处理我们感兴趣的消息,想要哪个,截哪个!UINT_PTRCALLBACKOFNHookProc(HWNDhDlg,UINTuMsg,WPARAMwParam,LPARAMlParam){ switch
10、(uMsg) { caseWM_INITDIALOG: //初始化对话框上的控件 if(SendDlgItemMessage(hDlg,IDC_CHECK_ZOOMIN,BM_GETCHECK,0,0)==BST_UNCHECKED) { ::EnableWindow(GetDlgItem(hDlg,IDC_EDIT_ZOOMNUM),FALSE); ::EnableWindow(GetDlgItem(hDlg,IDC_S
11、PIN_ZOOMNUM),FALSE); ::SetWindowText(GetDlgItem(hDlg,IDC_EDIT_ZOOMNUM),_T("1")); //ShowWindow(button,SW_HIDE); } break; caseWM_DESTROY: //消毁对话框 { LPOPENFILENAMElpOFN=(LPOPENFILENAME)GetWindowLong(hDlg,DWL_USER
12、); } break; caseWM_COMMAND: //这里处理,IDC_CHECK_ZOOMIN命令 { if((HIWORD(wParam)==BN_CLICKED)&&(LOWORD(wParam)==IDC_CHECK_ZOOMIN))