Profil för zengkun100一只特立独行的猪FotonBloggListor Verktyg Hjälp

Blogg


den 25 november

翻墙其实并没有那么难

Tor翻墙已经2个多月了,屡试不爽,不敢独享。Tor有现成的安装包可以用,安装包里包括一个firefox的扩展,一个单击操作就可以让firefox轻松翻墙。基本上所需要的操作就是给bridges@torproject.org写一封标题和正文都为“get bridges”的邮件,会收到3个bridge的地址。然后打开Vidalia的设置页面,在Network那一分类下,勾选上“My ISP blocks connections to the Tor network”,填上邮件里收到的3个bridge地址。


至此,大功告成!

通过firefox右下角的Tor按钮启用Tor,或者在IE的链接设置里将代理服务器的地址设置为127.0.0.1:8118,就又可以访问blogspot,twitter啦大笑



创建在客户区单击也可以移动的窗体

//最常见的方法

LRESULT CSpecialWnd::OnNcHitTest(CPoint point)
{
    LRESULT nHitTest = CWnd::OnNcHitTest(point);
    return nHitTest == HTCLIENT ? HTCAPTION : nHitTest;
}

//不太常见的方法

void CSpecialWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
    PostMessage(WM_NCLBUTTONDOWN, HTCAPTION, MAKELPARAM(point.x, point.y));
    CWnd::OnLButtonDown(nFlags, point);
}

//奇技淫巧

void CSpecialWnd::OnLButtonDown(UINT nFlags, CPoint point)
{
    SendMessage(WM_SYSCOMMAND, 0xF012, 0);
    CWnd::OnLButtonDown(nFlags, point);
}

den 10 november

Let’s Snap

还在瘟酒吧的时代,Winamp已经显示了snap这个feature是多么的牛逼:它的均衡器和播放列表可以自由移动,也可以很漂亮的贴在主播放器窗口上。后来开始用foobarWinamp很多年不用了。如今能够snap的应用程序依然不是很多,ImgBurn(我最喜欢的光盘刻录软件)就是其中一个。

实现snap的功能不需要太多的工作量,看完参考部分的3个链接足够了,但这几篇文章都没有讲如何实现snap在一起的窗口联动——可以snap的程序一般都有一个主窗口,移动主窗口的同时,snap到主窗口上来的窗口也会跟着一起移动,反之移动其它窗口主窗口却不会跟着一起移动。我的做法是创建一个隐藏的窗口,让它成为那些可以snap在一起的窗口的owner窗口,在这个隐藏的窗口里记录snap的相关状态信息。

/*在主窗口的OnEnterSizeMove函数里确定移动主窗口时是否需要移动其它窗口,

并记录下此时主窗口的屏幕坐标和已经snap上来的窗口的屏幕坐标。*/

void CMainDialog::OnEnterSizeMove()
{
    // TODO: Add your message handler code here and/or call default

    __super::OnEnterSizeMove();
    m_bMoveTogether = false;
    CHiddenMain* pWndMain = (CHiddenMain*)AfxGetMainWnd();
    if (pWndMain->m_bSnapped)
    {
        m_bMoveTogether = true;
        GetWindowRect(m_rcWndBeforeMove);
        m_pWndToSnap->GetWindowRect(m_rcSnapWndBeforeMove);
    }
}

/*如果主窗口已经snap到它的sibling窗口,那么主窗口的OnMoving函数里就不要进行snap操作*/

void CMainDialog::OnMoving(UINT fwSide, LPRECT pRect)
{
    // TODO: Add your message handler code here
    __super::OnMoving(fwSide, pRect);

    if (!m_bMoveTogether)
    {
        CHiddenMain* pWndMain = (CHiddenMain*)AfxGetMainWnd();
        pWndMain->m_bSnapped = SnapToSibling(pRect);
   }
}

/*最后在主窗口的OnMove函数里,相应的移动snap上来的其他窗口*/

void CMainDialog::OnMove(int x, int y)
{
    __super::OnMove(x, y);

    // TODO: Add your message handler code here
    if (m_bMoveTogether)
    {
        CRect rcWndAfterMove;
        GetWindowRect(rcWndAfterMove);

        int nOffsetX = rcWndAfterMove.left - m_rcWndBeforeMove.left;
        int nOffsetY = rcWndAfterMove.top - m_rcWndBeforeMove.top;

        CRect rcSnapWndAfterMove = m_rcSnapWndBeforeMove;
        rcSnapWndAfterMove.OffsetRect(nOffsetX, nOffsetY);
        m_pWndToSnap->MoveWindow(rcSnapWndAfterMove, FALSE);
    }
}

Reference:
Snapping Window
Make It Snappy
A little tool to show some system informations
den 9 november

给MFC对话框程序加上快捷键

MFC Team似乎不认为对话框程序应该用来处理复杂的任务,要不然也不至于添加个快捷键功能也要搞的这么tricky。

Step one:在对话框的OnInitDialog函数里加载快捷键资源

m_haccel = LoadAccelerators(theApp.m_hResDll, MAKEINTRESOURCE(IDR_MAIN_ACCELERATOR));

Step two:在对话框的PreTranslateMessage函数里翻译快捷键

BOOL CMyDialog::PreTranslateMessage(MSG* pMsg)
{
    // TODO: Add your specialized code here and/or call the base class

    if(pMsg->message==WM_KEYDOWN || pMsg->message==WM_SYSKEYDOWN)
    {
        if(TranslateAccelerator(m_hWnd, m_haccel, pMsg))
            return TRUE;
    }
    return __super::PreTranslateMessage(pMsg);
}

虽然对话框应用程序的输入焦点总是在某个子窗口上,但是对话框的PreTranslateMessage是能够截获到键盘消息的。因为在调用堆栈中,有个WalkPreTranslateTree(HWND hWndStop, MSG* pMsg)函数,对于接收到消息的窗口句柄,该函数一路向上调用它所有父窗口的PreTranslateMessage函数,直至某个父窗口的PreTranslateMessage函数返回TRUE或者该窗口是应用程序的主窗口。

Reference:

CodeProjectMSDN

den 6 november

书单

31I2jzhtFmL._AA500_51fnmr4Kd-L._AA500_41qHS8si8SL._AA500_51DxcwFZg L._AA500_41DbXK-JzbL._AA500_

最近新入了这五本书。

韬仔上次给我寄来的书里有一本胡晴舫的《旅人》——相当好的书,这次买了她的另一本书《办公室》。既然刚读了一本旅行文学的书,索性就又买了《旅行的艺术》,这本书在我的想读书目里已经存在很久了。杜拉斯的《情人》是另一本在想读列表里存在了很长时间的书,长期未读的原因是我一直以为这是一本大部头的著作,所以当我看到页码只有146页时就毫不犹豫地出手买入了。有人在我的苏州光影记录的回帖中提到了沈复的这本《浮生六记》,我才知道原来有这么一个叫沈复的人跟苏州有着很深的渊源。IT类的书里,最近很火的恐怕就是这本《我是一只IT小小鸟 》了,有很多牛人的Blog里都提到了它。

~~~~~~~~~~~~~~~~~~~~~~~~~~~一条得瑟的分割线~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

上周末又去了趟三里河的银杏林,还是拍不出满意的照片。没关系,明年我还去拍吐舌。因为银杏叶子那种黄色的温暖,我喜欢。

IMG_3782 IMG_3785 IMG_0145


den 3 november

How to deploy a VC++ program

方案一:使用Merge Modules

个人认为最难于使用的一种方案,它要求打包工具能够把Program Files\Common Files\Merge Modules目录下依赖的msm文件合并入最终的安装包里。

方案二:私有配置VC++的DLL

只需把VC的redist目录下用到的VC++组件拷贝到依赖它们的exe或者dll同级别目录下。使用范围最普遍的一种方案,唯一的不足之处大概在于在目标用户的机器上会存在多份VC++的DLL的拷贝。

方案三:在客户机上运行vcredist*.exe

最简单粗暴的方案。这种软件安装之前先运行vcredist*.exe然后再安装它自己。


den 25 oktober

旧地重游

乘着国庆回家的机会,去了趟武汉——这个毕业后就再不曾去过的城市。

和成都、西安这些内陆的二线城市一样,武汉也正在修建它的首条地铁。看到洪山广场工地的牌子上写着2012年竣工的字样时,突然觉得很好笑——2年多以前我还在读研究生的时候,开发商已经在用“临近地铁X号线”这样的标语来提升房价了。

曾经在武汉时,最喜欢做的事情是在司门口坐轮渡去江对岸的江汉路步行街。不用烦心堵车,而且风和日丽的时候坐船的感觉真的很好。我怀疑是在看过池莉的小说之后喜欢上这种交通方式的。


宽阔的长江跟武汉人爽朗的性格很搭

有阵子,小许就是我的圣母玛利亚,我只管把自己的苦水一桶又一桶的倒给她,丝毫没有考虑过她的感受。作为罗Der的室友,我目睹了他和小许的开始,十一又在武汉见证了他们领证的全过程。想到这一点,感到有一种莫名的幸福。

向美女靠拢

有两件事情会时不时的提醒一下你已经老了。一件是亲人的离去:某天你接到一个电话或者某次你回到家后,家人用平静的口吻对你说某某亲人最近去世了。那一刻除了感叹世事难料之外另一个想法恐怕就是要珍惜和亲人相处的每一天。另一件是身体的变化:以前在大学里献了血第二天是可以去踢球的,现在要是熬下夜第二天就会像发了毒瘾一样眼泪哈欠不止。这个曾经在球场上被冠以卡洛斯的男人如今已是有着小肚腩的有妇之夫。





虽然去司门口很多次,但是直到毕业时才去了武汉小吃的集散地——户部巷。记得那是个大热天,和一群陌生的食客在一个密不透风的大屋子里拼桌,吃的是什么已经完全不记得了。如今的户部巷又经过改造,已经不是我上次见到的样子了。

户部巷

武汉的小吃,我最爱的是豆皮,一定要吃金黄色泛着油光的那种,而且还得足够粘,不能夹起来就散掉。这次同学们给我推荐的是糊汤粉,味道果然不如豆皮。

糊汤粉

有件事情我一直搞不清楚,就是为什么美女们大都爱吃臭豆腐,而且似乎喜爱的程度跟漂亮的程度成正比。为了能跟ppmm套近乎我决定从此以后喜欢吃臭豆腐。更何况毛老人家曾说:“长沙臭豆腐闻起来臭吃起来香。”


买了一张凌晨2点多回家的火车票。轮渡都坐了,那干脆回趟学校看看吧,此行也算无憾了。叫了2个同学出来吃完烧烤,我提议一起回西区走走。还没到12点, 整个西区校园里竟然连一个学生都看不到!那些在54栋楼下耳鬓厮磨的人上哪去了?那些打游戏饿了翻出去吃烧烤的人哪去了?12点都不到校园里已经看不到人了,这TMD还算是大学吗?当我看到曾经住过的公寓走廊和大门已经被防护网封了个严严实实,我明白为什么人都不见了,那一刻我想起王小波的《黑铁时代》。


修缮一新的武昌火车站很漂亮很大气



最后记录下此行中关于武汉女人的2个片段。

一:在公交上给一个婆婆让了座位。后来婆婆身边的人下车了,老人家赶紧拿手占住这个空位子,然后叫我:“小伙子,快来,这里有位子!”

二:几年前我曾办过一个L签的港澳通行证,这次我执意要把这个作废掉换个G签的。办签证的阿姨一脸不情愿的表情说:“明明可以用撒,为什么要重新办个呢?浪费钱!”那口气似乎我浪费的是她的钱一样。

就在此时,我想起来另一个印象深刻的关于武汉女人片段:话说有天早晨载我们这群学生去公司实习的大巴车kiss了一个小电动,我们的司机当然要停车下车了,只见小电动后座上的武汉妻子抄起地上的一块板砖就过去了……
den 18 oktober

快速查找System Error Code含义的办法

一直以来,我查找Windows API返回的错误代码含义的方式是这样的:在msdn中查找GetLastError函数,转至该函数的页面-->此页面上有个System Error Codes的链接,跳转至该链接-->根据错误代码的值,从众多的range里找到一个-->用Ctrl+F查找。

繁琐

一站式的解决方案是在vs的watch窗口里输入错误代码值后加上",hr",比如“5,hr”,将会显示Access is denied。微笑
den 13 oktober

[转]List Of Windows Messages

What is the window message numbered x? Look at this page.
den 24 september

此SetCursor非彼SetCursor

调用CStatic::SetCursor来改变一个CStatic控件的鼠标样式——未果。折腾了半个小时才知道CStatic有一种SS_ICON风格,专门用来显示鼠标和图标,CStatic::SetCursor就是用来设置绘制在CStatic控件里的鼠标的图形的。

正确的做法是添加WM_SETCURSOR消息响应函数,在函数内调用Windows API SetCursor来设置鼠标。

这再次说明给变量和函数取个有意义的名字是多么的重要。

den 20 september

[转]——The Elements of Programming Style


作者之一,P.J.Plauger,用过STL的地球人都知道。
1. Write clearly don't be too clever.
2. Say what you mean, simply and directly.
3. Use library functions whenever feasible.
4. Avoid too many temporary variables.
5. Write clearly  don't sacrifice clarity for efficiency."
6. Let the machine do the dirty work.
7. Replace repetitive expressions by calls to common functions.
8. Parenthesize to avoid ambiguity.
9. Choose variable names that won't be confused.
10. Avoid unnecessary branches.
11. If a logical expression is hard to understand, try transforming it.
12. Choose a data representation that makes the program simple.
13. Write First in easy-to-understand pseudo language; then translate into whatever language you have to use.
14. Modularize. Use procedures and functions.
15. Avoid gotos completely if you can keep the program readable.
16. Don't patch bad code  rewrite it.
17. Write and test a big program in small pieces.
18. Use recursive procedures for recursively-defined data structures.
19. Test input for plausibility and validity.
20. Make sure input doesn't violate the limits of the program.
21. Terminate input by end-of-file marker, not by count.
22. Identify bad input; recover if possible.
23. Make input easy to prepare and output self-explanatory.
24. Use uniform input formats.
25. Make input easy to proofread.
26. Use self-identifying input. Allow defaults. Echo both on output.
27. Make sure all variable are initialized before use.
28. Don't stop at one bug.
29. Use debugging compilers.
30. watch out for off-by-one errors.
31. Take care to branch the right way on equality.
32. Be careful if a loop exits to the same place from the middle and the bottom.
33. Make sure your code does "nothing" gracefully.
34. Test programs at their boundary values.
35. Check some answers by hand.
36. 10.0 times 0.1 is hardly ever 1.0.
37. 7/8 is zero while 7.0/8.0 is not zero.
38. Don't compare floating point numbers solely for equality.
39. Make it right before you make it faster.
40. Make it fail-safe before you make it faster.
41. Make it clear before you make it faster.
42. Don't sacrifice clarity for small gains in "efficiency."
43. Let your compiler do the simple optimizations.
44. Don't strain to re-use code; reorganize instead.
45. Make sure special cases are truly special.
46. Keep it simple to make it faster.
47. Don't diddle code to make it faster —— find a better algorithm.
48. Instrument your programs. Measure before making efficiency" changes.
49. Make sure comments and code agree.
50. Don't just echo the code with comments —— make every comment count.
51. Don't comment bad code —— rewrite it.
52. Use variable names that mean something.
53. Use statement labels that mean something.
54. Format a program to help the reader understand it.
55. Document your data layouts.
56. Don't over-comment.

den 13 september

auto_ptr_ref,I服了YOU!

最近用std::auto_ptr较多(别问我为什么不用boost::shared_ptr),发现该类还有个辅助类型:auto_ptr_ref。今天下午本打算研究下这个类的,结果2个小时过去了,只知道auto_ptr_ref的作用有二:阻止对const auto_ptr的拷贝;允许从函数里返回一个auto_ptr。实现细节还是没搞明白,auto_ptr_refI服了YOU!

const std::auto_ptr<int> p(new int);        // safe auto_ptr
*p = 42;                                                     // OK, change value to which p refers

以上const auto_ptr的使用,第一眼看上去好像不对头,但细想一下,此const表明auto_ptr内部的指针指向的地址是const的,而不是说该地址的值。

看到有文章说Hurb Sutter这样的大仙说他自己也不太懂,我很欣慰大笑

Reference:
http://www.josuttis.com/libbook/auto_ptr.html


OnCreate PreCreateWindow PreSubclassWindow

PreCreateWindow和PreSubclassWindow是虚函数,而OnCreate是一个消息响应函数。

对比对话框的2种创建方式下,这3个函数的是否调用的状态:

                               OnCreate PreCreateWindow PreSubclassWindow
CDialog::Create
CDialog::DoModal

对比控件的2种创建方式下,这3个函数的是否调用的状态:

                                    OnCreate PreCreateWindow PreSubclassWindow
通过CWnd派生类的Create函数
通过对话框模版创建

 

      由此可以看出:PreSubclassWindow是一个最靠谱的函数,在任何情况下都会得到调用。PreSubclassWindow是一个CWnd类的对象在Attach到一个Windows窗口句柄(也称为子类化,或者Subclass)后所调用的第一个函数。这是个虚函数,一般从MFC的控件类派生出来的子类都会重载这个函数,在内部调用ModifyStyle函数来修改窗口的风格。特别的,如果使用对话框模版来创建窗体的话,一般情况下,对话框上的控件是用动态数据交换的方式来创建的(CDialog::OnInitDialog会调用DoDataExchange函数,继而调用DDX_Control来Subclass控件),此时PreSubclassWindow是在运行时修改控件风格的最佳地方。

      PreCreateWindow,顾名思义是在创建窗口之前所调用的函数。通过修改传递给这个函数的类型为CREATESTRUCT的参数,派生类可以修改窗口的风格。但是上面的2个表格说明这个函数得到调用的机会其实只有一个:通过CWnd派生类的Create函数创建窗体的时候。特别的,对话框类的PreCreateWindow永远都不会被调用。

      作为一个虚函数,ClassWizard在添加这个函数的时候,会加上对基类函数调用的代码。通常这个代码只是调用下CWnd::PreCreateWindow函数,而这个函数只是用来确保窗口的类名不为NULL,因此对基类函数的调用可以酌情省略。

      OnCreate是在窗口创建出来之后对WM_CREATE消息进行响应的函数。不过很不幸的是,通过对话框模版创建出来的控件,它们的OnCreate函数根本不会被调用。

      总结:对话框类一般会添加OnCreate消息处理函数,用于在窗口创建之后做一些工作,比如创建Timer什么的;控件类一般会重载PreSubclassWindow函数来修改控件的风格,比如设置为OWNERDRAW。

      See Also

      Using PreSubclassWindow

      CWnd中PreCreateWindow、PreSubclassWindow、SubclassWindow的区别

      Create your own controls - the art of subclassing

      C++ Q&A March 2002


den 7 september

周末·上海

  从来没有想过生平第一次去上海居然会是这样一种方式:一个双休日的时间在京沪间飞了一个来回。
  第一次到上海,感觉对比还是蛮明显的:北京正在忙着给他妈过生日,上海则到处一派世博会的气息;北京正直初秋的阴雨天气,上海的夏天似乎还远没有结束;北京到处可见双向8车道的路,上海的路则像上海男人的心思一样细……
  抱着很大的期望把第一站选在田子坊,结果感觉它不过是南锣鼓巷的上海版本;新天地本不该白天去的但是时间不多只好将就了,也没什么感觉;直到在淮海路吃到那个号称“可能是上海最好吃的蛋挞”之后,才感觉有点上海了——因为实在是太甜了。


  晚上去黄浦江边散步,白天的炎热被江风一扫而空,只有清爽。站着的这一边,是代表上海现在的浦东,江的对岸,则是代表上海历史的外滩,我想站在外白渡桥上看陆家嘴的夜景该又是另外一种感觉吧。离开滨江大道,前往寿宁路腐败香吧岛小龙虾。我消灭了4斤,某人可是5斤哦保守秘密我嫌这里做的不够辣,每多点一盆就得叮嘱服务员再做辣一点,吃完后发现盆底的辣椒果真是要比上一盆的更多一些大笑不过由于没有放花椒,所以只辣不麻,缺了一份味道。


   以前在武汉读书的时候听说中国的城市里名字被冠以“大”字的有两个:一个是上海,另一个是武汉。参观过上海城市规划展示馆后我认为在上海面前武汉根本没有资格称大。馆内360度的虚拟环幕展厅超炫的,十几分钟的时间带你从虹桥机场到浦东机场立体的感受一回大上海,郁闷的是参观这个厅的外国人似乎要多过中国人。


  上海市博物馆里的东西还挺多的,让我觉得有趣的是博物馆的大门正对着上海市政府的办公大楼。最近一次体检发现颈椎很有问题,所以在这些瓷枕青铜枕前多停留了一会。据说古人用这些枕头来消夏,不知道对治疗颈椎病有无帮助吐舌。在瓷器馆里见到温馨的一家老外:妈妈在一旁安静的看着展览,爸爸坐在地上,两个女儿趴在爸爸的腿上听他那些瓷器的历史。

  
  BTW:时隔3个多月在吴江路又喝到了85度的奶茶玛琪朵微笑

den 1 september

周末·(恋爱的犀牛&&应亮影展)


   听说《恋爱的犀牛》这部话剧已经有好几年了,但一直没有机会去看,因为韬仔说还是找个女生一起去看吧。这是我看过的为数不多的话剧里舞台布景最复杂、人物对白最书面的一部,剧本似乎也是最简单的一部:就是她爱他他不爱她,他爱她她不爱他的故事。
  正如编剧廖一梅所说的:“我希望看过戏的观众,能感到他的生命中有一些东西是值得坚持的,可以坚持的。至于爱情的结局不是这个戏里所关心的”。甚至我都觉得导演根本就是在用一份完全不值得坚持的爱情来反衬坚持本身的可贵——尤其是当所有的人都认为你的坚持很愚蠢的时候。就好像马路说:“顺从命运真的那么难吗?我看大多数人自然而然就这么做了,只要人家干什么,你也干什么就行。”
  随波逐流大家都会,可这个世界得要有点坚持,甚至是偏执才会好玩,才有希望。另外就是看过这部话剧后我发现自己对话剧这种艺术形式几乎没什么兴趣了,可能是因为自己对话剧还是懂得太少吧! 还是更喜欢电影一些。



  周日,工体东路,参观了一个叫应亮的独立电影导演的影展。其实我是冲着影展的嘉宾——焦雄屏去的,早先翻过她翻译的一本很棒的书《认识电影》。这次收获还蛮多的,了解到了中国独立电影的现状以及嘉宾们对当前国际电影节的一些看法。
  应亮的拍片经历挺有趣的——这些年他一直在四川自贡拍摄他的独立电影,制作班底也一直是同一拨人,这简直不能不让人联想到贾樟柯。跟张导冯导们动辄过亿的 票房相比,应亮最“卖座”的长篇《背鸭子的男孩》也不过卖了2万多块钱!然而他似乎并不在乎钱。为了拍摄自己满意的作品,他拒绝跟“不合格”的国内商业制作班底合作,拒绝不尊重他的作品的发行商,一直用一些很底端的设备进行创作。看起来似乎是在玩票,不过稍微懂得些电影的人都能看出来:在《背鸭子的男孩》 里,男孩从公安局放出来之后的那个桥段分镜头的处理是多么的好。
  应亮——一个有意思的人。



den 25 augusti

DEFINE_GUID

用DEFINE_GUID宏来定义一个GUID很方便的,因为guidgen.exe能直接生成DEFINE_GUID宏需要的格式,但是这个宏实际用起来很容易产生连接错误。规避的办法:

  • 用DEFINE_GUID宏定义所需的GUID,全都放在比如myguid.h文件里;
  • 定义main函数的cpp文件里,按以下顺序include

#include <InitGuid.h>

#include “myguid.h”

  • 任何需要这些GUID的cpp文件里只需要#include “myguid.h”就可以了


den 17 augusti

周末·三联书店

   我这个人做事一向好迟到。上课迟到、上班迟到、看电影迟到、就连乘飞机也会迟到。所以能提前十五分钟赶到《单向街》杂志书首发沙龙,对我来说相当相当的不容易了。然而即便如此,还是已经人满为患,掩面泪奔……
   然后我去附近的三联书店泡了一个下午。
   在网络书店大兴其道的今天,实体书店存在的意义,或许它们只剩下虚拟的网络书店永远也给不了的读书氛围。周末的三联书店人并不多,没有中关村的几个大书市的吵闹。楼梯的两侧坐着看书的男女老少,走过去的时候这些人连头都不会抬一下。偶尔能听到笑声,看过去,是一个坐在地上看漫画书的小孩……
   今天新入了3本书:《C++编程规范》《我执》《把时间当作朋友》

C  编程规范  我执 把时间当作朋友

   读书好,有这些好书还有好电影陪着,黑暗的3年居然也就这么过来了,看来人生真是没有过不去的坎。

P.S. 最近比较烦!



den 10 augusti

沉默的大多数

开始他们抓共产党员,
我没说话,因为我不是共产党员。

后来他们来抓犹太人,
我没说话,因为我不是犹太人。

后来他们抓工会会员,
我没说话,因为我不是工会会员。

他们又来抓天主教徒,
我没说话,因为我是新教徒。

最后他们冲我来了,
已经没有人可以替我说话了。
den 2 augusti

CSliderCtrl Class

一个看起来不那么明显的事实是:
    CSliderCtrl sc;
    sc.SetRange(1, 100);
    sc.SetPos(0);
    ASSERT(sc.GetPos() == 1);

See Also

About Trackbar Controls
CSliderCtrlEx - A slider with background colors to indicate ranges

神奇的天涯,万能的Google

   微软在上周中发布了一个针对Visual Studio的安全升级包。自动更新之后,一夜之间我的vs2008工程就无法编译了——编译错误出现在STL库里的一个叫做xutility的文件。直觉告诉我肯定是这个升级包在捣鬼。
   第一反应是去Google一下编译错误信息,只能搜到3条结果,最上面的结果来自social.msdn.microsoft.com,我知道这里有我想要的答案。现在问题已经解决,关于问题的讨论还在继续。
   有一次跟同事去家乐福买完盆栽后,同事问服务员盆栽该怎么养,我说你回去Google一下不就ok了么,比她讲的要详细的多。
   不管是工作还是生活,都已经离不开搜索引擎了。微笑


   今天看到官方的Support了。