在CFileDialog对话框中添加控件

合集下载

6.7 Windows通用对话框

6.7 Windows通用对话框

任务六对话框应用程序设计6.7 Windows通用对话框Windows通用对话框是由操作系统提供的任何应用程序都可以获得的对话框。

在VC++中,对这些对话框进行了封装,使用户在开发程序时可以方便的调用这些对话框。

6.7.1 使用“文件”对话框打开和保存文件主程序名:FileDialog1、添加两个按钮控件,一个编辑框控件,两个静态文本控件2、为控件关联变量3、编辑“打开”按钮,编辑程序void CFileDialogDlg::OnOpen(){// TODO: Add your control notification handler code here CFileDialogdlg(TRUE,NULL,NULL,OFN_HIDEREADONL Y|OFN_OVERWRITEPROMPT, "All Files(*.TXT)|*.TXT||",AfxGetMainWnd());CString strPath,strText="";if(dlg.DoModal() == IDOK){strPath = dlg.GetPathName();m_OpenPath.SetWindowText(strPath);CFile file(strPath,CFile::modeRead);char read[10000];file.Read(read,10000);for(int i=0;i<file.GetLength();i++){strText += read[i];}file.Close();m_FileText.SetWindowText(strText);}}4、编辑“保存”按钮,编辑程序void CFileDialogDlg::OnSave(){// TODO: Add your control notification handler code hereCFileDialogdlg(FALSE,NULL,NULL,OFN_HIDEREADONL Y|OFN_OVERWRITEPROMPT, "All Files(*.TXT)|*.TXT||",AfxGetMainWnd());CString strPath,strText="";char write[10000];if(dlg.DoModal() == IDOK){strPath = dlg.GetPathName();if(strPath.Right(4) != ".TXT")strPath += ".TXT";m_SavePath.SetWindowText(strPath);CFile file(_T(strPath),CFile::modeCreate|CFile::modeWrite);m_FileText.GetWindowText(strText);strcpy(write,strText);file.Write(write,strText.GetLength());file.Close();}}6.7.2 使用“字体”对话框设置文本字体主程序名:FontDialog1、添加一个按钮控件,一个编辑框控件2、为控件关联变量3、编辑文本中的文字,程序BOOL CFontDialogDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization hereCString str = "";str +="有志者,事竟成,破釜沉舟,百二秦关终属楚\r\n";str +="苦心人,天不负,卧薪尝胆,三千越甲可吞吴\r\n";m_Text.SetWindowText(str);return TRUE; // return TRUE unless you set the focus to a control}4、“文字”按钮控件的程序编辑void CFontDialogDlg::OnFont(){// TODO: Add your control notification handler code hereCFont* TempFont = m_Text.GetFont(); //获取编辑框当前字体LOGFONT LogFont;TempFont->GetLogFont(&LogFont);CFontDialog dlg(&LogFont); //初始化字体信息if(dlg.DoModal()==IDOK){m_Font.Detach();LOGFONT temp;dlg.GetCurrentFont(&temp); //获取当前字体信息m_Font.CreateFontIndirect(&temp); //直接创建字体m_Text.SetFont(&m_Font); //设置字体}}6.7.3 使用“颜色”对话框设置文本背景颜色主程序名:ColorDialog1、添加一个按钮控件,一个静态文本对话框ID:IDD_COLORDIALOG_DIALOG对话框标:使用"颜色"对话框设置文本背景颜色按钮ID:IDC_COLOR按钮标题:颜色静态文本控件ID:IDC_STATIC静态文本控件标题:红笺小字,说尽平生易。

fxml dialogpane用法

fxml dialogpane用法

fxml dialogpane用法FXML DialogPane是JavaFX中的一个界面组件,用于创建弹窗对话框。

它可以用于显示用户交互或显示重要的信息。

下面将介绍如何使用FXML DialogPane 来创建自定义的弹窗对话框。

首先,在JavaFX应用程序中创建一个FXML文件,用于定义DialogPane的布局和样式。

可以使用JavaFX Scene Builder来创建FXML文件,或者手动编写FXML代码。

在FXML文件中,可以使用各种JavaFX控件来构建对话框的布局。

例如,可以添加Label、TextField、Button等控件,并通过CSS样式来设置它们的外观。

接下来,在Java代码中,加载FXML文件并创建DialogPane对象。

可以使用FXMLLoader类来加载FXML文件,并通过load()方法将其转换为Node对象。

然后,创建一个Dialog对象,并将刚才创建的DialogPane设置为其内容。

可以使用Dialog类的构造函数来创建Dialog对象,然后使用setDialogPane()方法将前面创建的DialogPane对象设置为其内容。

接着,可以设置Dialog的标题、按钮等属性。

可以使用setTitle()方法设置对话框的标题,使用setHeaderText()方法设置对话框的头部文本,使用setContentText()方法设置对话框的内容文本。

最后,显示对话框并等待用户的交互。

可以使用show()方法显示对话框,并使用showAndWait()方法等待用户对对话框的响应。

根据用户的操作,可以通过对话框的getDialogPane().getButtonData()方法获取到用户点击的按钮类型。

总结一下,对于FXML DialogPane的用法,首先需要创建一个FXML文件用于定义对话框的布局和样式。

然后,在Java代码中,加载FXML文件并创建DialogPane对象。

CommonDialog控件使用方法

CommonDialog控件使用方法

CommonDialog控件使用方法CommonDialog控件提供诸如打开和保存文件、设置打印选项、选择颜色和字体等操作的一组标准对话框。

运行 Windows 帮助引擎时,控件还能够显示帮助。

CommonDialog控件在Visual Basic和 Microsoft Windows 动态连接库Commdlg.dll 例程之间提供了接口。

为了用该控件创建对话框,必须要求Commdlg.dll 在 Microsoft Windows \System 目录下。

为了在应用程序中使用 CommonDialog控件,应将其添加到窗体上并设置属性。

控件显示的对话由控件的方法决定。

运行时,调用相应方法后将显示对话框或执行帮助引擎;设计时在窗体上将 CommonDialog控件显示成一个图标。

此图标的大小不能改变。

CommonDialog控件可以显示如下常用对话框:“打开”“另存为”“颜色”“字体”“打印”要使用 CommonDialog控件1. 若未添加 CommonDialog控件,则应从“工程”菜单中选定“部件”,将控件添加到工具箱中。

在标记对话的“控件”中找到并选定控件,然后单击“确定”按钮。

2. 单击工具箱中的“CommonDialog”控件并在窗体上绘制该控件。

在窗体上绘制 CommonDialog控件时,控件将自动调整大小。

象 Timer控件一样,CommonDialog控件在运行时不可见。

3. 运行时,请适当使用下表所列方法显示需要的对话。

显示“打开”和“另存为”对话框有了“打开”对话框就可指定驱动器、目录、文件扩展名和文件名。

“另存为”对话框在外观上与“打开”对话框相同,只是对话框的标题和文件名是暗淡的。

运行时选定文件并关闭对话框后,可用 FileName 属性获取选定的文件名。

要显示“打开”对话框1. 指定在“文件类型”列表框中显示的文件过滤器列表。

可用下列格式设置 Filter 属性:description1 | filter1 | description2 | filter2...Description 是列表框中显示的字符串——例如,"Text Files (*.txt)"。

一个定制CFileDialog对话框的实例

一个定制CFileDialog对话框的实例

一个定制CFileDialog对话框的实例很多程序员都喜欢让自己的代码运行效果与众不同。

Windows系统的应用程序打开某个文件一般使用的都是默认的CFileDialog。

但是这个默认的CFileDialog往往满足不了用户的要求。

我就碰到一个这样的用户,他的要求如下:1、在默认的CFileDialog对话框中加一个预览窗格,以便在选中ASCII文件时能看到所选文件的内容,也就是用*.txt 作为文件过滤条件。

2、在默认的CFileDialog对话框中加一个"全部"按钮来选择某个目录中所有的.txt文件。

3、如果选择的目录中没有.txt文件时,要将"全部"按钮disable,也就是置灰这个按钮。

实现上面这些需求必须要改装CFileDialog对话框。

当最后写完程序时,功能到是全都实现了,但在Windows 2000环境测试中,用户发现了这样一个问题:如果先选中某个文件,然后再去选某个文件夹,预览窗格仍然显示的那个文件的内容。

尽管在OnFileNameChange中对CDN_SELCHANGE进行了处理,为了获取所选的文件/路径名,也调用了CFileDialog::GetPathName。

但是即使是选中了文件夹,GetPathName仍然返回的是文件的名字。

即便尝试用其它的通知消息和函数,比如 CDN_FOLDERCHANGE 和 GetFileName,但仍旧存在同样的问题。

必须承认在Windows 2000中,CFileDialog是个不完美的对话框,确实存在上述问题。

正是有这些不完美,程序员们才忙得个不亦乐乎......那么到底如何判断用户选中的是文件还是文件夹呢?下面就让我们从用户需求开始,一个一个解决所碰到的问题。

首先简单介绍下本文引入的三个辅助类:CFileDialogHook;CFileDialogOwnerHook和CFileDlgHelper,这三个类很简单,其功能分别是:子类化文件对话框;子类化文件对话框的父窗口或宿主窗口,这两个类只在CFileDlgHelper类中使用,一些重要的处理都在CFileDlgHelper中。

1.修改例程10.1 给对话框增加编辑控件[共2页]

1.修改例程10.1 给对话框增加编辑控件[共2页]

13010.2 控件与控件类的连接在10.1节中设计的对话框功能太简单了,几乎什么也没有做。

本节将给例程10.1中的对话框增加功能。

修改例程10.1,要实现的功能是:单击对话框上的“显示文字”按钮时,能在对话框的编辑控件里输出一行文本。

这就要修改对话框模板,给对话框增加新的控件——编辑控件,编辑控件在对话框中使用非常频繁,常用来输入数据。

1.修改例程10.1 给对话框增加编辑控件(1)双击对话框的ID号IDD_DIALOG1,打开对话框资源编辑器,从控件栏里拖放一个编辑控件到对话框模板上。

右键单击编辑控件,选择“属性”,在打开的属性框里对编辑控件的属性进行修改,这里最重要的是控件的ID号,它是使用编辑控件的依据,如图10-5所示。

在编辑控件旁添加一个静态文本控件,用来对编辑控件进行说明。

从控件栏中拖放一个静态文本控件到编辑控件的右侧,并修改其属性,在“标题”栏里输入文字“输出文字”,以提示编辑控件的作用,如图10-6所示。

图10-5 在对话框里增加编辑控件图10-6 加入静态文本控件的对话框(2)控件资源的类支持。

前面讲过,对话框资源通过对话框类的构造器实现与对话框类的连接,工具栏资源通过工具栏类(CToolBar)的函数LoadToolBar()实现与工具栏类的连接。

同样,控件资源有时候也需要与控件类连接。

已经接触到的两种控件中,按钮控件的支持类是CButton类,编辑控件的支持类是CEdit类,这两个类都是从CWnd类派生的。

实现控件资源与控件类相连接的方法是CWnd类的GetDlgItem()函数。

如下的代码就实现了编辑控件IDC_EDIT1与其支持类CEdit类的连接,这些代码一般位于对话框类的函数中。

CEdit *pEdit; //生成CEdit类的指针pEdit=(CEdit*)GetDlgItem(IDC_EDIT1);。

VC通用对话框类CFileDlg

VC通用对话框类CFileDlg

VC通用对话框类CFileDlgCFileDialog类封装了Windows常用的文件对话框。

常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。

可以用构造函数提供的方式使用CFileDialog,也可以从CFileDialog派生出自己的对话类并编写一个构造函数来适应你的需要。

每种情况下,对话框都与标准MFC对话框一样工作。

因为它们都是CCommonDialog类的派生类。

要使用CFileDialog,先用CFileDialog构造函数构造一个对象,当创建了一个对话框后,可以设置或修改m_ofn结构中的任何值,以初始化对话框控件的值或状态。

m_ofn结构是OPENFILENAME类型的。

要了解更多信息,可参阅联机文档“Win32 SDK”中的OPENFILENAME结构。

初始化对话框控件后,调用DoModal成员函数显示对话框并使用户输入路径和文件。

DoModal返回不论是用户选择了OK(IDOK)还是取消(IDCANCEL)按钮。

当DoModal返回IDOK,可以使用某一个CFileDIalog的公共成员函数获取用户输入的信息。

CFileDIalog包含许多保护成员,使你可以处理常用的共享冲突、文件名合法性检查、列表框改变通知。

这些保护成员对许多应用来说用处不大,因为缺省处理是自动的。

对这些函数来说,消息映射入口是不必要的,因为它们是标准虚函数。

可以使用Windows CommDlgExtendError函数判断在初始化对话框时是否是发生了错误,并获取关于错误的更多信息。

析构一个CFileDialog对象是自动,无须调用CDialog::EndDialog。

要使用户选用多个文件,可在调用DoModal之前设置OFN_ALLOWMULTISELECT标志。

你应提供文件名缓冲区来放置返回的多个文件名的列表,这通过用一个分配了的缓冲区指针替换m_ofn.lpstrFile来实现,要在创建了CFileDialog之后调用DoModal 之前进行此操作。

在CFileDialog对话框中添加控件

在CFileDialog对话框中添加控件

在C对话框中添加控件关键字:C扩展类,OFNHookProc需求描述:昨天遇到一个用户需求,在C对话框(SAVE)中加入一个Check , 一个Edit,一个Spin控件,dlg.Domodal()==IDOK返回时要同时获得Edit控件中的数据.实现方法:如果只需要控制控件,用方法一即可,但如果需要获取数据,则只能用方法二。

我最终用的就是方法二.方法一: 首先查找MSDN关于C扩展的实现描述,上网查到实现预览图片式的C的例子。

按照其思路从C派生了一个新的类C.在类中添加以下代码#define WM_CHECKZOOMIN WM_USER+1856public:BOOL bZoomIn;UINT nMul; //[1~100]//前置声明---------------BOOL NEAR CALLBACK HandleNotify(HWND hDlg, LPOFNOTIFY pofn);UINT_PTR CALLBACK OFNHookProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);// CIMPLEMENT_DYNAMIC(C, C)C(BOOL bOpen, LPCTSTR lpszDefExt, LPCTSTR lpsz,DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) :C(bOpen, lpszDefExt, lpsz, dwFlags, lpszFilter, pParentWnd){//这个四个常用标识位m_ofn.Flags |= OFN_ENABLETEMPLATE |OFN_HIDEREADONLY|OFN_EXPLORER; //OFN_EXPLORER | OFN_ENABLEHOOKm_ofn.lpstrTitle = _T("高级保存对话框");m_ofn.hInstance = AfxGetInstanceHandle();m_ofn.lpstrFilter = _T("*.bmp\0*.BMP\0所有文件\0 *.*\0 ");m_ofn.lpTemplateName = MAKEINTRESOURCE(IDD_);m_ofn.lpfnHook = (LPOFNHOOKPROC)OFNHookProc;}//Hook function for the Comm Dlg//在这里处理我们感兴趣的消息,想要哪个,截哪个!UINT_PTR CALLBACK OFNHookProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam){switch (uMsg){case WM_INITDIALOG: //初始化对话框上的控件if(SendDlgItemMessage(hDlg, IDC_CHECK_ZOOMIN, BM_GETCHECK,0,0) == BST_UNCHECKED){::EnableWindow(GetDlgItem(hDlg,IDC_EDIT_ZOOMNUM),FALSE);::EnableWindow(GetDlgItem(hDlg,IDC_SPIN_ZOOMNUM),FALSE);::SetWindowText(GetDlgItem(hDlg, IDC_EDIT_ZOOMNUM),_T("1"));//ShowWindow(button,SW_HIDE);}break;case WM_DESTROY: //消毁对话框{LPOPEN lpOFN = (LPOPEN)GetWindowLong(hDlg, DWL_USER);}break;case WM_COMMAND: //这里处理,IDC_CHECK_ZOOMIN命令{if ((HIWORD(wParam) == BN_CLICKED) && (LOWORD(wParam) ==IDC_CHECK_ZOOMIN)){BOOL bZoomIn = TRUE;if(SendDlgItemMessage(hDlg, IDC_CHECK_ZOOMIN, BM_GETCHECK, 0, 0) == BST_CHECKED){bZoomIn = TRUE;::EnableWindow(GetDlgItem(hDlg,IDC_EDIT_ZOOMNUM),TRUE);::EnableWindow(GetDlgItem(hDlg,IDC_SPIN_ZOOMNUM),TRUE);}else{bZoomIn = FALSE;//::SetWindowText(GetDlgItem(hDlg, IDC_EDIT_ZOOMNUM),"");::EnableWindow(GetDlgItem(hDlg,IDC_EDIT_ZOOMNUM),FALSE);::EnableWindow(GetDlgItem(hDlg,IDC_SPIN_ZOOMNUM),FALSE);}HWND hParent = GetParent(hDlg); // 注意hDlg是新加的模板对话框句柄,它是C对话框的子部分,要获取C对话框的句柄需要用GetParent函数PostMessage(hParent,WM_CHECKZOOMIN,(WPARAM)bZoomIn,(LPARAM) 0);bZoomIn = FALSE;}break;case WM_NOTIFY:HandleNotify(hDlg, (LPOFNOTIFY)lParam);break;}return 0;}//这里处理notify 消息BOOL NEAR CALLBACK HandleNotify(HWND hDlg, LPOFNOTIFY pofn){C dlg(TRUE);switch (pofn->hdr.code){case CDN_SELCHANGE:{//char sz];//// Get the path of the selected file.//if (CommDlg_OpenSave_Get(GetParent(hDlg), szFile, sizeof(szFile)) <= sizeof(szFile))//{// if(Get(szFile) != )// {// //Should we load the Pic// if(SendDlgItemMessage(hDlg, IDC_CHECK1, BM_GETCHECK,0,0) == BST_UNCHECKED)// dlg.ShowImagepreview(hDlg, szFile);// }//}}break;case CDN_FILEOK:{int num;GetDlgItemInt(hDlg,IDC_EDIT_ZOOMNUM,&num,FALSE);if(SendDlgItemMessage(hDlg, IDC_CHECK_ZOOMIN, BM_GETCHECK, 0, 0) == BST_CHECKED){dlg.bZoomIn = TRUE;}elsedlg.bZoomIn = FALSE;return FALSE;}break;}return(TRUE);}原计划从回调函数得到触发消息,然后用PostMessage的方式将自定义的WM_CHECKZOOMIN消息发给主窗口,在主窗口中更新我新加的变量bZoomIn和nMul的值。

winform folderbrowserdialog的用法

winform folderbrowserdialog的用法

winform folderbrowserdialog的用法在WinForms应用程序中,FolderBrowserDialog控件是一个非常实用的工具,它允许用户通过图形化的界面选择一个文件夹。

使用FolderBrowserDialog控件可以轻松地让用户指定一个文件夹路径,而无需手动输入路径字符串。

下面是一个关于如何使用FolderBrowserDialog控件的详细指南:添加FolderBrowserDialog控件首先,你需要在你的WinForms项目中添加一个FolderBrowserDialog控件。

你可以在设计器中直接从工具箱拖放它到你的窗体上,或者通过代码创建它。

设置FolderBrowserDialog属性FolderBrowserDialog有一些有用的属性,如Description(显示的描述信息),RootFolder(选择的起始目录)等。

你可以根据需要设置这些属性。

显示FolderBrowserDialog要显示FolderBrowserDialog,你需要调用它的ShowDialog()方法。

这将打开一个标准的文件夹选择对话框,用户可以在其中选择一个文件夹。

获取选择的文件夹一旦用户选择了文件夹并关闭了文件夹选择对话框,你可以通过检查FolderBrowserDialog的SelectedPath属性来获取用户选择的文件夹路径。

处理FolderBrowserDialog事件你也可以处理FolderBrowserDialog的HelpRequest事件,以便为用户提供有关如何使用此对话框的帮助。

示例代码:csharp// 创建FolderBrowserDialog实例FolderBrowserDialog folderDlg = new FolderBrowserDialog();folderDlg.Description = "选择一个文件夹"; // 设置描述信息folderDlg.RootFolder = Environment.SpecialFolder.MyComputer; // 设置起始目录为我的电脑// 显示FolderBrowserDialog并获取用户的选择if (folderDlg.ShowDialog() == DialogResult.OK){string folderPath = folderDlg.SelectedPath; // 获取选择的文件夹路径// 在这里处理选择的文件夹,例如保存路径到变量或执行其他操作}通过以上步骤和代码示例,你应该能够掌握如何在WinForms应用程序中使用FolderBrowserDialog控件。

MFC中进度条控件的使用方法

MFC中进度条控件的使用方法

MFC中进度条控件的使用方法MFC(Microsoft Foundation Class)进度条控件是一种用于显示任务进度的常见控件,可以在界面中显示一个动态的进度条,以便用户了解任务的进度情况。

在本文中,将介绍MFC中如何使用进度条控件,并详细说明其使用方法。

1.创建进度条控件在MFC应用程序的对话框资源中添加一个进度条控件,控件ID可以自定义。

然后在对应的对话框类中添加一个变量用于关联该控件,方法如下:```cpp#include <afxcmn.h> // 导入控件类的头文件class CMyDialog : public CDialogEx//...protected:CProgressCtrl m_progress; // 声明一个变量用于关联进度条控件};```2.初始化进度条在对话框类中的OnInitDialog(函数中,通过m_progress变量获取进度条控件的指针,并进行初始化设置。

```cppBOOL CMyDialog::OnInitDialogCDialogEx::OnInitDialog(;//获取进度条控件的指针CProgressCtrl* pProgress =(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1);//设置进度条范围(默认为0-100)pProgress->SetRange(0, 100);//设置进度条初始位置pProgress->SetPos(0);return TRUE;}```3.更新进度条的进度在任务进行中,可以通过SetPos(函数设置进度条的当前位置,用以更新进度条的进度。

```cppvoid CMyDialog::DoTaskfor (int i = 0; i <= 100; i++)m_progress.SetPos(i);//执行任务代码...}}```4.设置进度条样式进度条控件还支持一些样式设置,可以通过SetStyle(函数进行设置。

编程自定义CFileDialog对话框

编程自定义CFileDialog对话框

编程自定义CFileDialog对话框
乔建魁
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2005(000)012
【摘要】CFileDialog类给软件开发带来了极大的方便,实践中还需要定制自己的FileDialog.本文介绍几种定制的方法,包括修改文件对话框标题,更改文件列表框的大小,在对话框中添加按钮等控件,以及只显示目录的对话框等.
【总页数】4页(P31-34)
【作者】乔建魁
【作者单位】无
【正文语种】中文
【中图分类】TP3
【相关文献】
1.VC++中模态对话框和非模态对话框的编程 [J], 李琳
2.利用MFC的CFileDialog生成Windows2000文件对话框 [J], 周鸣扬
3.基于Linux Qt4下自定义对话框的设计与实现 [J], 项伟
4.第三讲VBA变量、对话框及自定义函数 [J], 刘曜
5.自定义打开/保存通用对话框 [J], 相逢一笑
因版权原因,仅展示原文概要,查看原文内容请购买。

vb6编程filedialog的用法

vb6编程filedialog的用法

vb6编程filedialog的用法在VB6中,可以使用FileDialog控件来实现文件对话框的功能。

Fi leDialog控件提供了一种方便的方式,供用户选择文件或文件夹。

以下是FileDialog控件的基本用法:1.引用FileDialog控件:在VB6的工具箱中,找到“Microsoft Common Dialog Control“,将其拖放到窗体上,以添加对FileDialog控件的引用。

2.设置对话框属性:选中添加的FileDialog控件,打开属性窗口。

可以设置以下常用属性:o DialogTitle:设置对话框的标题。

o Filter:设置文件类型过滤器,以限制可选择的文件类型。

o FileName:获取或设置所选文件的文件名。

3.显示文件对话框:在需要调用文件对话框的地方,例如按钮的Click事件中,使用以下代码显示文件对话框:vbCopy codeCommonDialog1.ShowOpen ’显示打开文件对话框CommonDialog1.ShowSave ’显示保存文件对话框CommonDialog1.ShowOpenMultiple ’显示多选文件对话框CommonDialog1.ShowFolder ’显示选择文件夹对话框4.处理对话框结果:可以使用FileDialog控件的属性来获取对话框的结果,例如:vbCopy codeMsgBox CommonDialog1.FileName ’显示所选文件的文件名需要注意的是,FileDialog控件的具体用法还涉及到事件处理、错误处理等细节,可以根据具体需求进行深入学习和探索。

同时,V B6是一种较旧的编程语言,建议考虑使用更新的编程语言和框架,如或C#.NET,以获得更好的开发支持和功能。

CFileDialog的用法和简介

CFileDialog的用法和简介

的用法和简介中使用类和可以很简单的载入和保存文件CFileDialog文件选择对话框的使用:首先构造一个对象并提供相应的参数,构造函数原型如下:为则显示打开对话框,为则显示保存对话文件对话框默认的文件扩展名默认的文件名设定风格列出可供选择的文件类型和相应的扩展名父窗口句柄指针参数格式如:文件类型说明和扩展名间用分隔,同种类型文件的扩展名间可以用分割,每种文件类型间用分隔,末尾用指明。

创建文件对话框可以使用,(只有调用了这个方法后才会弹出你建的对话框)在返回后可以利用下面的函数得到用户选择:得到完整的文件名,包括目录名和扩展名如:得到完整的文件名,包括扩展名如:得到完整的文件扩展名,如:得到完整的文件名,不包括目录名和扩展名如:对于选择了多个文件的情况得到第一个文件位置。

对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。

但必须已经调用过来得到最初的变量。

下面是实现代码:打开文件创建文件名缓存和文件读取缓存此处如果不把缓存置,在后面的设定中就会出错,如果是动态申请的,请用或者循环把数组清零定义一个类用来处理文件定义一个类用来显示标准的打开文件对话框自定义文件类型所有文件打开自定义文件设定一个文件名缓存,因为内置的文件名缓存长度只有,但是很多时候,文件的路径远大于这个数,为了保险起见,所以要自己设定一个文件名缓存设定缓存长度显示对话框,并处理按了确定按钮的事件以只读方式打开文件得到文件长度,从而确定读取缓存的大小避免数组越界,当然在这里也可以动态申请缓存空间读入数据关闭文件打开文件成功搞定了打开文件失败失败了保存文件创建文件名缓存和文件写入缓存此处如果不把缓存置,在后面的设定中就会出错,如果是动态申请的,请用或者循环把数组清零自定义文件类型所有文件设定保存对话框标题保存自定义文件使用自定义的文件名缓存设定保存文件的默认后缀,如果自己有输入后缀,则时候输入的后缀设定缓存大小显示对话框得到文件名,并用创建和写入方式打开在这里把你要写入文件的内容写入缓存,如果写入的内容过长,可以分次写入得到写入当前缓存中内容的长度写入文件关闭文件保存文件成功搞定了保存文件失败失败了VC++ CFileDialog 读取多个文件请加载相关图层最多可以打开个文件显示文件对话框,获得文件名集合根据扩展名读取相关文件来自:。

delphi 代码中设置控件的方法 -回复

delphi 代码中设置控件的方法 -回复

delphi 代码中设置控件的方法-回复Delphi代码中设置控件的方法在Delphi中,设置控件是编写桌面应用程序的基本任务之一。

通过设置控件的属性,可以实现对其外观、大小、位置、行为和其他一些与用户交互相关的方面进行控制。

本文将一步一步地解释Delphi中设置控件的方法。

第一步:添加控件到窗体首先,在Delphi中,我们需要在窗体上添加控件。

这可以通过拖放控件到窗体设计视图上或者通过编程方式创建控件来实现。

拖放方式是最常用的方法。

在Delphi的窗体设计视图中,从工具箱中选择所需的控件,将鼠标拖动到窗体上,并释放鼠标按钮。

这将在窗体上创建一个新的控件实例。

编程方式创建控件需要用到Delphi的组件对象模型(Component Object Model, COM)。

首先,需要选择所需的控件类型,然后使用代码创建该控件的实例。

第二步:设置控件属性添加控件到窗体后,可以开始设置控件的属性。

在Delphi中,可以通过属性编辑器或代码来设置控件的属性。

使用属性编辑器属性编辑器是Delphi中设置控件属性的常用方法。

可以在组件面板中选中相应的控件,然后在对象检查器面板中查看和编辑控件的属性。

属性可以按字母顺序或按类别进行排序,以便更轻松地找到所需的属性。

使用代码通过编程方式设置控件属性可以使用Delphi的对象模型。

可以在代码中使用控件实例的属性或方法来设置相应的属性。

以下是一个示例,演示了如何以代码方式设置一个编辑框的背景颜色:pascalEdit1.Color := clYellow;本示例将编辑框(Edit1)的背景颜色设置为黄色。

以此方式,通过为控件实例调用属性和方法,可以对控件的各个属性进行设置。

例如,可以设置控件的字体、大小、位置、可见性等等。

第三步:设置控件事件处理程序除了设置控件的属性外,还可以为其添加事件处理程序,以响应用户的交互。

Delphi中的事件处理程序是一个特殊的方法,用于处理控件与用户之间的交互。

在VC++中定制CFileDialog

在VC++中定制CFileDialog

在VC++中定制CFileDialogMFC为我们提供了OFileDialog的简单易用,但毕竟“千篇一律,没有性格”,在实际应用中往往需要具有个性特色的用户界面和个性化的文件对话框。

要定制文件对话框,就必须获得对文件对话框中各个控件的控制。

本文将通过一个简单的例子介绍控制文件对话框中控件的方法。

把文件对话框的高度比一般情况扩大150个像素,并修改它的标题。

通过classwizard生成一个CFileDialog的派生类CCoolFileDialog,然后编辑CoolFileDialog.cpp中处理WM_INITDIALOG的OnInitDialog函数。

在indnde.CPP的开头必须加入#CoolFileDialog<dlgs.h>BOOL CoolFileDialog::OnInitDialog()//iExtraSize将按照你所要的确定对话框的最终尺寸const UINT iExtraSize=150;//要控制的文件对话框中的控件的个数const UINT nControls=8;//获得指向父对话框的指针CWnd*wndDlg=GetParent();//获得对话框的尺寸RECT Rect;wndDlg->GetWindowRect(&Rect);//修改对话框的尺寸wndDlg->GetWindowRect(&Rect);//修改对话框的尺寸wndDlg->SetWindowPos(NULL,0,0,Rect.right-Rect.left,Rect.bottom-Rect.top+iExtraSize,SWP_NOMOVE);//控件的ID在<dlgs.h>中定义UINT Controls[nControls]={stc3,stc2,//两个label控件edt1,cmb1,//edit控件和//drop-down box控件IDOK,IDCANCEL,chx1,//check按钮lst1//list控件};//获得对文件对话框中各个控件的控制,并把它们移到新的位置for (int i=0;i<nControls ; i++){CWnd *wndCtrl =wndDlg->GetDlgItem(Controls[i]); wndCtrl->GetWindowRect(&Rect);wndDlg->ScreenToClient(&Rect);//根据对话框的新的尺寸移动各控件。

cfiledialog用法

cfiledialog用法

cfiledialog用法cfiledialog是一个常用的文件对话框控件,它可以让用户选择文件或者目录,并返回选择的路径或者文件名。

在MFC中,我们可以通过CFileDialog类来使用cfiledialog控件,下面我们就来详细介绍一下cfiledialog用法。

一、基本用法在MFC中,我们可以通过CFileDialog类来使用cfiledialog 控件,其基本用法如下:CFileDialog dlg(TRUE); //创建一个打开文件对话框dlg.DoModal(); //显示对话框其中,TRUE表示创建一个打开文件对话框,如果我们要创建一个保存文件对话框,则可以将TRUE改为FALSE。

在调用DoModal()方法之后,cfiledialog对话框就会显示出来,用户可以通过该对话框选择文件或者目录。

二、设置初始路径如果我们需要设置cfiledialog对话框的初始路径,可以通过以下代码实现:CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, NULL, NULL, 0, TRUE); //创建一个打开文件对话框dlg.m_ofn.lpstrInitialDir = _T('C:'); //设置初始路径为C盘根目录dlg.DoModal(); //显示对话框在上述代码中,我们通过m_ofn.lpstrInitialDir成员变量来设置cfiledialog对话框的初始路径,这里我们将其设置为C盘根目录。

三、设置过滤器如果我们需要只显示特定类型的文件,可以通过设置过滤器来实现,例如只显示txt文件,可以通过以下代码实现:CFileDialog dlg(TRUE, NULL, _T('*.txt'),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, _T('Text Files (*.txt)|*.txt|All Files (*.*)|*.*||'), NULL, 0, TRUE); //创建一个打开文件对话框dlg.DoModal(); //显示对话框在上述代码中,我们通过第三个参数来设置过滤器,这里我们设置为*.txt,表示只显示txt文件。

cfolderpickerdialog 用法 -回复

cfolderpickerdialog 用法 -回复

cfolderpickerdialog 用法-回复标题:cfolderpickerdialog 用法指南:一步一步解析如何使用介绍:cfolderpickerdialog 是一个流行的用于文件夹选择的对话框控件,应用广泛于Windows开发。

本文将为读者提供详细的使用指南,一步一步教你如何使用cfolderpickerdialog 控件。

第一步:引入头文件和命名空间cfolderpickerdialog 是由MFC(Microsoft Foundation Classes)提供的一个控件,因此你需要在你的代码中引入MFC 的头文件。

在你的源代码文件的顶部,添加以下几行代码:#include <afxdlgs.h>using namespace std;第二步:创建cfolderpickerdialog 对象要使用cfolderpickerdialog 控件,首先需要在你的代码中实例化一个cfolderpickerdialog 的对象。

在你的代码中声明一个cfolderpickerdialog 对象,例如:Cfolderpickerdialog folderPicker;第三步:设置对话框的属性在使用cfolderpickerdialog 控件之前,你需要设置对话框的属性,例如对话框的标题、初始化目录等。

你可以使用下面的代码来设置这些属性:folderPicker.m_ofn.lpstrTitle = TEXT("请选择文件夹"); folderPicker.m_ofn.Flags = OFN_EXPLORER;在这个例子中,我们设置了对话框的标题为"请选择文件夹",并启用了OFN_EXPLORER 标志,使得对话框使用资源管理器的风格。

第四步:显示文件夹选择对话框设置好对话框的属性后,你可以使用cfolderpickerdialog 对象的DoModal 函数来显示文件夹选择对话框:if(folderPicker.DoModal() == IDOK){CString selectedFolder = folderPicker.GetPathName();对所选文件夹进行处理}在这个例子中,我们使用DoModal 函数来显示文件夹选择对话框,并通过GetPathName 函数获取用户所选择的文件夹路径。

在CFileDialog对话框中添加控件

在CFileDialog对话框中添加控件

在CFileDialog对话框中添加控件关键字:CFileDialog扩展类,OFNHookProc需求描述:昨天遇到一个用户需求,在CFileDialog对话框(SAVE)中加入一个Check , 一个Edit,一个Spin控件,dlg.Domodal()==IDOK返回时要同时获得Edit控件中的数据.实现方法:如果只需要控制控件,用方法一即可,但如果需要获取数据,则只能用方法二。

我最终用的就是方法二.方法一: 首先查找MSDN关于CFileDialog扩展的实现描述,上网查到实现预览图片式的CFILEDIALOG的例子。

按照其思路从CFileDialog派生了一个新的类CFileDialogEX.在类中添加以下代码#define WM_CHECKZOOMIN WM_USER+1856public:BOOL bZoomIn;UINT nMul; //[1~100]//前置声明---------------BOOL NEAR CALLBACK HandleNotify(HWND hDlg, LPOFNOTIFY pofn);UINT_PTR CALLBACK OFNHookProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); // CFileDialogExIMPLEMENT_DYNAMIC(CFileDialogEx, CFileDialog)CFileDialogEx::CFileDialogEx(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName,DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) :CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd){//这个四个常用标识位m_ofn.Flags |= OFN_ENABLETEMPLATE |OFN_HIDEREADONLY|OFN_EXPLORER; //OFN_EXPLORER | OFN_ENABLEHOOKm_ofn.lpstrTitle = _T("高级保存对话框");m_ofn.hInstance = AfxGetInstanceHandle();m_ofn.lpstrFilter = _T("*.bmp\0*.BMP\0所有文件 \0 *.*\0 ");m_ofn.lpTemplateName = MAKEINTRESOURCE(IDD_FILEDIALOG_EX);m_ofn.lpfnHook = (LPOFNHOOKPROC)OFNHookProc;}//Hook function for the Comm Dlg//在这里处理我们感兴趣的消息,想要哪个,截哪个!UINT_PTR CALLBACK OFNHookProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {switch (uMsg){case WM_INITDIALOG: //初始化对话框上的控件if(SendDlgItemMessage(hDlg, IDC_CHECK_ZOOMIN, BM_GETCHECK,0,0) == BST_UNCHECKED){::EnableWindow(GetDlgItem(hDlg,IDC_EDIT_ZOOMNUM),FALSE);::EnableWindow(GetDlgItem(hDlg,IDC_SPIN_ZOOMNUM),FALSE);::SetWindowText(GetDlgItem(hDlg, IDC_EDIT_ZOOMNUM),_T("1"));//ShowWindow(button,SW_HIDE);}break;case WM_DESTROY: //消毁对话框{LPOPENFILENAME lpOFN = (LPOPENFILENAME)GetWindowLong(hDlg, DWL_USER);}break;case WM_COMMAND: //这里处理,IDC_CHECK_ZOOMIN命令{if ((HIWORD(wParam) == BN_CLICKED) && (LOWORD(wParam) ==IDC_CHECK_ZOOMIN)){BOOL bZoomIn = TRUE;if(SendDlgItemMessage(hDlg, IDC_CHECK_ZOOMIN, BM_GETCHECK, 0, 0) == BST_CHECKED){bZoomIn = TRUE;::EnableWindow(GetDlgItem(hDlg,IDC_EDIT_ZOOMNUM),TRU E);::EnableWindow(GetDlgItem(hDlg,IDC_SPIN_ZOOMNUM),TRU E);}else{bZoomIn = FALSE;//::SetWindowText(GetDlgItem(hDlg,IDC_EDIT_ZOOMNUM),"");::EnableWindow(GetDlgItem(hDlg,IDC_EDIT_ZOOMNUM),FAL SE);::EnableWindow(GetDlgItem(hDlg,IDC_SPIN_ZOOMNUM),FAL SE);}HWND hParent = GetParent(hDlg); // 注意hDlg是新加的模板对话框句柄,它是CFileDialog对话框的子部分,要获取CFileDialog对话框的句柄需要用GetParent函数PostMessage(hParent,WM_CHECKZOOMIN,(WPARAM)bZoomIn,(LPARAM)0 );bZoomIn = FALSE;}break;case WM_NOTIFY:HandleNotify(hDlg, (LPOFNOTIFY)lParam);break;}return 0;}//这里处理notify 消息BOOL NEAR CALLBACK HandleNotify(HWND hDlg, LPOFNOTIFY pofn){CFileDialogEx dlg(TRUE);switch (pofn->hdr.code){case CDN_SELCHANGE:{//char szFile[MAX_PATH];//// Get the path of the selected file.//if (CommDlg_OpenSave_GetFilePath(GetParent(hDlg), szFile, sizeof(szFile)) <= sizeof(szFile))//{// if(GetFileAttributes(szFile) != FILE_ATTRIBUTE_DI RECTORY)// {// //Should we load the Pic// if(SendDlgItemMessage(hDlg, IDC_CHECK1,BM_GETCHECK,0,0) == BST_UNCHECKED)// dlg.ShowImagepreview(hDlg, szFile);// }//}}break;case CDN_FILEOK:{int num;GetDlgItemInt(hDlg,IDC_EDIT_ZOOMNUM,&num,FALSE);if(SendDlgItemMessage(hDlg, IDC_CHECK_ZOOMIN, BM_GETCHECK, 0, 0) == BST_CHECKED){dlg.bZoomIn = TRUE;}elsedlg.bZoomIn = FALSE;return FALSE;}break;}return(TRUE);}原计划从回调函数得到触发消息,然后用PostMessage的方式将自定义的WM_CHECKZOOMIN消息发给主窗口,在主窗口中更新我新加的变量bZoomIn和nMul的值。

在Qt标准FileDialog对话框中插入控件

在Qt标准FileDialog对话框中插入控件

在Qt标准FileDialog对话框中插入控件Qt的界面大多是MVC的组织模式。

其中控制部分是对外的接口,而界面则不对外,就是说,用户只能在控制部分的接口中实现对Qt类的通信,如果你要是想改变界面的显示,则没有提供相关的接口。

我在实际工作要在QFileDialog中增加一个控件。

在QFileDialog 定义中可以发现Q_DECLARE_PRIVATE(QFileDialog),这句话就是在QFileDialog中定义了界面的联系。

查看宏的定义可以发现d_ptr就是QFileDialog可访问的界面指针。

这样就可以对界面元素进行操作了。

下面代码,在QFileDialog底部加一个Checkbox方法一:CFileDialogWithCheck::CFileDialogWithCheck(QWidget* parent, const QString & caption, const QString & directory, const QString & filter) : QFileDialog(parent,caption,directory,filter){checkBox = new QCheckBox(this);checkBox->setText("Include Original Document");checkBox->setCheckState(Qt::Checked);QFileDialogPrivate *pprivate = reinterpret_cast(d_ptr);pprivate->qFileDialogUi->gridLayout->addWidget(checkBo x,4,1);setAcceptMode(QFileDialog::AcceptOpen);setFileMode(QFileDialog::ExistingFile);}方法二:1.QFileDialog dialog;foreach (QObject *obj, dialog.children()){if (obj->objectName() == "fileNameLabel"){QLabel *label = qobject_cast<QLabel *>(obj);label->setText("hello");}}2.QFileDialog dialog;if (QLabel *label = dialog.findChild<QLabel *>("fileNameLa bel")){label->setText("hello");}dialog.exec();。

CommonDialog控件使用方法

CommonDialog控件使用方法

CommonDialog控件使用方法CommonDialog控件使用方法CommonDialog控件提供诸如打开和保存文件、设置打印选项、选择颜色和字体等操作的一组标准对话框。

运行 Windows 帮助引擎时,控件还能够显示帮助。

CommonDialog控件在Visual Basic和 Microsoft Windows 动态连接库Commdlg.dll 例程之间提供了接口。

为了用该控件创建对话框,必须要求Commdlg.dll 在 Microsoft Windows \System 目录下。

为了在应用程序中使用 CommonDialog控件,应将其添加到窗体上并设置属性。

控件显示的对话由控件的方法决定。

运行时,调用相应方法后将显示对话框或执行帮助引擎;设计时在窗体上将 CommonDialog控件显示成一个图标。

此图标的大小不能改变。

CommonDialog控件可以显示如下常用对话框:“打开”“另存为”“颜色”“字体”“打印”要使用 CommonDialog控件1. 若未添加 CommonDialog控件,则应从“工程”菜单中选定“部件”,将控件添加到工具箱中。

在标记对话的“控件”中找到并选定控件,然后单击“确定”按钮。

2. 单击工具箱中的“CommonDialog”控件并在窗体上绘制该控件。

在窗体上绘制 CommonDialog控件时,控件将自动调整大小。

象 Timer控件一样,CommonDialog控件在运行时不可见。

3. 运行时,请适当使用下表所列方法显示需要的对话。

显示“打开”和“另存为”对话框有了“打开”对话框就可指定驱动器、目录、文件扩展名和文件名。

“另存为”对话框在外观上与“打开”对话框相同,只是对话框的标题和文件名是暗淡的。

运行时选定文件并关闭对话框后,可用 FileName 属性获取选定的文件名。

要显示“打开”对话框1. 指定在“文件类型”列表框中显示的文件过滤器列表。

可用下列格式设置 Filter 属性:description1 | filter1 | description2 | filter2...Description 是列表框中显示的字符串——例如,"Text Files (*.txt)"。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在CFileDialog对话框中添加控件关键字:CFileDialog扩展类,OFNHookProc需求描述:昨天遇到一个用户需求,在CFileDialog对话框(SAVE)中加入一个Check , 一个Edit,一个Spin控件,dlg.Domodal()==IDOK返回时要同时获得Edit控件中的数据.实现方法:如果只需要控制控件,用方法一即可,但如果需要获取数据,则只能用方法二。

我最终用的就是方法二.方法一: 首先查找MSDN关于CFileDialog扩展的实现描述,上网查到实现预览图片式的CFILEDIALOG的例子。

按照其思路从CFileDialog派生了一个新的类CFileDialogEX.在类中添加以下代码#define WM_CHECKZOOMIN WM_USER+1856public:BOOL bZoomIn;UINT nMul; //[1~100]//前置声明---------------BOOL NEAR CALLBACK HandleNotify(HWND hDlg, LPOFNOTIFY pofn);UINT_PTR CALLBACK OFNHookProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam); // CFileDialogExIMPLEMENT_DYNAMIC(CFileDialogEx, CFileDialog)CFileDialogEx::CFileDialogEx(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName,DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) :CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd){//这个四个常用标识位m_ofn.Flags |= OFN_ENABLETEMPLATE |OFN_HIDEREADONLY|OFN_EXPLORER; //OFN_EXPLORER | OFN_ENABLEHOOKm_ofn.lpstrTitle = _T("高级保存对话框");m_ofn.hInstance = AfxGetInstanceHandle();m_ofn.lpstrFilter = _T("*.bmp\0*.BMP\0所有文件 \0 *.*\0 ");m_ofn.lpTemplateName = MAKEINTRESOURCE(IDD_FILEDIALOG_EX);m_ofn.lpfnHook = (LPOFNHOOKPROC)OFNHookProc;}//Hook function for the Comm Dlg//在这里处理我们感兴趣的消息,想要哪个,截哪个!UINT_PTR CALLBACK OFNHookProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {switch (uMsg){case WM_INITDIALOG: //初始化对话框上的控件if(SendDlgItemMessage(hDlg, IDC_CHECK_ZOOMIN, BM_GETCHECK,0,0) == BST_UNCHECKED){::EnableWindow(GetDlgItem(hDlg,IDC_EDIT_ZOOMNUM),FALSE);::EnableWindow(GetDlgItem(hDlg,IDC_SPIN_ZOOMNUM),FALSE);::SetWindowText(GetDlgItem(hDlg, IDC_EDIT_ZOOMNUM),_T("1"));//ShowWindow(button,SW_HIDE);}break;case WM_DESTROY: //消毁对话框{LPOPENFILENAME lpOFN = (LPOPENFILENAME)GetWindowLong(hDlg, DWL_USER);}break;case WM_COMMAND: //这里处理,IDC_CHECK_ZOOMIN命令{if ((HIWORD(wParam) == BN_CLICKED) && (LOWORD(wParam) ==IDC_CHECK_ZOOMIN)){BOOL bZoomIn = TRUE;if(SendDlgItemMessage(hDlg, IDC_CHECK_ZOOMIN, BM_GETCHECK, 0, 0) == BST_CHECKED){bZoomIn = TRUE;::EnableWindow(GetDlgItem(hDlg,IDC_EDIT_ZOOMNUM),TRU E);::EnableWindow(GetDlgItem(hDlg,IDC_SPIN_ZOOMNUM),TRU E);}else{bZoomIn = FALSE;//::SetWindowText(GetDlgItem(hDlg,IDC_EDIT_ZOOMNUM),"");::EnableWindow(GetDlgItem(hDlg,IDC_EDIT_ZOOMNUM),FAL SE);::EnableWindow(GetDlgItem(hDlg,IDC_SPIN_ZOOMNUM),FAL SE);}HWND hParent = GetParent(hDlg); // 注意hDlg是新加的模板对话框句柄,它是CFileDialog对话框的子部分,要获取CFileDialog对话框的句柄需要用GetParent函数PostMessage(hParent,WM_CHECKZOOMIN,(WPARAM)bZoomIn,(LPARAM)0 );bZoomIn = FALSE;}break;case WM_NOTIFY:HandleNotify(hDlg, (LPOFNOTIFY)lParam);break;}return 0;}//这里处理notify 消息BOOL NEAR CALLBACK HandleNotify(HWND hDlg, LPOFNOTIFY pofn){CFileDialogEx dlg(TRUE);switch (pofn->hdr.code){case CDN_SELCHANGE:{//char szFile[MAX_PATH];//// Get the path of the selected file.//if (CommDlg_OpenSave_GetFilePath(GetParent(hDlg), szFile, sizeof(szFile)) <= sizeof(szFile))//{// if(GetFileAttributes(szFile) != FILE_ATTRIBUTE_DI RECTORY)// {// //Should we load the Pic// if(SendDlgItemMessage(hDlg, IDC_CHECK1,BM_GETCHECK,0,0) == BST_UNCHECKED)// dlg.ShowImagepreview(hDlg, szFile);// }//}}break;case CDN_FILEOK:{int num;GetDlgItemInt(hDlg,IDC_EDIT_ZOOMNUM,&num,FALSE);if(SendDlgItemMessage(hDlg, IDC_CHECK_ZOOMIN, BM_GETCHECK, 0, 0) == BST_CHECKED){dlg.bZoomIn = TRUE;}elsedlg.bZoomIn = FALSE;return FALSE;}break;}return(TRUE);}原计划从回调函数得到触发消息,然后用PostMessage的方式将自定义的WM_CHECKZOOMIN消息发给主窗口,在主窗口中更新我新加的变量bZoomIn和nMul的值。

但调试发现我新定义的CFileDialogEX类中的WM_CHECKZOOMIN的消息响应函数总是无法进入。

进一步调式确定消息确实是发送成功了,而且窗口句柄也没有错,但就是进入不了我定义的响应函数。

经过资料查询和思索初步推理: CFileDialog的消息处理是封闭的,自动的,在没有用钩子的情况下我们是无法将自己的消息函数插入其中并能自己处理的。

从MSDN给的说明也可以看出,它推荐PostMessage传输的也只是系统定义消息如WM_COMMAND,也就是说你可以控制它的控件做某项动作或显示隐藏控件,移动控件的位置。

一切回到了原点,此路不通,继续寻找新的方法!!!!!!方法二:看到一篇文章.softist./programemo/cfiledialog/cfiledialog.htm,给我指了一条明路CFileDialog的个性化(VC++)本文是为标准的文件选择对话框添加控件以扩展它的功能。

为了做到这点,要把CFileDialog 类派生,还要准备粘贴控件用的对话框模板,把控件的消息响应入口追加到MESSAGE-MAP中。

例程。

文件选择对话框在选择文本文件时,可以预览这个文件的容。

1.生成对话框模板。

作一个对话框的资源,比如ID为IDD_DIALOG1。

其属性如下设定。

IDD_DIALOG1 DIALOG DISCARDABLE 0, 0, 187, 128STYLE WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDRENFONT 9, "MS Sans Serif"BEGINLTEXT "Static",stc32,7,7,173,114EDITTEXT IDC_EDIT_PREVIEW,7,18,102,30,ES_MULTILINE |ES_AUTOHSCROLL | ES_WANTRETURNPUSHBUTTON "Button1",IDC_BUTTON_PREVIEW,143,36,37,23END2.追加控件。

首先追加一个ID为stc32的大一点的静态文字控件(Static)。

然后在它的下面,追加预览用的多行编辑框(ID=IDC_EDIT_PREVIEW)和起动预览用的按钮(ID=IDC_BUTTON_PREVIEW)。

相关文档
最新文档