《Windows核心编程》の“打开”和“保存”文件对话框

二级VB培训笔记07:通用对话框 二级VB培训笔记07:通用对话框 通用对话框(CommonDialog)控件提供了一组标准对话框界面,包括打开文件、保存文件、选择颜色、选择字体、设置打印机和帮助等六个对话框。这些对话框只能返回用户输入、选择或确认的信息,要实现诸如文件打开、保存文件、设置颜色等操作,还必须编写相应的代码才能实现。 在设计状态下,通用对话框控件显示为一个在运行时不可见的图标。在程序运行状态下,可以通过设置其Ac... 阅读详情

Windows操作系统为一些常用功能提供了一些通用对话框(Common Dialog Box),比如,在不同应用程序中运行打开文件、选择字体、选择颜色等操作时,不同程序显示的对话框的模样都是一样。这些对话框是操作系统提供的,实现对话框的代码封装在Comdlg32.dll库文件中,由于不同版本的Comdlg32.dll在设计上可能有所不同,所以不同版本的Windows下对话框会有所不同。

Windows提供多种通用对话框,每种通用对话框都使用一个专用的函数来创建和显示,另外,提供一个数据结构供初始化对话框使用,并在同一个数据结构中返回用户在对话框中输入的数据。

 

“打开”文件和“保存”文件对话框

显示“打开”文件对话框的函数是GetOpenFileName,显示“保存”文件对话框的函数是GetSaveFileName。这两个函数可以让用户选择驱动器、目录,以及一个文件名。但这两个对话框不对文件进行任何操作,也就是说,它们仅给用户提供一个统一的界面来“选择”文件,获取文件名以后,对文件的打开、读写等操作还需要程序自己解决。

函数原型如下:

BOOL WINAPI GetOpenFileName(

  __inout  LPOPENFILENAME lpofn

);

BOOL WINAPI GetSaveFileName(

  __inout  LPOPENFILENAME lpofn

);

 

其中lpofn参数是一个指针,指向一个OPENFILENAME结构,程序在调用函数前需要在结构中填写初始化数据,两个函数使用的结构是一样的,只是初始化数据不同而已:

typedef struct tagOFN {

  DWORD         lStructSize; //结构的长度

  HWND          hwndOwner; //所属窗口,可以为NULL

  HINSTANCE     hInstance; //

  LPCTSTR       lpstrFilter; //文件筛选字符串

  LPTSTR        lpstrCustomFilter; //

  DWORD         nMaxCustFilter; //

  DWORD         nFilterIndex; //

  LPTSTR        lpstrFile; //全路径的文件名缓冲区

  DWORD         nMaxFile; //文件名缓冲区长度

  LPTSTR        lpstrFileTitle; //不包含路径的文件名缓冲区

  DWORD         nMaxFileTitle; //文件名缓冲区的长度

  LPCTSTR       lpstrInitialDir; //初始目录

  LPCTSTR       lpstrTitle; //对话框标题

  DWORD         Flags; //标志

  WORD          nFileOffset; //文件名在字符串中的起始位置

  WORD          nFileExtension; //扩展名在字符串中的起始位置

  LPCTSTR       lpstrDefExt; //默认扩展名

  LPARAM        lCustData; //

  LPOFNHOOKPROC lpfnHook; //

  LPCTSTR       lpTemplateName; //

#if (_WIN32_WINNT >= 0x0500)

  void          *pvReserved;

  DWORD         dwReserved;

  DWORD         FlagsEx;

#endif

} OPENFILENAME, *LPOPENFILENAME;

 

结构中重要字段说明:

lpStrFilter---指定文件名筛选字符串,该字段决定了对话框中“文件类型”下拉式列表框的内容,字符串可以由多组内容组成,每组包括一个说明字符串和一个筛选字符串,字符串最后用两个0结束。如下,字符串将在列表中显示两项内容,选择不同项目时分别列出“.txt”文件或者所有文件“*.*”:

'Text Files(*.txt)', 0, '*.txt', 0, 'All Files(*.*)', 0, '*.*', 0, 0

 

lpstrFile---指向一个包含文件名的缓冲区。如果这个缓冲区中已经包含了一个文件名,那么对话框初始化时显示的是这个文件名。当用户选择一个新文件时,函数在这里返回新的文件名。

 

nFileOffset---返回文件名字符串中文件名的起始位置,如当用户选择了文件“C:/dir1/file.txt”是,将返回8。

 

Flags---该字段决定对话框的不同行为,它可以是下列值的组合:

OFN_ALLOWMULTISELECT        //允许同时选择多个文件名

OFN_CREATEPROMPT //如果用户输入一个不存在的文件名,对话框向用户提示“是否建立文件”

OFN_FILEMUSTEXIST  //用户只能选择一个已经存在的文件名,

//使用这个标志时必须同时使用OFN_PATHMUSTEXIST

OFN_HIDEREADONLY         //对话框中不显示“以只读方式打开”复选框

OFN_OVERWRITEPROMPT       //在“保存”文件对话框使用时,当选择一个已经存在的文件时,

                            //对话框会提示“是否覆盖文件”

OFN_PATHMUSTEXIST        //用户输入用户名时,路径必须存在

OFN_READONLY //对话框中“以只读方式”复选框初始化时处于选中状态

 

调用显示“打开”或“保存”文件对话框时,函数会停留直到对话框关闭为止,当用户单击了对话框中的“确定”按钮时,函数返回TRUE,用户单击“取消”按钮退出时,函数返回FALSE,程序可以由此判断是否需要继续进行打开或保存文件操作。

 

打开对话框代码片段如下:

OPENFILENAME ofn;       // common dialog box structure

char szFile[260];       // buffer for file name

HWND hwnd;              // owner window

HANDLE hf;              // file handle

 

// Initialize OPENFILENAME

ZeroMemory(&ofn, sizeof(ofn));

ofn.lStructSize = sizeof(ofn);

ofn.hwndOwner = hwnd;

ofn.lpstrFile = szFile;

// Set lpstrFile[0] to '/0' so that GetOpenFileName does not

// use the contents of szFile to initialize itself.

ofn.lpstrFile[0] = '/0';

ofn.nMaxFile = sizeof(szFile);

ofn.lpstrFilter = "All/0*.*/0Text/0*.TXT/0";

ofn.nFilterIndex = 1;

ofn.lpstrFileTitle = NULL;

ofn.nMaxFileTitle = 0;

ofn.lpstrInitialDir = NULL;

ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

 

// Display the Open dialog box.

 

if (GetOpenFileName(&ofn)==TRUE)

    hf = CreateFile(ofn.lpstrFile,

                    GENERIC_READ,

                    0,

                    (LPSECURITY_ATTRIBUTES) NULL,

                    OPEN_EXISTING,

                    FILE_ATTRIBUTE_NORMAL,

                    (HANDLE) NULL);

 

打开保存对话框的实例代码片段如下:

// Obtain a handle to a reference device context. 

 

hdcRef = GetDC(hWnd);

 

// Determine the picture frame dimensions. 

// iWidthMM is the display width in millimeters. 

// iHeightMM is the display height in millimeters. 

// iWidthPels is the display width in pixels. 

// iHeightPels is the display height in pixels 

 

iWidthMM = GetDeviceCaps(hdcRef, HORZSIZE);

iHeightMM = GetDeviceCaps(hdcRef, VERTSIZE);

iWidthPels = GetDeviceCaps(hdcRef, HORZRES);

iHeightPels = GetDeviceCaps(hdcRef, VERTRES);

 

// Retrieve the coordinates of the client 

// rectangle, in pixels. 

 

GetClientRect(hWnd, &rect);

 

// Convert client coordinates to .01-mm units. 

// Use iWidthMM, iWidthPels, iHeightMM, and 

// iHeightPels to determine the number of 

// .01-millimeter units per pixel in the x- 

//  and y-directions. 

 

rect.left = (rect.left * iWidthMM * 100)/iWidthPels;

rect.top = (rect.top * iHeightMM * 100)/iHeightPels;

rect.right = (rect.right * iWidthMM * 100)/iWidthPels;

rect.bottom = (rect.bottom * iHeightMM * 100)/iHeightPels;

 

// Load the filename filter from the string table. 

 

LoadString(hInst, IDS_FILTERSTRING,

     (LPSTR)szFilter, sizeof(szFilter));

 

// Replace the '%' separators that are embedded 

// between the strings in the string-table entry 

// with '/0'. 

 

for (i=0; szFilter[i]!='/0'; i++)

    if (szFilter[i] == '%')

            szFilter[i] = '/0';

 

// Load the dialog title string from the table. 

 

LoadString(hInst, IDS_TITLESTRING,

     (LPSTR)szTitle, sizeof(szTitle));

 

// Initialize the OPENFILENAME members. 

 

szFile[0] = '/0';

 

Ofn.lStructSize = sizeof(OPENFILENAME);

Ofn.hwndOwner = hWnd;

Ofn.lpstrFilter = szFilter;

Ofn.lpstrFile= szFile;

Ofn.nMaxFile = sizeof(szFile)/ sizeof(*szFile);

Ofn.lpstrFileTitle = szFileTitle;

Ofn.nMaxFileTitle = sizeof(szFileTitle);

Ofn.lpstrInitialDir = (LPSTR)NULL;

Ofn.Flags = OFN_SHOWHELP | OFN_OVERWRITEPROMPT;

Ofn.lpstrTitle = szTitle;

 

// Display the Filename common dialog box. The 

// filename specified by the user is passed 

// to the CreateEnhMetaFile function and used to 

// store the metafile on disk. 

 

GetSaveFileName(&Ofn);

 

// Load the description from the string table. 

 

LoadString(hInst, IDS_DESCRIPTIONSTRING,

     (LPSTR)szDescription, sizeof(szDescription));

 

// Replace the '%' string separators that are 

// embedded between strings in the string-table 

// entry with '/0'.  

 

for (i=0; szDescription[i]!='/0'; i++)

{

    if (szDescription[i] == '%')

            szDescription[i] = '/0';

}

 

// Create the metafile device context. 

 

hdcMeta = CreateEnhMetaFile(hdcRef,

          (LPTSTR) Ofn.lpstrFile,

          &rect, (LPSTR)szDescription);

 

if (!hdcMeta)

    errhandler("CreateEnhMetaFile", hWnd);

 

// Release the reference device context. 

 

ReleaseDC(hWnd, hdcRef);

文件对话框打开保存 vs2010,VC++语言,文件对话框实现打开保存文件路径功能 立即下载

相关推荐

STM32硬件SPI驱动W5500以太网模块全流程(附避坑指南)

本文详细介绍了STM32硬件SPI驱动W5500以太网模块的全流程,包括硬件架构设计、SPI接口选型、官方驱动移植、网络协议栈配置与优化等关键步骤。通过实战案例和性能对比数据,帮助开发者快速实现稳定高效的网络连接,特别提供了常见问题排查指南和性能调优技巧。

weixin_29194693的博客 268

通用对话框学习一:OpenFileDialog

在进行WinForm程序的开发时,经常会有提示用户输入特定的信息,但是对于常见的任务,例如,打开和保存文件,可以使用预先编写好的对话框类,而不是定制的对话框。 对话框是一个在另一个窗口中显示的窗口,在继续执行程序流之前,可以让用户在对话框中输入一些数据。通用对话框常常用于从用户处获取一般性的信息,大多数应用程序都需要它,例如输入文件名,它是Windows操作系统的一部分。除了Pr...

weixin_30367873的博客 436

APO的全面进化之路(2):走向IBP、建设端到端供应链计划体系

前一篇记录阐述了在供应链计划(Supply Chain Planning)领域里SAP的关键产品APO的不断进化之路,即部分产品从APO进化到S/4HANA,本篇将继续阐述进化之路上的另一大中坚产品力量SAP-IBP(Integrated Business Planning)。作为SAP数字化供应链(Digital Supply Chain)中供应链计划SCP的左膀右臂,S/4HANA与IBP共同完善了计划域的完整闭环。本篇作为收尾,在先谈对IBP产品的个人认知之前,特别是在当今这个IT产品迭代多、技术革新

ChampaignWolf的专栏 5228

WINDOWS - 打开/保存文件对话框

https://docs.microsoft.com/en-us/previous-versions/windows/desktop/legacy/bb776913(v=vs.85)#ifiledialog-ifileopendialog-and-ifilesavedialog

qq726232111的博客 463

WordPress插件depicter存在SQL注入漏洞(CVE-2025-2011)

Depicter 是一款功能强大的 WordPress 幻灯片插件,允许用户通过直观的拖放编辑器轻松创建响应式滑块、轮播和动态内容展示。该插件提供丰富的模板库、动画效果和图层控制,支持多媒体内容嵌入(如图片、视频、HTML),并优化了移动端显示和SEO性能。其无代码操作界面适合非技术用户,同时提供高级自定义选项,适用于产品展示、营销推广和视觉叙事等多种场景,是提升网站视觉吸引力的高效工具。

m0_50125527的博客 550

④ Django创建用户中心应用users,扩展用户信息

本章配套视频教程 Django创建用户中心应用users,扩展用户数据 在settings.py文件中配置项目 1、语言配置:LANGUAGE_CODE = 'zh-hans’ 2、时区配置:TIME_ZONE = 'Asia\Shanghai’ 3、模板路径配置:‘DIRS’: [os.path.join(BASE_DIR, ‘templates’)], 并创建templates文件

轻编程的博客 671

Window系统编程 - 文件操作

介绍了CreateFile()、WriteFile()、ReadFile()参数详解,以及读写文件的函数使用,怎么利用错误码调试。

weixin_58038441的博客 1673

YOLO26涨点改进 | 小目标损失函数独家改进篇 | TGRS 2025 | 引入AdaFocalLoss损失函数,改进小目标检测,自适应聚焦小目标与样本分布不平衡,提升检测精度与训练稳定性

目录一、前言:YOLO26原生损失函数在小目标检测中的核心痛点(涨点瓶颈)1.1 小目标权重不足,聚焦能力薄弱1.2 样本分布不平衡适配性差,正负样本权重失衡1.3 训练不稳定,易出现梯度消失/震荡1.4 未区分小目标与背景的冗余干扰,误检率高二、TGRS 2025顶刊灵感解析:自适应聚焦损失的核心逻辑三、全网独家创新:AdaFocalLoss损失函数设计与YOLO26适配(核心重点,可复现)3.1 AdaFocalLoss函数整体设计(独家设计,清晰可复现)3.2 各核心模块详细设计(独家创新,可直接复现

qq_36130719的博客 202

Windows编程:在程序中打开文件和文件夹

ShellExecute函数用于执行shell命令,可用于打开文件夹或文件,ShellExecute函数的多字节版本ShellExecuteA(宽字符版本为ShellExecuteW)原型如下 HINSTANCE ShellExecuteA(HWND hwnd,LPCSTR lpOperation,LPCSTR lpFile,LPCSTR lpParameters,LPCSTR lpDirec...

少得多惑的博客 1926

CUDA-GDB(11)——调试示例演练

本博客包含三个CUDA-GDB的演练示例: ​​​​▶ Example: bitreverse ▶ Example: autostep ▶ Example: MPI CUDA Application

AI-安全-功耗 1512

微信终于支持“多设备同时在线”?我用 NAS + Docker 搭了一个云端微信系统,多端共享24小时在线

通过Docker 容器,将微信运行在云端并通过浏览器访问,实现多设备共享同一微信会话 📱。本文详细介绍完整部署流程、docker-compose 配置及资源控制方案,让微信变成“可访问的云桌面应用” ✨

XiaoqiangClub的博客 869

《Windows核心编程》の“字体”和“颜色”对话框

<br />“字体”通用对话框列出了系统中安装的字体,用户可以在上面选择字体名称,同时可以选择字体大小、颜色,以及一些效果如斜线、粗体、删除线或下划线等,显示选择“字体”对话框的函数是ChooseFont:<br />BOOL WINAPI ChooseFont(<br />  __inout  LPCHOOSEFONT lpcf<br />);<br />lpcf指向CHOOSEFONT结构:<br />typedefstruct {<br />  DWORD        lStructSize; //

ASCE1885 4261

halcon知识:常见三种模板匹配方法总结

halcon的三种模板匹配方法总结,halcon有三种模板匹配方法:即Component-Based、Gray-Value-Based、Shaped_based,分别是基于组件(或成分、元素)的匹配,基于灰度值的匹配和基于形状的匹配,此外还有变形匹配和三维模型匹配也是分属于前面的大类 本文只对形状匹配做简要说明和补充: Shape_Based匹配方法: 上图介绍的是形状匹配做法的一般流程及模板制作的两种方法。 先要补充点知识:形状匹配常见的有四种情况 一般形状匹配模板shape_model、线性变

gongdiwudu的专栏 4万+

《Windows核心编程》の“查找”和“替换”对话框+“页面设置”对话框

<br />要显示“查找”和“替换”文本对话框分别使用函数FindText和ReplaceText:<br />HWND WINAPI FindText(<br />  __in  LPFINDREPLACE lpfr<br />);<br />HWND WINAPI ReplaceText(<br />  __inout  LPFINDREPLACE lpfr<br />);<br />这两个函数都使用同样的FINDREPLACE结构:<br />typedefstruct {<br />  DWORD 

ASCE1885 3177

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

HC-05蓝牙模块与Arduino无线控制入门:从串口透传到手机交互

串口通信是嵌入式开发中设备与外部世界交互的基础方式,它定义了数据按位顺序传输的规则。在物联网和智能硬件领域,无线通信技术将串口的能力从有线扩展到无线,其中蓝牙串口透传模块扮演了关键角色。这类模块的核心价值在于将复杂的射频协议处理封装成简单的串口数据转发,极大降低了无线开发门槛,使开发者能聚焦于应用逻辑。基于串口透传原理,HC-05等经典蓝牙模块广泛应用于需要短距离、低成本无线控制的场景,如智能家居控制、机器人遥控、传感器数据采集等。本文以HC-05模块与Arduino的集成开发为例,深入解析了串口透传的实现

weixin_33743880的博客 339

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

《Windows核心编程》のWindows时间

<br />Windows时间的获取和设置:<br />在Win32编程中,常用的获取系统时间的函数是有两个,即GetLocalTime和GetSystemTime:<br />void WINAPI GetLocalTime(<br />  __out  LPSYSTEMTIME lpSystemTime<br />);<br />void WINAPI GetSystemTime(<br />  __out  LPSYSTEMTIME lpSystemTime<br />);<br />这两个函数的区别

ASCE1885 2278

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

上一篇: 《Windows核心编程》---执行可执行文件
下一篇: 《Windows核心编程》の“字体”和“颜色”对话框
ACE1985
博客等级 码龄17年 1307粉丝 308原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值