??xml version="1.0" encoding="utf-8" standalone="yes"?>成人精品一区二区久久久,一本色综合网久久,久久99国产精一区二区三区http://www.shnenglu.com/neverwinter/archive/2011/06/19/148964.htmlnelsonnelsonSun, 19 Jun 2011 08:06:00 GMThttp://www.shnenglu.com/neverwinter/archive/2011/06/19/148964.htmlhttp://www.shnenglu.com/neverwinter/comments/148964.htmlhttp://www.shnenglu.com/neverwinter/archive/2011/06/19/148964.html#Feedback3http://www.shnenglu.com/neverwinter/comments/commentRss/148964.htmlhttp://www.shnenglu.com/neverwinter/services/trackbacks/148964.html
毕竟q个东西是我们目l的入门l习Q当q很多新人刚q来Q老组镉K会教他们用MFC/QT做个计算器来看看水^。由于各U原因,我当q倒是没有受到q种“C遇”Q等我真正开始做软g的时候,q是服务器端q样的纯C++代码做得比较多。但是不做不知道Q一做才发现UI的逻辑q是挺复杂的Q比如说Q按“1”是追加到当前昄q是覆盖现有的显C呢Q最后把逻辑弄清楚倒不是很ȝQ但要写出好看的代码q是有比较大的差距的?br />
以上都是前言Q好像比较长……

要说的是Q在q个q程中发现的问题Q计结果是点敎ͼ要怎么判断其是否能无损地{换成整数Q从而消除小数点后的一D|用的“0”Q以更好地显C。直接上代码Q?br />
 1 template <typename FloatType>
 2 struct _floattype_meta
 3 {
 4 };
 5 
 6 template<>
 7 struct _floattype_meta<float>
 8 {
 9     enum {
10         EXPO_OFFSET = 23,
11         EXPO_LEN = 8
12     };
13 
14     typedef uint32_t match_uint_type;
15 };
16 
17 template<>
18 struct _floattype_meta<double>
19 {
20     enum {
21         EXPO_OFFSET = 52,
22         EXPO_LEN = 11
23     };
24 
25     typedef uint64_t match_uint_type;
26 };
27 
28 template <typename FloatType>
29 struct float_to_int
30 {
31     typedef struct _floattype_meta<FloatType> _meta;
32 
33     bool operator() ( FloatType f, FloatType precision )
34     {
35         static const _meta::match_uint_type EXPO_MASK = 
36             (~((~(_meta::match_uint_type)0<< _meta::EXPO_LEN )) << _meta::EXPO_OFFSET;
37         _meta::match_uint_type* pf = (_meta::match_uint_type*)&f;
38         uint32_t expo = ((*pf) & EXPO_MASK) >> _meta::EXPO_OFFSET;
39 
40         static const uint32_t EXPO_FIRSTBIT_MASK = 1<< (_meta::EXPO_LEN-1);
41         static const uint32_t EXPO_BOUND = EXPO_FIRSTBIT_MASK - 1;
42         if ( expo >= EXPO_BOUND )
43         {
44             uint32_t to_right_move = expo - EXPO_BOUND;
45             if ( to_right_move >= _meta::EXPO_OFFSET )
46             {
47                 return true;
48             }
49             uint32_t cmp_len = _meta::EXPO_OFFSET - to_right_move;
50             _meta::match_uint_type mask = ~(~((_meta::match_uint_type)0<< cmp_len);
51             return (*pf&mask) ? false : true;
52         }
53         else
54         {
55             return ( f < precision && f > -precision ) ? true : false;
56         }
57     }
58 };

我的Ҏ(gu)是通过点型的l构来进行判断?br />
点cd一般结构如下:
|+/-|      exponent       |             tail                 |
对于floatQ指数部分ؓ8字节Q尾数部分ؓ23字节?br />
对于doubleQ指数部分ؓ11字节Q尾数部分ؓ52字节?br />其中指数部分是采用偏UL式的Q比如float的指数部分ؓ130Q偏Udgؓ127Q即实际指数?30-127?br />更详l的请参?a target="_blank" >q里?/div>
判断Ҏ(gu)是,计算指数的|Ҏ(gu)偏移判断数点后的尾敎ͼ惛_比较单,汗!
引入参数_ֺ是ؓ了判断值小?时达到某个阈值的时候可以将后面的小数略厅R?br />
HonestlyQ其实这个应该可以用sprintfQ然后判断小数点后的“0”来实现的Q似乎更加简单方ѝ?br />但是我觉得,作ؓ一?#8220;码农”Q重造轮子也是一U趣呛_Q?img src ="http://www.shnenglu.com/neverwinter/aggbug/148964.html" width = "1" height = "1" />

nelson 2011-06-19 16:06 发表评论
]]>关于工作关系的一些吐?/title><link>http://www.shnenglu.com/neverwinter/archive/2011/06/16/148812.html</link><dc:creator>nelson</dc:creator><author>nelson</author><pubDate>Thu, 16 Jun 2011 14:24:00 GMT</pubDate><guid>http://www.shnenglu.com/neverwinter/archive/2011/06/16/148812.html</guid><wfw:comment>http://www.shnenglu.com/neverwinter/comments/148812.html</wfw:comment><comments>http://www.shnenglu.com/neverwinter/archive/2011/06/16/148812.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.shnenglu.com/neverwinter/comments/commentRss/148812.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/neverwinter/services/trackbacks/148812.html</trackback:ping><description><![CDATA[w处一个学生团队中Q虽说会像公怸样从事项目研发、承包一些外包项目,学生如公司的员工一P老师有点像公司Boss又不完全是,但感觉最大的分别是h与h、h与集体之间关pȝpȝU带不一栗?br /><br />好比说在公司里,抛开兴趣爱好、对公司情感{的上层因素Qh与集体之间最基本的关pL合同制、契U关pR这意味着Q我完成我的工作Q你p相应地支付劳动报酬,虽然有些赤裸裸的资本M金钱利益交易的色彩,但确是最实在、最有保证的关系。如果我完成不了我的工作Q你可以付、乃至不付劳动报酬;额完成dQ可以有相应的奖金(理想状态下Q;哪天我请假了Q我没有工作Q那天的工资可以扣除。好比钢炼里面的“{h(hun)交换”原则Q虽则不时有些残P却又是最自然、最透明、最公正的。这学期׃目原因Q在外面公司待了好一D|_看到了不外面的人对于工作的态度也是相当的坦荡荡Q该请假时就请假Q迟C扣钱。当Ӟq最好还是以不媄响集体利益ؓ前提?br /><br />反观我所处环境的情况Q师生之间显然不可能是雇佣关p,那是什么来l系一个团队的q作Q完成一个个的项目呢Q我认ؓ?#8220;责Q”。培L有责L的hQ也是我们所提倡的。但Q我曄听过一个过来h说的故事Q某人某ơ小假期回家Q最后几天突然生病了q比较严重,父母都劝他在家把病养好再回去做项目,他还是执意要回来Q毕竟大安在工作,他也不好意思就q样多休息几天。又如,大三那年的暑假,正值新目开始,目周期短、工作量大,大家都在奋战着Q突然我安发生变故Q当时我惌是不要回MQ回M没用Q而且我一赎ͼ我这块的q度谁来保障Q就q是留在学校赉目,后来回想hq是有些遗憾。我们这些hd莫名其妙中对集体担负着q样那样?#8220;责Q”Q虽然这L责Q意识长期保持着会让我们成ؓ很不一L人,但是与此同时我们也是zd很篏的h?br /><br />我觉得,一切以集体为重的责L识很Ҏ(gu)Ҏ(gu)了个性的存在Q很多个人化的事情也因次而难以开展。由于我们的关系是抽象化?#8220;责Q”而不是更为具体的“合同”Q很多事情还真是C说不清的地步。考试、学生自然或不自然地便围l着集体的项目来安排Q有些很Uh化的事情不好d。最疲篏的是不自觉无时无d注着q样?#8220;责Q”关系、ƈ以一U较?#8220;癫狂”的方式来履行。作Z?#8220;全职”人员Q朝?ji)晚十是q_事,但有时候我觉得待不住了、坐得快要吐了,我觉得我q是不能dQ因为集体还要运作,或者说个h的不合作很容易弱化集体的凝聚力(不否认这是我写这文章的原因Q?br /><br />另一斚wQ以“责Q”为纽带来带领集体QL些异L感觉。曾l也做到了类似项目组长之cȝ工作Q需要管理一部分人,但L觉在q个q程中没有什么有说服力的关系来调度手下的人。如果是合同关系下的工作Q你不情我不愿,可以走可以换人,大家都乐得轻松。金钱利益是必须的,但d以换U方式来获取它。但是换着?#8220;责Q”意识作基Q手下的人没有这个意识似乎工作都不用做了Q又或者所做的不是个h所希望得到的,作ؓ理者我也不能给你什么、保证些什么?br /><br />好吧Q写到这里,我觉得我xq的是一个很厚?#8220;胶合?#8221;Q但?#8220;责Q”来概括似乎已l不够全面了。但依据《Unix~程艺术》,太厚的胶着层不是一U好的设计方式。简z、透明、直接的会是更好的方式,工作也能够更好地开展?br /><br />q好q是有终极的个h保障机制——you can quitQ离开集体Q便dqq种千丝万缕的关pR?br /><br />不说太多Q仅此吐槽!<img src ="http://www.shnenglu.com/neverwinter/aggbug/148812.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/neverwinter/" target="_blank">nelson</a> 2011-06-16 22:24 <a href="http://www.shnenglu.com/neverwinter/archive/2011/06/16/148812.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Archlinux~译ACE时出的问?/title><link>http://www.shnenglu.com/neverwinter/archive/2011/01/15/138574.html</link><dc:creator>nelson</dc:creator><author>nelson</author><pubDate>Sat, 15 Jan 2011 09:08:00 GMT</pubDate><guid>http://www.shnenglu.com/neverwinter/archive/2011/01/15/138574.html</guid><wfw:comment>http://www.shnenglu.com/neverwinter/comments/138574.html</wfw:comment><comments>http://www.shnenglu.com/neverwinter/archive/2011/01/15/138574.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/neverwinter/comments/commentRss/138574.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/neverwinter/services/trackbacks/138574.html</trackback:ping><description><![CDATA[官方有个比较_的编译安装指南,?a >q里</a>。但是对于我所到的问题没有说?br><br>提示链接时SSL的符h有找刎ͼ但我是装好了openssl的,也特意找了一下,都安装在/usr/?br><br>然后ȝ了一下build/examples/IPC_SAP/SSL_SAP/下的MakefileQ找?#8220;LIBS = -lrt -ldl”Q没有指明openssl库的链接<br><br>遂加上!?br><br>LIBS = -lrt -ldl -lssl<br><br>~译之!?br><br>build/test/SSL的问题同解?br><br>不知道其他Linux发行版有没有q样的问题,q是我的配置有问题,但ȝ最l编译完了?br><br><img src ="http://www.shnenglu.com/neverwinter/aggbug/138574.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/neverwinter/" target="_blank">nelson</a> 2011-01-15 17:08 <a href="http://www.shnenglu.com/neverwinter/archive/2011/01/15/138574.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Python做Web的中文编码问?/title><link>http://www.shnenglu.com/neverwinter/archive/2010/10/06/128790.html</link><dc:creator>nelson</dc:creator><author>nelson</author><pubDate>Wed, 06 Oct 2010 07:50:00 GMT</pubDate><guid>http://www.shnenglu.com/neverwinter/archive/2010/10/06/128790.html</guid><wfw:comment>http://www.shnenglu.com/neverwinter/comments/128790.html</wfw:comment><comments>http://www.shnenglu.com/neverwinter/archive/2010/10/06/128790.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/neverwinter/comments/commentRss/128790.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/neverwinter/services/trackbacks/128790.html</trackback:ping><description><![CDATA[     摘要:   <a href='http://www.shnenglu.com/neverwinter/archive/2010/10/06/128790.html'>阅读全文</a><img src ="http://www.shnenglu.com/neverwinter/aggbug/128790.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/neverwinter/" target="_blank">nelson</a> 2010-10-06 15:50 <a href="http://www.shnenglu.com/neverwinter/archive/2010/10/06/128790.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>new/delete operatorW记http://www.shnenglu.com/neverwinter/archive/2010/07/19/120793.htmlnelsonnelsonMon, 19 Jul 2010 10:21:00 GMThttp://www.shnenglu.com/neverwinter/archive/2010/07/19/120793.htmlhttp://www.shnenglu.com/neverwinter/comments/120793.htmlhttp://www.shnenglu.com/neverwinter/archive/2010/07/19/120793.html#Feedback0http://www.shnenglu.com/neverwinter/comments/commentRss/120793.htmlhttp://www.shnenglu.com/neverwinter/services/trackbacks/120793.html2.没有对应的operator delete会出现warningQvs2008Q?br>3.operator new/delete是类成员的情况下Q用自定义的operator new创徏、调用构造函敎ͼ会自动调对应的operator delete来析?br>4.delete操作W可以带多参敎ͼ要用自定义的operator new只能昑ּ调用
5.自定义的operator delete不会自动析构对象



nelson 2010-07-19 18:21 发表评论
]]>
关于vs2008 SP1中CMFCToolBar的一些事?/title><link>http://www.shnenglu.com/neverwinter/archive/2010/05/20/115984.html</link><dc:creator>nelson</dc:creator><author>nelson</author><pubDate>Thu, 20 May 2010 15:53:00 GMT</pubDate><guid>http://www.shnenglu.com/neverwinter/archive/2010/05/20/115984.html</guid><wfw:comment>http://www.shnenglu.com/neverwinter/comments/115984.html</wfw:comment><comments>http://www.shnenglu.com/neverwinter/archive/2010/05/20/115984.html#Feedback</comments><slash:comments>13</slash:comments><wfw:commentRss>http://www.shnenglu.com/neverwinter/comments/commentRss/115984.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/neverwinter/services/trackbacks/115984.html</trackback:ping><description><![CDATA[话说昨天解决了MFC跨线E操作控件的问题Q我满以Z天可以free一回,玩玩Linux、学学Vim、再准备一下毕业论文的事情Q但q是有事情要做,然后又是“?#8221;MFC郁闷了一天?br><br>先介l一下M的情c我们项目客L的开发环境是VS2008+SP1Q用的是MFCcdQ里面居然用CCMFCToolBar、CMFCMenuBar以及Appearance变化{的SPI新特性。说“居然”是因些东西不是项目必要的Q当时可能也以ؓ只是名字变了用法没变Q估计在工程创徏的时候根本就没有考虑q些Q直接按着单文档工E默认配|,next、next直接创徏完的Q囧Q当时做的时候也只是当作试Demo来用Q也没太在意Q毕竟我们项目的重点在服务器而非q个MFC客户端?br><br>后来׃目原因Q甲方要求我们把q个客户端尽快修Ҏ(gu)一个可以发布版本。不改不知道Q一改吓一跻I当准备动手修改工h时才发现与以前惯的CToolBar真实差距甚大。CToolBar可以用CImageList把自定义的BMP囄攑ֈ工具栏的按钮Q详l可?a >q里</a>QCMFCToolBarҎ(gu)׃是这L一个玩法。直接放一个CToolBar上来Q在DockControlBar()的时候会出现断言错误Q缺DockBarQ貌似是q个名字Q汗Q)。定位代码到MainFrm的EnableDocking()Q现在的MainFrm的承关pLCMainFrm->CFrameWndEx->CFrameWndQ而以前是CMainFrm->CFrameWndQCFrameWndEx::EnableDocking()是ؓDockPane()服务的,而DockControlBar()需要的DockBarq不会被初始化。调用基cȝCFrameWnd::EnableDocking()后再DockControlBar()不会出现断言Q但是那个工h没有昄。而且现在新特性下在工h位置能够按出右键菜单Q但右键菜单中根本不可能有关于该CToolBar的信息,乍看h很不和谐~<br><br>最后,求助本地MSDN无果Q貌似SP1没有包含对MSDN文档的更斎ͼ求助MSDN官网Q那个真?#8220;a意赅”。只能说QMS你这ơ真?#8220;?#8221;了!<br><br>以下为google + vs2008 sp1 sample + 看代码的成果Q?br> <ul> <li>创徏默认ToolBar外的W二个ToolBar</li> </ul> <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;"></span><span style="color: #008080;">1</span> //默认工具?br><span style="color: #008080;">2</span> m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, <br><span style="color: #008080;">3</span>                WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);<span style="color: #000000;"><br></span><span style="color: #008080;">4</span> <span style="color: #000000;">//自定义工h<br></span><span style="color: #008080;">5</span> <span style="color: #000000;">m_mybar.CreateEx(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">, TBSTYLE_FLAT, <br></span><span style="color: #008080;">6</span><span style="color: #000000;">                  WS_CHILD </span><span style="color: #000000;">|</span><span style="color: #000000;"> WS_VISIBLE </span><span style="color: #000000;">|</span><span style="color: #000000;"> CBRS_TOP </span><span style="color: #000000;">|</span><span style="color: #000000;"> CBRS_GRIPPER </span><span style="color: #000000;">|</span><span style="color: #000000;"> CBRS_TOOLTIPS </span><span style="color: #000000;">|</span><span style="color: #000000;"> CBRS_FLYBY </span><span style="color: #000000;">|</span><span style="color: #000000;"> CBRS_SIZE_DYNAMIC, <br></span><span style="color: #008080;">7</span><span style="color: #000000;">                  CRect(</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">), <span style="color: red;">ID_MYBAR</span>);</span></div> <br>注意QWizard生成的工hCreate时没有带IDQ但W二个工hCreate时最好要带ID。加了ID之后Q在工具栏右键菜单才会出现第二个工具栏的CheckBox。否则,不良后果有:1、右键菜单没有该工具栏CheckboxQ?、把默认工具栏和该工h拖出来(动Q,可以看到名字都是一LQ英文版为StandardQ;3、后面要提到的UserImage不能作ؓ按钮图标昄?br><br> <ul> <li>加蝲工具栏资?/li> </ul> 我们先来看看CMFCToolBar加蝲工具栏的函数原型Q?br> <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">1</span> <span style="color: #0000ff;">virtual</span><span style="color: #000000;"> BOOL LoadToolBar(UINT uiResID, UINT uiColdResID </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">, UINT uiMenuResID </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">, BOOL bLocked </span><span style="color: #000000;">=</span><span style="color: #000000;"> FALSE,<br></span><span style="color: #008080;">2</span> <span style="color: #000000;">        UINT uiDisabledResID </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">, UINT uiMenuDisabledResID </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">,  UINT uiHotResID </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">);</span></div> 可以看出QuiResID代表要加载的工具栏资源,理论上只需要这一个参数就能完成工h的加载。但是VS的Toolbar Editor只能~辑4bit的工h图标Q以前CToolBar是用CImagList来加载更多bits的图标的Q现在应该怎么做呢Q多亏了Explore sample的例子,我发现后面的几个UINT参数是BMP的资源,最主要的是最后一个uiHotResIDQ即便其他用默认|q项赋BMP IDp按预期的图标昄。Cold、Disable表示的是不同状态下的图标样式,带Menu的是Menu有关的图标,具体可看SP1 Feature的sample?br>我的Demo里自定义工具栏的dE:<br> <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">1</span>     <span style="color: #0000ff;">if</span><span style="color: #000000;"> (</span><span style="color: #000000;"> !</span><span style="color: #000000;">m_mybar.CreateEx(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">, TBSTYLE_FLAT, <br></span><span style="color: #008080;">2</span><span style="color: #000000;">                            WS_CHILD </span><span style="color: #000000;">|</span><span style="color: #000000;"> WS_VISIBLE </span><span style="color: #000000;">|</span><span style="color: #000000;"> CBRS_TOP </span><span style="color: #000000;">|</span><span style="color: #000000;"> CBRS_GRIPPER </span><span style="color: #000000;">|</span><span style="color: #000000;"> CBRS_TOOLTIPS </span><span style="color: #000000;">|</span><span style="color: #000000;"> CBRS_FLYBY </span><span style="color: #000000;">|</span><span style="color: #000000;"> CBRS_SIZE_DYNAMIC, <br></span><span style="color: #008080;">3</span><span style="color: #000000;">                            CRect(</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">,</span><span style="color: #000000;">1</span><span style="color: #000000;">), ID_MYBAR) </span><span style="color: #000000;">||</span><span style="color: #000000;"><br></span><span style="color: #008080;">4</span> <span style="color: #000000;">         </span><span style="color: #000000;">!</span><span style="color: #000000;">m_mybar.LoadToolBar( IDR_TOOLBAR1, </span><span style="color: #000000;">0</span><span style="color: #000000;">, </span><span style="color: #000000;">0</span><span style="color: #000000;">, FALSE, </span><span style="color: #000000;">0</span><span style="color: #000000;">, </span><span style="color: #000000;">0</span><span style="color: #000000;">, theApp.m_bHiColorIcons</span><span style="color: #000000;">?</span><span style="color: #000000;">IDB_BITMAP1:</span><span style="color: #000000;">0</span><span style="color: #000000;"> ) )<br></span><span style="color: #008080;">5</span> <span style="color: #000000;">    {<br></span><span style="color: #008080;">6</span> <span style="color: #000000;">        TRACE0(</span><span style="color: #000000;">"</span><span style="color: #000000;">Failed to create toolbar\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br></span><span style="color: #008080;">7</span> <span style="color: #000000;">        </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> </span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;">;      </span><span style="color: #008000;">//</span><span style="color: #008000;"> fail to create</span><span style="color: #008000;"><br></span><span style="color: #008080;">8</span> <span style="color: #008000;"></span><span style="color: #000000;">    }<br></span><span style="color: #008080;">9</span> <span style="color: #000000;">    m_mybar.SetWindowText(_T(</span><span style="color: #000000;">"</span><span style="color: #000000;">abc</span><span style="color: #000000;">"</span><span style="color: #000000;">));</span></div> 最后的SetWindowText()讄工具栏的名称?br>CMFCToolBar有LoadBitmap的方法,但是试发现Q用LoadToolBar只加载工h资源Q再用LoadBitmap加蝲BMP资源Q虽然返回值是TRUEQ但昄图标为空白,没有实际效果?br><br> <ul> <li>工具栏停?/li> </ul> <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">1   //</span><span style="color: #008000;"> TODO: Delete these five lines if you don't want the toolbar and menubar to be dockable</span><span style="color: #008000;"><br></span><span style="color: #008080;">2</span><span style="color: #000000;">   m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);<br></span><span style="color: #008080;">3</span><span style="color: #000000;">   m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);<br></span><span style="color: #008080;">4</span><span style="color: #000000;">   <span style="color: red;">m_mybar.EnableDocking(CBRS_ALIGN_ANY);</span><br></span><span style="color: #008080;">5</span><span style="color: #000000;">   EnableDocking(CBRS_ALIGN_ANY);<br></span><span style="color: #008080;">6</span><span style="color: #000000;">   DockPane(</span><span style="color: #000000;">&</span><span style="color: #000000;">m_wndMenuBar);<br></span><span style="color: #008080;">7</span><span style="color: #000000;">   DockPane(</span><span style="color: #000000;">&</span><span style="color: #000000;">m_wndToolBar);<br></span><span style="color: #008080;">8</span><span style="color: #000000;">   <span style="color: red;">DockPane(</span></span><span style="color: red;">&m_mybar);</span></div> 与默认工h无异?br><br> <ul> <li>用户自定义图?/li> </ul> CMFCToolBar可以让用戯定义工具栏图标,使用静态成员函数SetUserImages()一个CMFCToolBarImages对象讄q去Q由所有CMFCToolBar对象׃n。Wizard自动生成代码中有q样的例子:<br> <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;"> 1</span>     <span style="color: #0000ff;">if</span><span style="color: #000000;"> (CMFCToolBar::GetUserImages() </span><span style="color: #000000;">==</span><span style="color: #000000;"> NULL)<br></span><span style="color: #008080;"> 2</span> <span style="color: #000000;">    {<br></span><span style="color: #008080;"> 3</span> <span style="color: #000000;">        </span><span style="color: #008000;">//</span><span style="color: #008000;"> load user-defined toolbar images</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 4</span> <span style="color: #008000;"></span><span style="color: #000000;">        </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (m_UserImages.Load(_T(</span><span style="color: #000000;">"</span><span style="color: #000000;">.\\UserImages.bmp</span><span style="color: #000000;">"</span><span style="color: #000000;">)))<br></span><span style="color: #008080;"> 5</span> <span style="color: #000000;">        {<br></span><span style="color: #008080;"> 6</span> <span style="color: #000000;">            m_UserImages.SetImageSize(CSize(</span><span style="color: #000000;">16</span><span style="color: #000000;">, </span><span style="color: #000000;">16</span><span style="color: #000000;">), FALSE);<br></span><span style="color: #008080;"> 7</span> <span style="color: #000000;">            CMFCToolBar::SetSizes(CSize(</span><span style="color: #000000;">16</span><span style="color: #000000;">,</span><span style="color: #000000;">16</span><span style="color: #000000;">), CSize(</span><span style="color: #000000;">16</span><span style="color: #000000;">,</span><span style="color: #000000;">16</span><span style="color: #000000;">));<br></span><span style="color: #008080;"> 8</span> <span style="color: #000000;">            CMFCToolBar::SetUserImages(</span><span style="color: #000000;">&</span><span style="color: #000000;">m_UserImages);<br></span><span style="color: #008080;"> 9</span> <span style="color: #000000;">        }<br></span><span style="color: #008080;">10</span> <span style="color: #000000;">    }</span></div> q个例子加蝲了工E\径下的一个BMPQ其他方法可以查看MSDNQ与CImageList有点点类伹{?br>使用CMFCToolBar::ReplaceButton()可以替换已有的工h按钮Q以下是我的Demo中的代码Q?br> <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">1</span>     <span style="color: #000000;">m_mybar.ReplaceButton( ID_QTLOGO, CMFCToolBarButton(ID_QTLOGO, </span><span style="color: #000000;">0</span><span style="color: #000000;">, _T(</span><span style="color: #000000;">"</span><span style="color: #000000;">123</span><span style="color: #000000;">"</span><span style="color: #000000;">), TRUE) );</span></div> W一个参数ID_QTLOGO定义工具栏上的一个按钮,后面是一?span style="color: #000000;">CMFCToolBarButton的(f)时对象?/span><span style="color: #000000;">CMFCToolBarButton构造函数第一个参Cؓ替换</span>后的IDQ第三个参数为名UͼW二个参Cؓ图标的烦?zero-based)Q第四个参数为m_bUserButtonQ指明第二个参数是烦引工h已加载图?LoadToolBar或LoadBitmap)q是用户自定义图标(SetuserImagesQ,TRUE指用戯定义图标。这里的l果是将ID_QTLOGO上的图标替换?span style="color: #000000;">UserImages.bmp</span>上的W一个图标?br><br><span style="color: #000000;">GetCmdMgr()</span><span style="color: #000000;">-></span><span style="color: #000000;">GetCmdImage()</span>可以Ҏ(gu)工具栏上图标的ID获取出已加蝲图标的烦引|<br> <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;">1</span>     <span style="color: #000000;">m_mybar.ReplaceButton( ID_QTLOGO, CMFCToolBarButton(ID_QTLOGO, GetCmdMgr()</span><span style="color: #000000;">-></span><span style="color: #000000;">GetCmdImage(ID_PLUS), _T(</span><span style="color: #000000;">"</span><span style="color: #000000;">123</span><span style="color: #000000;">"</span><span style="color: #000000;">)) );</span></div> q里工h上ID_QTLOGO的图标替换ؓID_PLUS按钮对应的图标?br><br>特别圎ͼ如果在你这些工hҎ(gu)改去但显C结果却没有改变的时候,你可以尝试删?<span style="color: red;">HKEY_CURRENT_USER\Software\Local AppWizard-Generated Applications\$(你的E序?</span> q个键|当你重启E序后工h应该会按你的预想变化的。这是我在查资料时看到的Q当时没注意但后来发现挺有用的,出处没有记录下来?br><br>最后,ReplaceButtonq可以将按钮替换为其他控件?br><br> <ul> <li>其他...</li> </ul> 我在自定义工h上做了一个有效响应,里面使用静态成员函数CMFCToolBar::ResetAllImages()所有图标都清空了,此时会发现默认工h、自定义工具栏的图标都ؓI?br> <div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;"> 1</span> <span style="color: #0000ff;">void</span><span style="color: #000000;"> CMainFrame::OnQtLogo()<br></span><span style="color: #008080;"> 2</span> <span style="color: #000000;">{<br></span><span style="color: #008080;"> 3</span> <span style="color: #000000;">    CMFCToolBar::ResetAllImages();<br></span><span style="color: #008080;"> 4</span> <span style="color: #000000;"><br></span><span style="color: #008080;"> 5</span> <span style="color: #000000;">    </span><span style="color: #008000;">//</span><span style="color: #008000;">CMFCToolBar::AddToolBarForImageCollection(IDR_MENU_IMAGES, theApp.m_bHiColorIcons ? IDB_MENU_IMAGES_24 : 0);</span><span style="color: #008000;"><br></span><span style="color: #008080;"> 6</span> <span style="color: #008000;"></span><span style="color: #000000;"><br></span><span style="color: #008080;"> 7</span> <span style="color: #000000;">    m_wndToolBar.LoadBitmap(IDB_BITMAP1);<br></span><span style="color: #008080;"> 8</span> <span style="color: #000000;">    m_mybar.LoadBitmap(IDR_MAINFRAME_256);<br></span><span style="color: #008080;"> 9</span> <span style="color: #000000;">    m_wndToolBar.RedrawWindow();<br></span><span style="color: #008080;">10</span> <span style="color: #000000;">    m_mybar.RedrawWindow();<br></span><span style="color: #008080;">11</span> <span style="color: #000000;">}</span></div> 更奇妙的是,后面我对两个工具栏重新加载了BMPQ而且加蝲的BMP资源是反了的Q此旉认工h上出C原来自定义工h?个图标,余下部分及自定义工具栏则为原来默认工h图标。可以想象,RestAllImages只是图标资源都释放了,工具栏资源依然健在,重新加蝲BMP的时候,工具栏图标就像一个个序排好的空_加蝲q来的BMP图标会出C前往后补位的现象?br>注意代码中,默认工具栏图标重新加载时使用的资源是IDR_MAINFRAME_256Q是默认的工h资源。也是_q里用LoadBitmap加蝲工具栏资源也是有效果的。这样应该可以说明工h在创建时LoadToolBar、LoadBitmap分别成功地加载了工具栏、BMP资源Q实际上是加载了两套图标资源Q这两者是序而非重合的,所以只昄原来的工h资源。要x定两者的重合关系Q只有在LoadToolBar的时候同时传入工h资源及BMP资源的ID?br><br><a href="http://www.shnenglu.com/Files/neverwinter/testtree.rar">Demo下蝲</a><br><br>———————————————————————————————————————————————————————————————?br>好吧Q终于写完了Q写得很仓促Q不的地方也很多,Ƣ迎指教Q?br> <img src ="http://www.shnenglu.com/neverwinter/aggbug/115984.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/neverwinter/" target="_blank">nelson</a> 2010-05-20 23:53 <a href="http://www.shnenglu.com/neverwinter/archive/2010/05/20/115984.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最q几天被MFC折腾~http://www.shnenglu.com/neverwinter/archive/2010/05/19/115853.htmlnelsonnelsonWed, 19 May 2010 15:22:00 GMThttp://www.shnenglu.com/neverwinter/archive/2010/05/19/115853.htmlhttp://www.shnenglu.com/neverwinter/comments/115853.htmlhttp://www.shnenglu.com/neverwinter/archive/2010/05/19/115853.html#Feedback16http://www.shnenglu.com/neverwinter/comments/commentRss/115853.htmlhttp://www.shnenglu.com/neverwinter/services/trackbacks/115853.html
在进行设备树Q也是一个CTreeCtrl控gQ更C改的时候,遇到了一个比较bug的问题?br>
Z提供更好的用户体验,甲方希望讑֤树更C后滚动条位置能够保持与更新前一致。设备树的更新过E是q样的:更新消息来自Rimi的通知机制Q类g函数回调Q客L在收到消息之后调用Rimi的对象方法来获取新的讑֤树信息,然后更新树。乍看之下,要完成这个修改好像很单,只要更新前先记录滚动条的滚动位置Q更新后q原位置Q如果更新后滚动条滚动范围变化了q要微调一下位|,逻辑上来讲就q么几个步骤?br>
我一开始也是按照这L思\QGetScrollPos()获取当前滚动条的滚动位置Q然后更新树Q先删除所有节点再逐个dQ其他省?..Q,GetScrollRange()获得新的滚动范围Q最后SetScrollPos()旧的位|与滚动范围最大g最的一个设回去Q这里用到的ScrollBar是CTreeCtrl自动产生的,注意不是两个控gQ这里调用的函数都是CTreeCtrl的方法)。但实际效果是,树更新后滚动条滚到准的位置Q但树的视图C最Ӟ点击一下滚动条的那个方块才能回C前的位置。也是_滚动位置的更C树的视图分离了?br>
之后Q我一直以为是我控件的Ҏ(gu)用错了,对着MSDN和CSDNU结了很久。最后忍无可忍,自己写了个测试DemoQ里面就一DialogQ一CTreeCTrlQ树上随便加了些东西Q然后又一按键Q按键后会重新刷新树Q再滚动到原来的位置Q结果居然是对的Q视图跟着滚动条的位置变化了。ؓ了更好的模拟讑֤树节点增删的效果Q我在按键响应上又作了处理,按一下重h的时候会隐藏几个节点Q再按一下这些节Ҏ(gu)C出来,滚动位置按照客户端里面的一个处理方法,l果居然也是正确的。问题变得玄乎了Q?br>
无意间发现客L里面有个手动h讑֤树的快捷键,估计是当qpb做调试的时候留下来的。快捷键的响应直接调用更新树的函敎ͼ重刷后的昄Zh意料地是对的。比较一下两U更新方式的q程Q?br>
RimiQ?nbsp;  通知到来?gt;更新树(Rimi回调函数QRimi自己l护了一个线E池Q远E调用在被调用端的发赯都是Rimi自己的线E)
快捷键: 按键响应?gt;更新树(MFC消息处理函数Q?br>
更新树所用到的是同一个函敎ͼ但调用者却是不同的。因为Rimi用了boost::functionQ那我也在按键响应的时候对要调的函数用function来包装一下,造成两者在调用栈上调用的函数、顺序大部分是一致的Q只有最底层不同Q一Ҏ(gu)RimiQ一Ҏ(gu)MFC消息传递?br>
后来jianhao_以前在Rimi的回调函数里面调Rimi对象的方法出q问题,然后我又道回忆起之前zxb在Rimi函数Q还是对象方法)里面调system()也有问题?br>
N说RimiU程是“万恶之源”Q好吧,我把更新代码Ud另外一个线E里面,Rimi回调的时候唤醒更新线E,更新后视图还是不能跟着滚动位置变;快捷键的响应也修改一下,自己不作更新Q也是唤醒更新线E,q个Ҏ(gu)也变得不灵了Q囧Q这可以说明问题跟RimiU程无关?br>
N说线E调用才?#8220;万恶之源”Q把之前做的那个Demo改了一把,U程做刷斎ͼ按键响应只唤醒更新线E,果然不灵了!上网google了一把,关键?#8220;mfc U程 操作控g”Q首先映入眼帘的是《MFC中跨U程操作控g会不会出现像C#中的异常问题?》。这时候我也不兛_q个帖子的内容了Q线E操作控件有异常是吧Q那׃用线E做咯!q时候我才回惌vWIN32里面有自定义消息q玩意,MFC里面l定一个消息IDQON_MESSAGEl定一个处理函敎ͼPostMessage或SendMessage来发消息Q然后由WIN32自己的消息@环来调用处理函数Q这样应该是可以保证用非RimiU程来更新设备树的。再一ơ把Demo改了一把,按键响应Post一个自定义消息Q消息处理函数做hQ结果是对的Q再改,按键响应唤醒U程Q线E里面Post自定义消息,l果也是对的?br>
原以为是控g使用问题Q又以ؓ是Rimi不兼定w题,最后实质ؓMFC跨线E用控件的问题。其实我也不清楚q是不是真正的问题,毕竟我MFC既不懂又用得。That's all!

最后附上我的测试代?br>http://www.shnenglu.com/Files/neverwinter/testtree.rar


nelson 2010-05-19 23:22 发表评论
]]>
对象自杀http://www.shnenglu.com/neverwinter/archive/2009/10/26/99521.htmlnelsonnelsonMon, 26 Oct 2009 13:29:00 GMThttp://www.shnenglu.com/neverwinter/archive/2009/10/26/99521.htmlhttp://www.shnenglu.com/neverwinter/comments/99521.htmlhttp://www.shnenglu.com/neverwinter/archive/2009/10/26/99521.html#Feedback0http://www.shnenglu.com/neverwinter/comments/commentRss/99521.htmlhttp://www.shnenglu.com/neverwinter/services/trackbacks/99521.html
W一个是自己设计的,对象持有定时器,自己l护生命周期?br>
W二个是无意中遇到的Q由于采用boost的线E库Q将成员函数变ؓU程用,最后在一堆调用之后居然把自己杀掉了?br>
很不q的是,在过E中都遇C相同的问题——堆栈挂掉了?br>
然后一轮定位,居然都是boost mutex的问题,scoped_lock很容易让人放松警惕?br>
void XXX()
{
    boost::recuisive_mutex::scoped_lock lk(m_mutex);

    

    YYYY();

    
}

void YYY()
{
    

    delete p;// 释放XXX所在对?br>
    
}

作ؓcL员的mutex没有被解锁,然后所在的cd被释放了Q这造成了堆栈挂掉?br>
对象自杀昄不是一U很好的风格Q还是尽量避免吧Q?br>


nelson 2009-10-26 21:29 发表评论
]]>
目之苦http://www.shnenglu.com/neverwinter/archive/2009/09/19/96706.htmlnelsonnelsonSat, 19 Sep 2009 04:54:00 GMThttp://www.shnenglu.com/neverwinter/archive/2009/09/19/96706.htmlhttp://www.shnenglu.com/neverwinter/comments/96706.htmlhttp://www.shnenglu.com/neverwinter/archive/2009/09/19/96706.html#Feedback1http://www.shnenglu.com/neverwinter/comments/commentRss/96706.htmlhttp://www.shnenglu.com/neverwinter/services/trackbacks/96706.html

nelson 2009-09-19 12:54 发表评论
]]>
fstream改写文ghttp://www.shnenglu.com/neverwinter/archive/2009/09/14/96125.htmlnelsonnelsonMon, 14 Sep 2009 06:40:00 GMThttp://www.shnenglu.com/neverwinter/archive/2009/09/14/96125.htmlhttp://www.shnenglu.com/neverwinter/comments/96125.htmlhttp://www.shnenglu.com/neverwinter/archive/2009/09/14/96125.html#Feedback0http://www.shnenglu.com/neverwinter/comments/commentRss/96125.htmlhttp://www.shnenglu.com/neverwinter/services/trackbacks/96125.html1.l一个一定大的I文件改写内容;
2.不能改变该空文g的大?br>
一开始是用ofstream做的Q但是每ơ一打开文gQ原来的I文件的大小改变了。之后用app方式打开Q但是每ơ的新数据都是追加到文gNQseekp无论如何不能到达实际文g的首部,q样文g大小变了,不符合需??br>
后来发现用fstreamQ采用in | out的方式来打开Q终于可以安全地改写文g了?br>


nelson 2009-09-14 14:40 发表评论
]]>
996þùƷ߹ۿ| ھƷþþþþþɬ| þþþƷþþþӰԺ| 뾫Ʒþһ| þ99Ƶ| þþ99Ʒһ| þþƷ| þþþƷһ| þþƷ޾Ʒ| þþƷAV| 99ƷþþƷһ| þþƷһӰԺ| ݹƷþþþþ| 99þùۺϾƷӰԺ | þþþùƷ| ھƷ˾þþӰԺ| þøݾƷԴվ| þþ| 91ƷѾþþþþþþ| þþƷAV㽶| þþùҺ| Ʒþþþþ| ۺϾþϵ| ŷպƷþþѹۿ| Ʒþþþû| þùƷһ| ޹˾Ʒþþùһ| 볬鱬Ļþ| ĻƷþþþþ3Dն| jizzjizzƷþ| ھƷþ| 777ҹƷþav| һŮȫƾþƬ| ɫۺϾþ| ɫۺϾþ۾Ʒ| ŷ777Ʒþþþ| þþƷֻоƷ2020 | þþƷһպ| պĻþ| ҹŷƷþþþþþ| ޾ƷþþþþĻ|