多语言版本 OPENFILENAME过滤器设置问题

2023-10-30

正常的时候,打开并选择一个文件这样写代码:

char szFileName[MAX_PATH] = { 0 };
OPENFILENAME ofn;
memset(szFileName, 0, MAX_PATH);
memset(&ofn, 0, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = NULL;
ofn.hInstance = GetModuleHandle(NULL);
ofn.nMaxFile = MAX_PATH;
ofn.lpstrTitle = _T("打开");
ofn.lpstrInitialDir = ".";
ofn.lpstrFile = szFileName;
ofn.lpstrDefExt = _T(".dat");
ofn.lpstrFilter = _T("参数文件(*.dat)\0*.dat\0\0");
if (GetOpenFileName(&ofn))
{
	// TODO
}

但是在涉及多语言软件的时候,怎么样才能把lpstrFilter内容放到资源文件里面去定义呢?显然直接输入参数文件(*.dat)\0*.dat\0\0是不被允许的,因为\0后面的字符串都将被自动截断了,只能输入参数文件(*.dat),但是如果缺少了后面一段,过滤器就失去了意义。于是我想到到字符串格式化,将内容拆分为2段,前面一段参数文件(*.dat)放到资源文件里面去,后面一段*.dat拼接起来不就可以了吗?于是乎就有了下面这段代码:

// 代码1
CString strFilter;
strFilter.Format(_T("%s(*.dat)\0*.dat\0\0"), _T("参数文件"));
ofn.lpstrFilter = strFilter;

// 代码2
TCHAR szFilter[_MAX_PATH] = { 0 };
memset(&szFilter, 0, _MAX_PATH);
strcpy(&szFilter[0], _T("参数文件"));
strcpy(&szFilter[_tcslen(szFilter) + 1], _T("*.dat"));
ofn.lpstrFilter = szFilter;

代码1,很显然\0后面字符串将会被自动截断。

代码2,程序调用成功,但是函数退出会提示堆栈遭到破坏,显然也是行不通的。

既然是堆栈遭到破坏,那么我们能不能不破坏栈结构,将信息写入到szFilter里面去呢?既然问题明了,办法总是能想出来的:

TCHAR szFilter[_MAX_PATH] = { 0 };
memset(&szFilter, 0, _MAX_PATH);
memmove(&szFilter[0], _T("参数文件"), _tcslen(_T("参数文件")));
memmove(&szFilter[_tcslen(szFilter) + 1], _T("*.dat"), _tcslen(_T("*.dat")));
ofn.lpstrFilter = szFilter;

这里用memmove或者memcpy就无所谓了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

多语言版本 OPENFILENAME过滤器设置问题 的相关文章

  • C++类结构规范定义

    后期私有类肯定还会有很多 为了自己和读者方便阅读 在后面的设计中将严格按照制定格式来定义类的变量和函数 pragma once class CClassxxx public CClassBase DECLARE DYNAMIC CClass
  • VC++ MapWinGis篇(创建图层)

    MapWinGis控件的引用 import MapWinGIS ocx rename IImage gisIImage rename ImageType gisImageType rename Point gisPoint using na
  • 多语言版本 UI资源切换

    1 如果窗体资源和源码里面所使用的字符串资源 都已经存在于资源视图里面 则通过下面方式来实现 LANGID lid GetSystemDefaultLangID if 0x0809 lid 英语 0x0809 SetThreadUILang
  • OpenGL GLFW入门篇 - 画凸多边形

    效果图 主体代码 void DrawPolygon void glPushMatrix glLoadIdentity glTranslatef 0 0 0 0 0 f 蓝色 glColor3f 0 f 0 f 1 f glBegin GL
  • VC++ 获取文件版本号

    源码实现 pragma comment lib Version lib typedef struct VS VERSIONINFO WORD wLength WORD wValueLength WORD wType WCHAR szKey
  • C++之xlsx文件操作之写操作

    采用xlsxwriter开源库的实现 声明如下 include xlsxwriter include xmlwriter h include xlsxwriter include workbook h include xlsxwriter
  • VC++ 程序启动即隐藏

    所谓的隐藏是程序启动后不显示主窗体 网上介绍了很多方法 是否达到效果 众说纷纭 这里只介绍一种在项目中实际应用到的切实可行的方法 这里假设主窗体为CMainDialog 1 变量声明 BOOL m bShowWindow 2 给变量赋初始值
  • C++ 标准库中数据类型转换

    头文件引用
  • C++ 可扩展的内存缓冲区

    类声明 CMemBuffer h pragma once class CMemBuffer public CMemBuffer DWORD dwSize 0 CMemBuffer void 申请内存 BOOL Realloc DWORD d
  • TightVNC H264编解码(二)之硬编码库的编译

    AVCodec codec avcodec find encoder by name nvenc h264 如果是默认的ffmpeg库 返回结果是NULL 看来是不带有硬编码功能的 重新编译分支ffnvcodec 不到半个小时编译完成 返回
  • GDI+ 显示GIF图像

    头文件定义 pragma once include
  • EasyPR编译指南

    1 下载源码 https github com liuruoze EasyPR Download ZIP或者git https github com liuruoze EasyPR git 将代码解压到硬盘目录下 例如F 车牌识别 Easy
  • VC++ Gdiplus::Bitmap抠图

    void SetBackgroundMaskImage LPCTSTR lpszImageName COLORREF crAlpha RGB 255 0 0 Gdiplus Bitmap pBkgrMaskBitmap CImageFact
  • CStdioFile扩展(支持Ansi、Unicode、Utf-8等文本格式)

    头文件声明 CStdioFileEx h StdioFileEx h interface for the CStdioFileEx class Version 1 1 23 August 2003 Incorporated fixes fr
  • CFileDialog 多文件选择注意事项

    当选择文件数量比较多的时候 发现CFileDialog返回文件名并不完整 翻阅MSDN发现文件名长度是有限制的 解决思路 CFileDialog dlgOpen TRUE T txt NULL OFN HIDEREADONLY OFN RE
  • VC++ FTP文件下传(断点续传)

    include
  • VC++ OpenCV+ZBar二维码识别

    利用OpenCV处理图像的优势 结合ZBar提高二维码识别结果 接口定义 include
  • VC++ CComboBox自绘阶段性总结

    在绘制列表框左侧的时候 本来说是采用的CImageList接口进行绘制 结果发现绘制后的图标不干净 有锯齿或者黑色背景存在 于是采用了GDI 来实现左侧图标的绘制 代码如下 GDI是完全可以通过图像处理彻底解决图标不干净问题的 之前文章有介
  • OpenGL GLFW入门篇 - 画矩形2

    上一篇介绍了如何渲染矩形 这一篇介绍如何将叠加的部分透明显示 效果图 主体代码 void DrawRectangle void GLfloat xl yt xr yb w h glPushMatrix glLoadIdentity glTr
  • VC++ CComboBox自绘(选择下拉列表框)

    效果图 头文件定义 CSWCheckComboBox h pragma once class CSWCheckComboBox public CComboBox DECLARE DYNAMIC CSWCheckComboBox 成员私有结构

随机推荐

  • Ubuntu18.04 安装 samba 服务器

    步骤一 直接使用命令 sudo apt get install samba 步骤二 检查下samba安装信息 使用命令 dpkg l grep i samba 步骤三 使用命令 来启动samba服务 etc init d smbd star
  • 【江苏省赛】C - Cats 找规律+模拟

    原题 输入1 1 输出1 1 输入2 3 输出2 1 2 3 题意 1 20的数字 两个相同数字不能相邻 且他们之间的最小值要严格小于它们 求长度为n的这样的序列 思路 大的插在现有的空中间 如下 1 2 1 2 3 2 3 1 3 2 3
  • 初探ROP

    文章目录 0x01 前言 0x02 什么是ROP 0x03 为什么要ROP 0x04 基本ROP ret2shellcode 含义 从原理中解析ret2shellcode 从例子中解析ret2shellcode 发现利用点 确定利用前提 调
  • 对比和消融实验

    对比实验 Comparative Experiment 和消融实验 Ablation Experiment 是在科学研究中常用的两种实验设计方法 用于评估和验证某个因素对研究结果的影响 对比实验是通过将不同的方法 模型或算法进行比较来评估它
  • Python统计分析库statsmodels的OLS

    statsmodels库官方文档http www statsmodels org stable 里面包含很多统计模型和相应计算结果 一些Linear Regression Models例子http www statsmodels org s
  • xssgame第一关至第五关

    第一关很简单 进入第二关 先尝试 查看页面源代码 可以利用闭合 答案截图 第三关 从源代码可以看到 lt gt 被转义了 所以选了几个不需要 lt gt 这个事件性的 第四关 将单引号换成双引号 第五关 第五关频频出现多余的下划线 只要sc
  • C语言-学生学号成绩读入程序(输出了学生总分、平均分、名次以及学生信息的查询)

    任务描述 成绩排名次 某班期末考试科目为数学 MT 英语 EN 和物理 PH 有最多不超过30人参加考试 考试后要求 1 计算每个学生的总分和平均分 2 按总分成绩由高到低排出成绩的名次 3 输出名次表 表格内包括学生编号 各科分数 总分和
  • 华为OD机试 - 垃圾短信识别(Java)

    题目描述 大众对垃圾短信深恶痛绝 希望能对垃圾短信发送者进行识别 为此 很多软件增加了垃圾短信的识别机制 经分析 发现正常用户的短信通常具备交互性 而垃圾短信往往都是大量单向的短信 按照如下规则进行垃圾短信识别 本题中 发送者A符合以下条件
  • android自带网页提供,Android调用系统自带浏览器打开网页的实现方法

    在Android中可以调用自带的浏览器 或者指定一个浏览器来打开一个链接 只需要传入一个uri 可以是链接地址 启动android默认浏览器 在Android程序中我们可以通过发送隐式Intent来启动系统默认的浏览器 如果手机本身安装了多
  • Acwing-42. 栈的压入、弹出序列

    每一步进行的操作有两种 将下一个数压入栈中 将当前栈顶元素弹出 判断当前栈顶元素是否和下一个要输出的数是一样的 一样 gt 必然会将当前栈顶元素弹出 不一样 gt 必然会将输入序列的下一个元素加入栈中 class Solution publ
  • 实战DeviceIoControl 之五:列举已安装的存储设备

    Q 前几次我们讨论的都是设备名比较清楚的情况 有了设备名 路径 就可以直接调用CreateFile打开设备 进行它所支持的I O操作了 如果事先并不能确切知道设备名 如何去访问设备呢 A访问设备必须用设备句柄 而得到设备句柄必须知道设备路径
  • tf.add()不只是简单相加

    tf add 大多数用法都是 单个数字和单个数字的简单相加 例如 import tensorflow as tf x tf constant 2 y tf constant 1 sess tf Session print sess run
  • Python中的【if __name__=='__main__':】

    1 Java和C 的程序入口 Java的程序入口Main函数 public static void Main string args 方法体 C 的程序入口Main函数 public static void Main string args
  • 业务数据分析——同环比(待补全)

    1 解决的问题 企业对公司人员贡献 离职 入职 招聘 人力成本等的统计和发现 与之前特定时期的数据对比 直观的感受数值变化 各方面的发展情况 从而对企业结构和投入等作出调整 同比说明本期发展水平与去年同期发展水平对比的相对发展速度 环比说明
  • echarts 修改图片(画布)大小

    一 问题 echarts 官网有很多 examples 可以直接在上面修改成自己想要的样子 链接 https echarts apache org examples 但是我发现这个不能改变整个图片的大小 也就是下载之后的大小 有时候布局不是
  • 【python学习笔记】Python对经纬度处理

    说明 因为地球是球面 所以地球平面间的距离也得根据球面来计算 连个问题 两经纬度点之间的距离 根据一个给定经纬度的点 进行附近若干距离地点查询 两点之间的距离 根据经纬度计算距离 def distance lon1 lat1 lon2 la
  • FEC原理及其实现

    感谢原作者 http blog csdn net rootusers article details 49097257 视频会议中通常使用的FEC QOS技术 这方面的资料比较复杂和稀少 根据这么多年的工作经验 做一下分享 在IP视频通话中
  • 编码方式

    NRZ编码 NRZ 是最简单的串行编码技术 用两个电压来代表两个二进制数 如高电平表示 1 低电平表示 0 NRZI编码 NRZI 则是用电平的一次翻转来表示 1 与前一个 NRZI 电平相同的电平表示 0 曼彻斯特编码 曼侧斯特编码将一个
  • (10)QJ_黑电平&AWB&CCM校正步骤&raw数据抓取

    1 设备准备 待校正主控 SENSOR 镜头 镜头盖 可抓raw版本 2 环境准备 图像室灯箱环境 24色卡 照度计 3 说明书准备 HiISP 颜色调优说明 图像质量调试工具使用指南 4 工具准备 PQTOOL 版本对应 插件齐全 Ima
  • 多语言版本 OPENFILENAME过滤器设置问题

    正常的时候 打开并选择一个文件这样写代码 char szFileName MAX PATH 0 OPENFILENAME ofn memset szFileName 0 MAX PATH memset ofn 0 sizeof ofn of