EDN首页   博客首页

最新日志

发表于:2008-9-2 13:26:03
标签:vc  文本  hex  读取数据  

2

VC 从文本中读取数据

 CStdioFile fp;
 CString strFileName,cmdRecord;
 byte cmd,addr,data0,data1,data2,data3;

 CFileDialog MyDialog(true,"","",OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "Text Files (*.txt)|*.txt|"); // open file menu (construct CFileDialog object)
 

 if (MyDialog.DoModal()==IDOK)
 {
  strFileName = MyDialog.GetPathName();
  if(!fp.Open(strFileName,CFile::modeRead |CFile::typeText))
  {
   MessageBox("Cannot open command file","Multi-Ucodes",MB_ICONERROR|MB_OK); // file cannot be opened (not existing)
   return;
  }
  else
  {
   USHORT numRecord="0";
   while(fp.ReadString(cmdRecord))
   {
    if (cmdRecord.Left(1) != '#')
    {
     sscanf(cmdRecord,"%x%x%x%x%x",&addr,&cmd,&data1,&data2,&data3);
     numRecord++;
     if (numRecord >= 100)
     {
      MessageBox("Warning: command list is too large,only 100 cmd can be executed!", "Multi-Ucode", MB_ICONWARNING|MB_OK);
      break;
     }
    }
   }
   fp.Close();
  }
 }
  

点击此处查看原文 >>

系统分类: 软件开发   |    用户分类:    |    来源: 原创

评论(0) | 阅读(253)
发表于:2008-6-6 10:40:59
标签:state_machine  FPGA  verilog  状态机  

1

Verilog三段式状态机描述

Verilog三段式状态机描述

时序电路的状态是一个状态变量集合,这些状态变量在任意时刻的值都包含了为确定电路的未来行为而必需考虑的所有历史信息。

状态机采用VerilogHDL语言编码,建议分为三个always段完成。

三段式建模描述FSM的状态机输出时,只需指定case敏感表为次态寄存器, 然后直接在每个次态的case分支中描述该状态的输出即可,不用考虑状态转移条件。

三段式描述方法虽然代码结构复杂了一些,但是换来的优势是使FSM做到了同步寄存器输出,消除了组合逻辑输出的不稳定与毛刺的隐患,而且更利于时序路径分组,一般来说在FPGA/CPLD等可编程逻辑器件上的综合与布局布线效果更佳。

示列如下:

 

//第一个进程,同步时序always模块,格式化描述次态寄存器迁移到现态寄存器

always @ (posedge clk or negedge rst_n)  //异步复位

 if(!rst_n)

   current_state <= IDLE;

 else

   current_state <= next_state;//注意,使用的是非阻塞赋值

 

//第二个进程,组合逻辑always模块,描述状态转移条件判断

always @ (current_state)   //电平触发

  begin

    next_state = x;  //要初始化,使得系统复位后能进入正确的状态

    case(current_state)

    S1: if(...)

       next_state = S2;  //阻塞赋值

    ...

    endcase

end

 

//第三个进程,同步时序always模块,格式化描述次态寄存器输出

always @ (posedge clk or negedge rst_n)

...//初始化

 case(next_state)

S1:

   out1 <= 1'b1;  //注意是非阻塞逻辑

S2:

   out2 <= 1'b1;

default:...   //default的作用是免除综合工具综合出锁存器。

endcase

end

点击此处查看原文 >>

系统分类: CPLD/FPGA   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(297)
发表于:2008-5-28 8:40:22
标签:gcc  预编译  头文件  g++  

1

浅谈GCC预编译头技术

文/jorge 节选

所谓预编译头,就是把头文件事先编译成一种二进制的中间格式,供后续的编译过程使用。GCC编译头文件后的中间文件是*.gch。

如何将头文件编译为.gch文件呢?用g++编译,格式:

g++ xxx.h

把.h文件当成.cpp文件一样来编译。如果需要控制编译细节,比如常量定义之类,可加上其它选项。运行之后,会在同个目录里生成一个名叫xxx.h.gch的文件。

注意在编译.gch的过程中,GCC并没有使用环境变量或 -I 选项来查找被编译的头文件,被编译的头文件必须在当前目录下。然而,被编译的头文件所进一步包含的其它头文件,却可以通过以上途径找到。简言之,就是把直接编译的那个头文件以类似对待.cpp文件的方式处理了。

比如该如何编译iostream呢?方法是在当前目录里建立一个头文件,把它放到用户定义的头文件里,比如foo.h,在其里面写上:#include <iostream>,然后编译它:g++ foo.h。生成的foo.h.gch,就是我们要的了。其它文件需要用到iostream的,不要包含iostream,要包含foo.h。切记,不是去包含foo.h.gch!

使用过程中,照搬一些stdafx.h相关的注意事项,它们同样适用于.gch文件:应该把那些不常修改的(首当其冲,当然是系统的)头文件放在预编译头里,而那些属于你的程序的一部分的头文件,一般并不放在预编译头里,因为它们可能随时要被修改的。每修改一次就要重新生成预编译头,并没有速度优势可言,失去预编译头的意义了。另外重要的注意事项是:如果你生成预编译头的时候用了一些选项,比如宏定义,那么使用这个预编译头的其它源代码文件,被编译的时候也要使用这些选项,否则会因为不匹配而编译失败。

使用预编译后的文件时,只要包含其所对应的.h文件即可!比如头文件叫foo.h,另外有一大堆其它文件都包含了这个foo.h,原来没有使用预编译头技术,现在忽然想使用了,于是把foo.h编译成了foo.h.gch。那其它文件要做怎样的修改?——什么都不用,一切照旧!聪明的GCC编译器在查找一个.h文件之前,会自动查找其目录里有没有对应的.gch文件,如有,且可用,则用之;没有,才用到真正的.h头文件。——慢着,“如有,且可用”,什么叫“可用”?——就是指这个.gch格式要正确,版本要兼容,而且如上所述,编译两者要用同样的选项。如果.gch不可用,编译器会给出一条警告,告诉我们:这个预编译头不能用!我只好用原有的.h头文件啦!什么?你说看不到这个警告?——当然,要先打开 -Winvalid-pch 选项才行,其默认是关闭的。

用 -H 选项感受一下预编译头的清爽吧!再没有滚不完的头文件了,明显提高的速度,绝对会让你有种翻身解放的感觉,原来MinGW也可以和蜗牛般的速度说再见的。

本文出自jorge的博客:blog.csdn.net/jorge,进行了删减和部分修改。

点击此处查看原文 >>

系统分类: 软件开发   |    用户分类:    |    来源: 整理

评论(0) | 阅读(410)
发表于:2008-3-31 8:45:40
标签:敬业  职场名牌  

1

做职场名牌

    当下是市场经济,所有的东西都可能成为商品,包括人,就是劳动力,虽然人不能称为东西,并且也不能说不是东西。

    当自己购买一件商品时,财力所能及的情况下,会优先选择名牌,多数情况下会有所保障。包括质量、性能。而只有其少数人不是把自己的劳动力作为商品出售,为什么不把自己塑造称职场的名牌呢?让雇主愿意出高价格来雇佣自己,做一个高品质的“商品”。

    职业守则:

    1. 高效高质完成工作

    2. 不因薪水而降级工作的质量

    3. 不因对工作和人的不满而降低工作的质量

    4. 站好最后一班岗

点击此处查看原文 >>

系统分类: 生活点滴   |    用户分类:    |    来源: 原创

评论(0) | 阅读(197)
发表于:2008-3-21 11:07:13
标签:励志  细节决定成败  

0

决定高薪的细节守则 激励自己

每天晚上8点到10点之间,你在做什么基本决定着你是薪水见涨,还是薪水见降。

8点到10点之间,是在有目的性阅读,还是为明天的事情做准备,甚至在充电专业或研
习第二专长?不管是哪一样,都有可能迈向成功,一个非常了解自己需要,同时也懂得
善待时间的人不可能是一个无效率的人,而效率在这个时代意味着什么则是不言而喻,
一个有效率的人,就连一个单位的同事都乐于与你共事。

欲求高薪,首先让我们做个有效率的人:

清理桌面:除了电脑,台历,不要多过两种以上的盆栽及工作资料,台面上不要有其它
任何东西。

看完的资料立刻处理,该呈报的立刻呈报,该送进碎纸机的立刻放进碎纸机,该废物再
利用的,立刻归置清楚,不要堆积,更不要拖拉。

每天固定一个时间开启邮箱,不要整个上班时间都在电脑屏幕前云游。

每天提早10分钟上班,将一天要办的事项制成表,做完一件划掉一件,荧光笔就是派这
个用途的,划掉的越多,成就感就越大,不信你试一次。

会不会接听电话也极大地影响着一天的工作进程,无效的电话吞吃有限的时间,是慢性
中毒,要会说抓起电话时的那声热情饱满的“喂”,也要会做探戈甩头般清脆利索的切
断,否则,整个的一天啊,就让电话线里那几个无面杀手给谋杀掉吧。

每周有两个小时的独处时间,一个小时用来检视过去一周里的收获,一个小时用来计划
下周的事情安排,作为一个香港凡人成功符号的冯两努有一个坚持了若干年的习惯,每
隔一段时间便独自在酒店住一两天,这一两天专门用来做下一步事情的计划与安排。酒
店没闲杂人员,没闲杂电话,心神可以相对安宁与专注,此方法也不妨一试。不必一定
到酒店,办公室楼顶上,花园树阴下,无处不可,只要心定。

提升自己的效率,保持整齐有序,给人信任感,建立自身的不可替代性,对升职、加薪
大有益处。

要想获得高薪,首先要获得职位的提升,或业务量的提升,而这些又需要你拥有优于他
人的特质:

超乎寻常的敬业精神,虽是老生常谈,但必须谈。一个敬业的人,不仅限于自己,而且
可以把与他共事的许多人带进一种积极向上的氛围,要记住,你所做的一切,老板都看
得到,只       要想一想,你连选购一件衬衫都不会那么不认真,更何况是是面对让
你维生的工作呢。

有一种忠诚,公司不要

一个员工的忠诚包括三个层面,对服务对象的忠诚,对主管的忠诚,对同事的忠诚,但
这份忠诚是建立在你对公司良性贡献的基础上的,而非无论什么情况只是坚贞不渝地呆
在一个地方不动,这种“忠诚”公司不要。

 

多做一点不是吃亏

许多人在一起工作,突然有一天,一个人没有任何预兆地得到了升迁,做了其他人的主
管。其他人去问老板,他凭什么啊?老板回答,他比你们做得多啊。这些人又问,不就
多了那么一点点吗?老板回答说,每天一点点,时间久了,就到了别人无法企及的高度
啦。

如果你哪天成了那个被升迁了的人,恭喜你,如果哪天你沦为去问老板别人为什么得到
升迁的那个人,省视自己。只有高贡献,才有高回报,这是铁律。

每天由普通往卓越靠近一点

在一个企业里,样样做到第一的人是引人注目的,如果做不到样样第一,退而求其次,
那也得有一样是第一。只要有一样超凡技能的人,就无须为薪水发愁,通往机会与回报
的路对所有的人开通,就看你能否踏上去。

创造自己的附加值,

让自己的身份扶摇直上

同一个业务电话,不同的人接听可能就会产生不同的结果,谁都知道世界金牌营销员吉
拉德的
经典故事,对公司而言,每个员工都是吉拉德,怕是每个老板的终极梦想。曾有
一件小事发生在一个当时尚不知名公司的一个不知名员工身上。一位顾客打电话来,说
他上次出差到这个城市时买了一件这家公司的产品,回去后发现有问题,根本无法使用
,这次来想退换。当业务员接到这个电话时,离那位顾客要离开此市的时间已经无多,
要赶往顾客办事的地点已是不可能,最后这位业务员灵机一动,将新货品包装好后,与
客户约定在顾客返程的机场碰头,最后,这位业务员交给那位顾宾的除了新换的货品外
,有一包当地的特产小吃,以及公司赠送给长期客户的忠诚T恤,他告诉那位顾客,新
换的货品已试过,应该无问题;如一旦还有问题,请打电话来,我再把新货送上门去。
那位顾客无比感触地说了一句让业务员大感意外的话,他说:不会再打电话啦,就是有
问题我也有心甘情愿认了。

后来,这家公司变得很出名,它的名字全世界都知道,叫松下电器。

找对自己的群人

良好的人际关系带来无限机会,这个机会包括工作机会,生意机会,学习机会,投资机
会,甚至许许多多叫不上名字的机会。

多接近善于激励自己也善于激励别人的阳光人士,借由他们的鼓励与赞美增加自己的信
心,并且这类阳光人士多为视野开阔、信息丰盈之人,与他们结伴,你获得的是提升,
而与相反人士结伴,你可能所获也正好相反。

心存戒律,知所敬畏

“神医阿波罗、埃斯克雷彼斯及天地诸神作证,我——希波克拉底发誓:

‘我愿以自身判断力所及,遵守这一誓约。凡教我医术的人,我应像尊敬自己的父母一
样尊敬他。

我愿在我的判断力所及的范围内,尽我的能力,遵守为患者谋利益的原则,并杜绝一切
阻截落后及害人的行为——’

一旦我违背了自己的誓言,请求天地诸神给我最严厉的惩罚!”

公元前五世纪,科斯岛上的希波克拉底医学学校,立志从医的年轻人都要在梧桐树下宣
誓,誓词就是希波克拉底誓言,这可能是最早的职业戒律:

一、对知识传授者心存感激;

二、为服务对象谋利益;

三、忠诚于自己的职业;

四、谨守职业规则。

虽时日久远,但这4条仍适合于当今的职场,尤其在这个职业戒律严重匮乏的时代。

知道害怕因自己的疏忽而失去公司的订单,知道害怕自己的技能欠缺而公司绩效受损,
知道害怕自己把公司的鼠标偷拿回家,第二天上班会脸生尴尬——

只要戒律心存,知所敬畏,你想不优秀、想不出色都难。一个如此优秀、出色的员工想
不获得高薪都难。

绩效才是硬道理。把自己经营成名牌,让自己的名字有价值。

那只小小的手袋,售价16000元,因为它是路易威登,一辆外形看上去并不抢眼的车,
只因前后两个蓝白图案就成了车中的极品,就因为它叫“宝马”。

这就是品牌,一种品质、信誉与价值的融合体。

一个良好的品牌可以触动感觉,品牌是一个可以把感觉带到产品上的连接器,它创造的
价值无以计算。

职场上也同样,让你的名字具有价值,把自己经营成名牌,一提到你,人们马上就会联
想到品质、绩效与信任等字眼。

世界顶级企管大师汤姆·彼得斯的四个小方法助你建立个人品牌:

对个人品牌进行公正的评估,以两到四项技能广为人知,并设定一个时间段,比如三个
月或半年,就完成一项将来可以写进履历表上的活动。

为建立自我品牌制定一个专用小本,用来详细记录所需改进的事项。

用尽可能少的字给自己一个定位,并朝此定位坚定不移迈进。

适时更新履历表,将自己职业生涯中,做过哪些职务,有过哪些成就(最好能将其量化)
,具备的技能是否能跟得上潮流,还拥有哪些潜力和技能一一记录清楚。虽然这些不是
创立自身品牌的惟一途径,但它至少传达了你的时代性和竞争力,是建立自身品牌必不
可少的一步。

系统分类: 生活点滴   |   用户分类: 个人技术总结   |   来源: 转贴

点击此处查看原文 >>

系统分类: 生活点滴   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(253)
发表于:2008-3-21 11:00:17
标签:明锐  新车  油耗  磨合  

0

明锐油耗测试

斯柯达明锐,1.6 手动 逸致

2008年3月18日上午,加油指示灯亮,加油100元,油价:5.34元/生,合18.72升。里程计数器清零。

2008年3月21日上午,加油指示灯亮,里程计数器显示为290.2公里。

平均油耗估计:18.72/2.9 = 6.45

还可以,每天都行驶在八达岭高速和北五环上,是行驶途中,平均时速34Km/H~46km/H,最高时速:85Km/H。避免猛踩油门,加速距离比较长,不过也导致后面的车不断的按喇叭。

点击此处查看原文 >>

系统分类: 汽车电子   |    用户分类:    |    来源: 原创

评论(0) | 阅读(620)
发表于:2008-3-21 10:47:37
标签:跳槽  技术  敬业  

0

终于换工作了

    在原单位兢兢业业(自认为)工作了3年后,我终于在看不到任何前景的情况下,选择了离开。不可否认,我的工作业绩一般,没有领导希望看到的源源不断的成绩,没有俯首帖耳的恭维。但是问心无愧的是,我近乎完美的完成了我的分内工作。

    我不喜欢成天被人监督着、催着工作。我不喜欢我的工作不被认可,尽管很有用。不喜欢政策朝令夕改,不喜欢领导带头不遵守自己定的制度,不喜欢凡事不是有制度确定而是有领导的个人喜好确定。不喜欢做了3年,收入也没有什么变化,而且其他人也没有变化,不喜欢每天上下班坐车3个小时却没有力量改变这一现状。所以我决定离开,去找我心中理想的工作。

    当然,这里也不是一无是处。我学会了忍耐,学会了沉默,学会了屈服。我在沉默中积蓄力量,充分挖掘的自己的技术潜力,MCU、C、VC、电路设计、FPGA设计都用心去学,使用。不足的是还缺少相关的理论。终于,工作中我找到了游刃有余的感觉。

    这份工作虽然没有给我物质上的满足,但是至少给我解决了户口,还有一些培训和学习的机会,领导对我还是比较肯定的。有机会做重要的工作,学了不少东西,给我增加了不少自信。另外,自己觉得不满意的地方也许和我自己的处事方式上也许有关系。还有非常重要的一点,公司还在创业阶段,各方面的资金比较紧张,这一点还是可以理解的。

    做技术的人都说做技术没有前途,我不这样认为。就像捡破烂的肯定也觉得捡破烂没有前途,那就不捡了吗?还是要捡,否则明天就没有饭吃。既然选择了做技术,就要先把技术做好,不要总觉得别人那份工作好做,真的给你,你未必能做好。无论哪个行业都是有若干垫脚石撑起来的。如果不努力,永远都是垫脚石。做就做到别人无法和你比,或者很少人能和你比。我想我做到了。我不是行业内的牛人,但我是小圈子的number one。

    接下来就该找工作了,开始非常受打击,因为摸不准用人单位的心思,给自己定位也不够准确。通过一番比较,给自己定位了两个方向。一、继续在本行业,要求是收入要符合自己的心里需求;二、去其他行业,做自己喜好的工作,能进就可以,待遇可以谈。统一的标准:工作办事要正规,按照制度办,公司要有一定的规模,有前景,一年内可以升职。

    就像奸商,随着掌握的信息愈来愈多,要价越来越高。当心中有了垫底的时候,就敢信口开河,往大里要。当然前提是技术上要过硬,这时候我真正感觉到,做好技术没有什么不好,技术至少是一个很好的跳板,如果没有技术,我只能在原地任人拍打,任人威胁,你还想不想再这里干了。

    最后经过比较,我选择了一家自认为比较满意的单位,谈的过程中也有一些小插曲,也有一些不满意的地方。想完全满意是不可能的,毕竟自己只是个普通人。而且越到入职,越发觉得心里没底,自己能不能胜任这份工作。别让用人单位失望啊!

    当然,所有的担心都是多余,到了新单位,发现以前积累的知识还是非常有用的。这让我觉得,无论自己定的目标是什么,一定要把本职工作做好,而不仅仅是做完。无论对于眼下,还是将来都是非常重要的。

    这份工作唯一的让人不满意的地方就是还是离家太远了,尽管可以想办法解决,无奈成本比较高,心里总是觉得有点不舒服。

点击此处查看原文 >>

系统分类: 生活点滴   |    用户分类:    |    来源: 原创

评论(0) | 阅读(231)
发表于:2007-11-24 9:57:04
标签:工作目标  尊重劳动者  

0

目标很重要

上中学时,常常听老师说要树立正确的人生观,尽管当时对人生观有字面的解释,但是终究不理解到底什么是人生观,也不懂得什么人生的目标。或许父母经常在耳边说的,考取重点高中就是那个时候的目标,因此从未觉得彷徨过。

现在想来,到读研究生前,还是一直有目标的,尽管这个目标并不明确,尽管这个目标可能来自周围环境的影响,但是在潜意识里是有点。高中的目标是考大学,大学的目标是做好学生干部,毕业参加工作的目标是考研,读研的目标是找到工作。

等到找到工作后,突然发现自己的目标不见了。渐渐发现有些目标是永远实现不了的,开始学会了放弃,有些可以实现的目标又觉得没有动力。觉得自己已经有些力不从心了。

已过三十,还能学会新的东西吗,即使学,又学什么呢?学了有用吗?是做技术的专家,还是做人际关系的万金油?社会是浮躁的,人心是浮躁的。这些都是问题。

我崇尚在一个领域里钻研的很深的人生,我喜欢研究中得来的乐趣,如果能在一个尊重人才的环境里,找到自己工作的目标,将是我最大的幸福。

点击此处查看原文 >>

系统分类: 生活点滴   |    用户分类:    |    来源: 原创

评论(1) | 阅读(464)
发表于:2007-11-24 9:30:02
标签:vc  用户自定义类  

1

如何添加用户自定义的类

VC中有时需要加入用户自定义的类。一般选择CObject类。但是在Class Wisard中没有该类,据说是因为Class Wisard - >new class的下拉列表中提供的都是MFC的类,这些类都是从CObject中派生出来,所以没有该类。

其实一个比较简单的做法是,从下拉菜单Insert中选择New class就可以实现建立用户自定义的类。

点击此处查看原文 >>

系统分类: 软件开发   |    用户分类:    |    来源: 整理

评论(0) | 阅读(404)
发表于:2007-11-20 9:12:50
标签:vc  radio用法  

1

VC中radio的用法

先为对话框加上2个radio button,分别是Radio1和Radio2。

问题1:如何让Radio1或者Radio2默认选上?如何知道哪个被选上了?

关键是选上,“默认”只要放在OnInitDialog()即可。三种方法可以让它选上,
第一种:
((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(TRUE);//选上
((CButton *)GetDlgItem(IDC_RADIO1))->SetCheck(FALSE);//不选上
((CButton *)GetDlgItem(IDC_RADIO1))->GetCheck();返回1表示选上,0表示没选上
第二种:
关联一个congtrol型变量(子类化),好ctrl+W(即打开classwizard),点开 Member Variables,咦?怎么没有IDC_RADIO1这个ID?原来是没有分组。因为radio button通常都是成组使用的,在一组里面是互斥的。取消,回到对话框资源面板,右键Radio1查看属性把Group选上,那么,Radio1和 Radio2就是一组了(怎么知道他们是一组的?后面说)。此时,就可以为Radio1增加一congtrol型变量m_ctrlRadio1了。如下:
m_ctrlRadio1.SetCheck(TRUE);
同样可以使用GetCheck()获取状态。
第三种:
关联一个int型变量(同样需要先分组)m_nRadio1,打开对话框构造函数,你会发现有:
m_nRadio1 = -1;m_nRadio1别赋值-1表示哪个都没有选上。如果你把-1改成0,就会发现Radio1默认被选上了,依此类推,m_nRadio1的值为1 就是第二个被选上了(这里同样有问题,哪个是第一个?哪个是第二个?)。获取状态很简单,UpdateData(TRUE)后判断m_nRadio1的值 即可。

问题2:如何使用多组?

多组和一组是一样的使用,只要搞清楚哪个是哪一组的就行了。再为对话框添加Radio3和Radio4。很简单,先为这些Radio Button排个顺序(这 个必须要做,比如你的一组控件有Radio1,Radio2,Radio3,就把它们的TAB顺序分别设为1,2,3,并将Radio1的Group属性 设为True,这样,当选中Radio1的时候和它关联的变量就是0,当选中Radio2的时候和它关联的变量就是1,依此类推),就是排 列他们的TAB ORDER。在对话框资源面板上Ctrl+D,然后按你自己的理想顺序用鼠标逐个点击就可以了。不妨假设Radio1、Radio2、Radio3、 Radio4分别是1、2、3、4。Radio1和Radio3都选上Group属性,那么,1、2是一组,3、4是另外一组,因为分组的原则是在选上 Group属性的这一个开始直到碰到下一个选上Group属性的。你不妨再Ctrl+D,令Radio1、Radio2、Radio3、Radio4分别 是1、3、2、4,那么Radio1和Radio3是一组,如果m_nRadio1=1,此时是Radio3被选上而不是Radio2被选上。分好了组就 分别使用它们吧。

嗯,也许你还要为它们添加鼠标单击事件,非常简单。


单选按钮控件(Radio Button)的使用

关键词: 单选按钮控件     使用方法                                           



一、对单选按钮进行分组:
每组的第一个单选按钮设置属性:Group,Tabstop,Auto;其余按钮设置属性Tabstop,Auto。如:
Radio1、Radio2、Radio3为一组,Radio4、Radio5为一组

设定Radio1属性:Group,Tabstop,Auto
设定Radio2属性:Tabstop,Auto
设定Radio3属性:Tabstop,Auto

设定Radio4属性:Group,Tabstop,Auto
设定Radio5属性:Tabstop,Auto

二、用ClassWizard为单选控件定义变量,每组只能定义一个。如:m_Radio1、m_Radio4。

三、用ClassWizard生成各单选按钮的单击消息函数,并加入内容:

void CWEditView::OnRadio1()
{
     m_Radio1 = 0;     //第一个单选按钮被选中
}

void CWEditView::OnRadio2()
{
     m_Radio1 = 1;     //第二个单选按钮被选中
}

void CWEditView::OnRadio3()
{
     m_Radio1 = 2;     //第三个单选按钮被选中
}

void CWEditView::OnRadio4()
{
     m_Radio4 = 0;     //第四个单选按钮被选中
}

void CWEditView::OnRadio5()
{
     m_Radio4 = 1;     //第五个单选按钮被选中
}

四、设置默认按钮:
在定义控件变量时,ClassWizard在构造函数中会把变量初值设为-1,只需把它改为其它值即可。
如:
//{{AFX_DATA_INIT(CUnitBlockTypeFlankPublicAdd)
m_Radio1 = 0;     //初始时第一个单选按钮被选中
m_Radio4 = 0;     //初始时第四个单选按钮被选中
//}}

//Radio   Button   使用  
  使用方法一:  
  在工程中添加控件后,直接在控件的Click事件中写入需要的代码即可  
   
  使用方法二:  
  1.建立一个基于对话框的用用程序,在其中加入三个Radio   Button,ID分别为:  
  IDC_RADIO1,IDC_RADIO2,IDC_RADIO3  
   
  2.控件的初始化:  
  在对话框类的OnInitDialog中加入代码:  
  CheckRadioButton(IDC_RADIO1,IDC_RADIO3,IDC_RADIO3);     //第一个参数为该组的第一个单选按钮的ID  
                                                                                                            //第二个参数为该组的最后一个单选按钮的ID  
                                                                                                            //第三个参数为该组中被选中的单选按钮的ID  
   
   
  3.在加入一个Button控件,并为其写入Click事件代码:  
  int   iRadioButton;  
   
  iRadioButton="GetCheckedRadioButton"(IDC_RADIO1,IDC_RADIO3);  
  if(iRadioButton==IDC_RADIO1)  
  MessageBox("Click   Button1");  
  if(iRadioButton==IDC_RADIO2)  
  MessageBox("Click   Button2");  
  if(iRadioButton==IDC_RADIO3)  
  MessageBox("Click   Button3");  
   
  其他说明:  
  Radio   Button成组使用时,只需保证在添加控件时资源号连续,并且第一个Radio   Button的属性中Group被选中即可.  
  这样就可以给这一组控件添加成员变量使用  
  例:  
  1.建立一个基于对话框的应用程序,添加三个Radio   Button,和一个Button  
  选中第一个Radio   Button属性中的Group  
   
  2.在Button的Click事件中添加代码:  
  UpdateData(TRUE);  
  if(m_radio==0)  
  MessageBox("0");  
  if(m_radio==1)  
  MessageBox("1");  
  if   (m_radio==2)  
  MessageBox("2");  
  UpdateData(false);

 

点击此处查看原文 >>

系统分类: 软件开发   |    用户分类:    |    来源: 转贴

评论(0) | 阅读(1587)
23下一页总共 , 当前 /