MFC日志(2011.4.9)

摘要:
读取和写入配置文件主要取决于两个功能//指向指定的值字符串5 LPCTSTRlpFileName//指向文件名字符串6)//如果INI文件中没有由前两个参数指定的字段名或键名,//存储INI文件值的目标缓冲区6DWORDnSize为7LPCTSTRlpFileName(字节)//指向INI文件名的字符串8);此函数的主要目的是将cstring转换为int。

最近在做一个工程的代码优化工作,想整理下遇到的问题,以便日后查找方便

1.MFC读写配置文件。

读写配置文件主要依赖于两个函数,分别是:WritePrivateProfileString和GetPrivateProfileString,其函数原型分别如下:

1 BOOL WritePrivateProfileString(
2 LPCTSTR lpAppName, // 指向指定字段的字符串
3  LPCTSTR lpKeyName, // 指向指定键的字符串
4  LPCTSTR lpString, // 指向指定值的字符串
5  LPCTSTR lpFileName // 指向文件名称字符串
6  );
1 DWORD GetPrivateProfileString(
2 LPCTSTR lpAppName, //指向指定字段的字符串
3 LPCTSTR lpKeyName, //指向键的字符串
4 LPCTSTR lpDefault, //如果INI文件中没有前两个参数指定的字段名或键名,则将此值赋给变量
5 LPTSTR lpReturnedString, //存放INI文件中值的目的缓存区
6 DWORD nSize, //目的缓冲区的大小,以字节为单位
7 LPCTSTR lpFileName //指向INI文件名称的字符串
8 );

前一个为写入,后一个为读取。实例如下:

WritePrivateProfileString("Pen","pensize","2",inistr+"//default.ini");

LPSTR in=new char[100];

GetPrivateProfileString("Pen","pensize","Get didn't work",in,100,inistr+"//default.ini");

需要注意的是:由GetPrivateProfileString读到的in这个变量为LPSTR,其和cstring是可以互转的,强制转换即可。

读到的in为字符串形式,需要转化成最终需要的变量还需要做点工作。

intatoi(constchar*string);

这个函数的主要目的就是将cstring转化成int。

2.配置文件中颜色信息的处理

因为项目中有些变量是COLORREF的,这是MFC中的颜色类型,其一般都是以类似RGB(0,0,255)这种形式赋值,如果以这种形式存储读取会很困难。

看了下COLORREF的原型,发现它是个32bit的数据,和int型应该是互通的。例如RGB(0,255,0)就应该是以二进制00000000|00000000|11111111|00000000形式存储,所以其int的值为65280,debug跟踪证实了这个想法。

所以,以RGB(0,255,0)为例,在ini中存储65280,读取时先将字符串转化为int型,再进行COLORREF的强制转化。

3.View类中志向doc类的全局指针

view类中访问doc类有一个现成的函数GetDocument(),想设一个全局指针访问到doc类,但是不知道在哪里进行初始化赋值,写在构造函数里发现程序崩了,因为在构造函数运行时应该还没有函数GetDocument(),查了一番,发现OnCreate函数运行在初始化之后,却提前于其他函数,因此重载OnCreate,搞定!

免责声明:文章转载自《MFC日志(2011.4.9)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇假设检验的Python实现HTML + CSS CSS设置背景图片后图片没有铺满屏幕等下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

chapter11:认识与学习bash之(1)认识shell与shell的变量功能

  使用终端的命令行就是通过bash 环境变量来处理的,bash还包括变量的设置与使用,bash操作环境的构建,数据流的重定向和管道等。 一,认识bash这个shell 1.什么是shell   我们一般通过shell来和内核进行通信,因为内核是要保护的。也就是说通过shell将我们的命令与内核通信,好让崔可以控制硬件来完成工作。   其实shell只是提...

Oracle——基础知识(一)

   一、Oracle中的数据类型 1、字符串类型。如:char、nchar、varchar2、nvarchar2。2、数值类型。如:int、number(p,s)、integer、smallint。3、日期类型。如:date、interval、timestamp。 4、其他。RAW-用来存储操作系统使用的原始二进制数据,可用于存储像图像或声音记录这样的信...

sass揭秘之变量

全局变量和局部变量 要了解sass或less的变量,有必要先了解下js的变量定义,先来一段js的代码: var a = 1; (function(){ a = 5; })(); console.log(a);//5 上面这段代码,匿名函数里面的a因为没有使用var关键字来定义,所以当我们在函数外打印a的时候,得到的是5,改变了一开始定义的1 var...

django -- 模版语言之过滤器Filters和for循环

前戏 在前面写的图书管理系统中,我们对模版语言应该已经不陌生了,使用{{ }}包裹起来的就是模版语言,只需要记住两种就可以了 {{ 变量名 }}            变量相关的 {% %}                 逻辑相关的  变量 如果使用的变量不存在,模版系统将插入string_if_invalid选项的值,它被默认设置为“”(空字符串) 看几...

ES6中的export以及import的使用多样性

模块功能主要由两个命令构成:export和import。export命令用于规定模块的对外接口,import命令用于输入其他模块提供的功能。 一、export导出模块使用部分的几种方式 一个模块就是一个独立的文件。该文件内部的所有变量,外部无法获取。如果你希望外部能够读取模块内部的某个变量,就必须使用export关键字输出该变量。下面是一个 JS 文件,里...

es6 解构赋值

ES6允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构(Destructuring)。 关于给变量赋值,传统的变量赋值是这样的: var arr = [1,2,3];//把数组的值分别赋给下面的变量; var a = arr[0]; var b = arr[1]; var c = arr[2];...