CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  基础类

※……※……※……※……※ 请问这样的数据结构如何设计比较好 ※……※……※……※……※

楼主popyyb(subreina)2003-12-03 10:54:41 在 VC/MFC / 基础类 提问

我的程序中有一些自定义的控件,每个控件对应相应的ini文件,在ini文件中存储该控件的基本属性和默认值。  
  我的想法是这样,在程序开始时,一次读入所有的ini文件,存到一个结构中,具体的ini如下:  
   
  [PROPERTY]  
  PROPERTY_COUNT=2  
   
  [PROPERTY_0]  
  ITEM_NAME=PROPERTY_TYPE,PROPERTY_TITLE,Operation_1,Operation_2  
  PROPERTY_TYPE=COMBOBOX  
  PROPERTY_TITLE=Wnd   Style  
  Operation_1=GFX_WND_NO_TITLE_STYLE  
  Operation_2=GFX_WND_TITLE_TXT_STYLE  
   
   
  [PROPERTY_1]  
  ITEM_NAME=PROPERTY_TYPE,PROPERTY_TITLE,LINE_1,LINE_2  
  PROPERTY_TYPE=LIST  
  PROPERTY_TITLE=Wnd   Style  
  LINE_1=GFX_WND_NO_TITLE_STYLE,0,text  
  LINE_2=GFX_WND_NO_TITLE_STYLE,1,text  
  LINE_3=GFX_WND_TITLE_TXT_STYLE,root,long  
   
  每一项都存为String,但是具体的ini文件个数不定,而且如上所示一个ini文件中的每个属性的项长度也不定,请问有什么好的设计,我这样读到内存结构中,以后调用就不用再读文件了,比较快点。  
   
  我想可能是这样吧:以ini文件作为节点,内部的item再以链表存储?  
   
  请大侠指点迷津,谢谢! 问题点数:0、回复次数:19Top

1 楼popyyb(subreina)回复于 2003-12-03 11:16:49 得分 0

upTop

2 楼cajon(峡谷泥)回复于 2003-12-03 11:25:32 得分 0

class   CItem  
  {  
  public:  
          CString   m_Name;  
          CString   m_Value;  
  }  
   
  class   CProperty  
  {  
  public:  
          CList<CItem>   m_Items;  
  }  
   
  class   MyIni  
  {  
  public:  
          CList<CProperty>   m_Property;  
  }  
   
  这似乎有点太简单了,但是,从你的问题看来,似乎没看到还有什么需要优化的地方,简单写一点,继续讨论吧!Top

3 楼nuaawenlin(飘人)回复于 2003-12-03 11:25:39 得分 0

大可不必  
  你可以对每一个字段的长度也进行ini存储。  
  比如对PROPERTY_0字段  
  可以存储字段数为5  
  [PROPERTY_0Count]  
        nCount=5  
  每次先读字段数,然后再进行循环读出即可Top

4 楼spotboy(小光头)回复于 2003-12-03 11:31:14 得分 0

我建议不使用ini进行存储,可以放到一个MDB的文件之中Top

5 楼popyyb(subreina)回复于 2003-12-03 11:47:02 得分 0

upTop

6 楼timepalette(时间调色板)回复于 2003-12-03 11:48:19 得分 0

实现一个类。应用层重载GetPrivateProfileXXXX。  
   
  类只能产生一个实例。  
   
  构造函数中初始化,读入配置文件所有内容。  
   
  数据结构:  
   
  struct   key  
  {  
        CString   strKey;  
        CString   strVal;  
  }  
   
  struct   section  
  {  
        CString   strSection;  
        CPtrArray   arrKeys;   //   存key结构指针的数组  
  }  
   
  在类中定义  
  private:  
        CPtrArray   m_arrSections;  
   
  然后比如  
  DWORD   GetPrivateProfileString(  
          LPCSTR   lpAppName,  
          LPCSTR   lpKeyName,  
          LPCSTR   lpDefault,  
          LPSTR   lpReturnedString,  
          DWORD   nSize,  
          LPCSTR   lpFileName)  
  {  
        查找。section,找到后查找key,找到后拷贝值  
  }Top

7 楼popyyb(subreina)回复于 2003-12-03 18:27:24 得分 0

再次请问,如果想把控件信息与属性栏联系起来,应该如何设计比较好?  
   
  我做的相当与Delphi那样的属性栏,用于新建控件在form中画出后,该控件所有的属性都显示在属性框中,但是:  
   
  当我修改了属性框中的某个属性后,控件如何知道是改动了那个属性?   我是有一根指针ptr志向当前所编辑的控件,   谢谢各位,   分数不够,另外再开!Top

8 楼popyyb(subreina)回复于 2003-12-03 21:07:16 得分 0

upTop

9 楼popyyb(subreina)回复于 2003-12-03 23:35:42 得分 0

upTop

10 楼lukaizhi(上当了)回复于 2003-12-04 00:09:44 得分 0

upTop

11 楼fuxf(布衣)回复于 2003-12-04 00:21:53 得分 0

用链表或向量来处理Top

12 楼popyyb(subreina)回复于 2003-12-04 09:21:05 得分 0

upTop

13 楼popyyb(subreina)回复于 2003-12-04 09:23:15 得分 0

能具体点吗?Top

14 楼guanjinke(纶巾客 blog:www.guanjinke.com)回复于 2003-12-04 09:44:10 得分 0

你可以为控件属性定一一个结构体,然后用标准模板库的Map映射。例如:  
  typedef   _yourProperty  
  {  
              CString   strName;  
              CString   strType;  
  .............  
  }   ControlPro;  
   
  #include   <map>  
   
  定义映射:  
  std::map<CString   ,ControlPro>   m_ctlProperties;  
  读入的时候  
  m_ctlProperties[控件名]=控件属性结构体;  
  使用某个控件的时候:  
  m_ctlProperties[控件名].strName;  
  Top

15 楼popyyb(subreina)回复于 2003-12-04 17:40:22 得分 0

楼上的大侠,你还是无法联系控件与属性栏啊,比如我在属性栏上改变了控件的title,在控件类中有一个属性m_title与之对应,则如何在改变title后,设置ptr->m_title?我费解的地方就在这里,各位大侠,多指点!Top

16 楼popyyb(subreina)回复于 2003-12-04 21:12:36 得分 0

upTop

17 楼popyyb(subreina)回复于 2003-12-05 09:19:06 得分 0

upTop

18 楼guanjinke(纶巾客 blog:www.guanjinke.com)回复于 2003-12-08 11:55:18 得分 0

如果你想作一个可以动态生成界面的应用程序。我觉得如果用MFC做是很辛苦的,你可以转换一个角度,使用MFC加ATL来做会很方便的。如果你的动态生成的控件不是很多的话。建议你自己重新用ATL来做一些ActiveX控件。因为控件本身就支持属性页,当你编辑界面时,可以使用OLE的InPlace,也就是在位激活,把界面编辑好放到INI文本里,或者是XML文件里,因为ActiveX控件可以有Persistent(可持续性),容器可以将你的控件属性保存起来。当你改动属性时,可以控件可以触发事件改变控件的属性。当你动态创建MFC控件时,你必须提前将控件的事件都准备,这是比较麻烦的一点。但是ActiveX控件,你可以通过Connection   Point来为他创建事件。如果使用ActiveX控件的话,你还应该为你的ActiveX控件创见一个容器,你可以使用CAxWindow模板类来创建。这样下来,你的动态生成效果就差不多可以实现了。Top

19 楼yl0002(yl)回复于 2003-12-08 12:41:27 得分 0

uuuupTop

相关问题

  • 如何设计“账户管理”数据结构
  • PB如何进行2叉树的数据结构的设计!(在线等代)
  • PB如何进行2叉树的数据结构的设计!(在线等代)
  • 请教数据结构设计高手,从数据结构考虑如何减轻报表的压力(报表解决方案)
  • 请教数据结构设计高手,从数据结构考虑如何减轻报表的压力(报表解决方案)
  • 设计一个数据结构存1996!
  • 数据结构与算法和面向对象的设计方法如何结合起来使用
  • 如何学习数据结构?
  • 如何更改数据结构
  • 如何优化这个数据结构?

关键词

  • 控件
  • 属性
  • 文件
  • 字段
  • 结构
  • 界面
  • activex
  • mfc
  • gfx
  • wnd

得分解答快速导航

  • 帖主:popyyb

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo