• MFC日志(2011.4.9)


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

    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为字符串形式,需要转化成最终需要的变量还需要做点工作。

    int atoi( const char *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,搞定!

  • 相关阅读:
    制作 MarkText 的导航栏和动画背景
    某雅互动静态页面
    html5 拖拽及用 js 实现拖拽
    九宫格
    phaser3 入门实例——收集星星游戏
    Flexbox Froggy:练习 Flex 布局的小游戏
    JS30
    ElasticSearch
    JVM
    jstack命令的使用
  • 原文地址:https://www.cnblogs.com/xweiwei/p/2010522.html
Copyright © 2020-2023  润新知