2009-12-30

Adobe Acorbat, Adobe Reader

先装了Reader 9.0,后来又装了Acrobat 8.0。
结果,在Firefox打开pdf文件,总提示:
THe Adobe Acrobat/Reader that is running can not be used to view PDF files in a Web Browser.
Please exit Acrobat/Reader and exit your Web Browser and try again.

按照网上的很多方法,比如把Reader的Internet选项的"在浏览器中显示PDF"关掉,还是不行。
后来把Reader的nppdf32.dll拷贝到C:\Program Files\Mozilla Firefox\plugins。这样OK!

2009-12-21

联想家悦电脑BIOS升级

联想官方网站竟然找不到相关技术支持。
相比之下,Realtek这类公司的驱动更新找起来就容易很多,而NVIDIA就做得更好了:可以自动检测机器的显卡等设备型号,检查有无更新。

根据主板型号搜索了一下,QDI网站有个BIOS升级文件。
升级了以后,可以启动,BIOS设置选项也多了很多,但是,有几个USB不能用了,并且,更大的问题是,风扇狂转。
幸亏升级之前备份了旧BIOS文件,赶紧恢复。
问题解决了,USB都可以用了,风扇也不狂转了――但风扇声音被升级之前还是大了不少。


控制面板中有空白图标(Empty icon in control panel)

在%systemroot%(%windir%也行,关于%systemroot%和%windir%的区别请看http://www.msfn.org/board/windir-vs-systemroot-t52891.html)下查找.cpl文件,删除多余的.cpl即可。
原因:有的程序被删除以后,注册表的信息也删除了,但可能相应的.cpl仍然保留了,导致在控制面板中有空白图标(因为无法获取注册表信息,或者无法获取安装后文件信息,所以不能显示和执行)。

2009-12-17

(zz)八角和茴香不是同一种东西

http://qjwb.zjol.com.cn/html/2009-12/16/content_194982.htm?div=-1

  本报记者 方云凤  

  本报推出的“寻找冬日最诱人的美味”系列报道,引起了不少马大嫂们的浓厚兴趣。她们中不少人照着报纸上介绍的做法,一五一十地动起了手。也有一些马大嫂很认真,遇到不明白的地方,不忘记给我们打个电话来问问。

  杭州的汪女士就是其中的一位。12月8日A10版,本报刊登的《酱鲫鱼要带点辣,麻麻的也行》一文中讲到,酱鲫鱼时要“先把桂皮、茴香、八角、豆果这些材料放进油锅煸一下,”她不明白了:茴香和八角应当是同一种东西,只是叫法不同而已呀。

  虫虫特攻队随即询问了身边几位荣升为马大嫂的同事。她们中还真有不少人搞不懂这二者之间有什么区别呢。

  于是乎,只好查一查辞典了。

  据虫虫特攻队了解,严格来说,八角和茴香其实并不是同一种东西。

  茴香分为大茴香和小茴香两种。八角也叫大茴香,又称为大料,呈红褐色,一般有8个角,并且每个角中有一个光滑的种子,所以叫八角。

  小茴香只是一种小小的灰色菜籽,有点像稻谷的样子,但小茴香的香气浓郁倒不输于大茴香,它的茎叶部分也具有香气,一般在炖菜时使用,可以提高鲜味,也常被用作包子、饺子等食品的馅料。

  大茴香和小茴香都是常用的调料,是烧鱼炖肉、制作卤制食品时的必用之品。因它们能除去肉腥味,使之重新添香,故曰“茴香”。一般我们说的茴香指的就是小茴香。

  这下,我想各位也弄明白了二者的区别了吧?下回,包茴香馅饺子时,别把八角包进去了哟!

……

Windows的虚拟内存

看了有必要把虚拟内存设置到ramdisk么? 这个帖子,很有同感。
我的内存虽然不多,1G,有阵子禁用虚拟内存,可是偶尔会遇到内存不足的错误。
最后,还是打开虚拟内存。

ClearType(字体平滑)

今天把视觉效果调整了一下,发现字体平滑不工作了。
桌面 属性 - 外观 - 效果 - 使用下列方式使屏幕字体的边缘平滑 已经选了 "清晰"。
后来发现: 我的电脑 属性 - 高级 - 性能 - 设置 - 视觉效果 ,要把 平滑屏幕字体边缘 也选上。

2009-12-14

MFC动态生成子菜单

//假设要在pMenu上添加一级子菜单,菜单内容在数组aAllName中,bCheckStyle决定是否为勾选性质的子菜单
    pMenu->CreatePopupMenu();
    for(int i = 0; i < aAllName.GetSize(); i++)
    {
        pMenu->AppendMenu(bCheckStyle ? (((aAllName[i].CompareNoCase(strActive) == 0) ? MF_CHECKED : MF_UNCHECKED) | MF_POPUP) : MF_POPUP, uiIDParentMenu + i, aAllDesc[i]);
    }
//......

//点击某个子菜单响应,如果是bCheckStyle则调整当前的选择项
        if(bCheckStyle)
        {
            for(i = 0; i < pMenu->GetMenuItemCount(); i++)
            {
                //pMenu->CheckMenuItem(i, ((i == iIndex) ? MF_CHECKED : MF_UNCHECKED) | MF_BYPOSITION);
                //如果有 MF_SEPARATOR ,则 MF_BYPOSITION 不对
                pMenu->CheckMenuItem(i + uiIDParentMenu, ((i == iIndex) ? MF_CHECKED : MF_UNCHECKED) | MF_BYCOMMAND);
            }
        }
/*如上注释所示:如果子菜单创建时没有添加MF_SEPARATOR,即子菜单i的POSITION == ParentID + i,则MF_BYPOSITION可以;但是,如果有MF_SEPARATOR,则子菜单i的POSITION != ParentID + i,只能用MF_BYCOMMAND。类似的,EnableMenuItem也是一样:
        //m_mSubMenuRule.EnableMenuItem(i, MF_BYPOSITION | MF_ENABLED);
        m_mSubMenuRule.EnableMenuItem(i + IDM_SELECT_RULE, MF_BYCOMMAND | MF_ENABLED);
*/

USB启动盘

上次按照http://www.hiren.info/pages/bootcd-on-usb-disk的方法,做好了一个启动盘。
是的,是正宗的启动盘!不过,进入boot CD执行程序时,提示HBCD folder not found或HBCD folder can not be found。
似乎问题在于总要load一个CD driver――U盘内容是从光盘拷贝的。

于是寻找其他U盘启动工具。
FlashBoot,不免费,太小家子气。

用了USB Format(应该是HP的)。
格式化成了DOS启动盘(用了网上下载的Windows的BOOT file)。格式化后把其他文件也拷到U盘。
然后拷了个ghost,重启。

顺利启动,我的器件把U盘识别成USB-HDD(而原来用GRUB4DOS,识别出来的是USB-ZIP)。
运行ghost。启动是启动了,但是显示有问题。
看了AUTOEXEC.BAT,怀疑CALL MOUSE.BAT那句有问题。
删除MOUSE.BAT,重启,运行ghost,OK!(当然,鼠标是没有了。)
没有鼠标总归是不好的,于是怀疑是原来mouse.bat用的GMOUSE.COM有问题,替换成MOUSE.COM,重启,运行ghost。

"我终于看到所有梦想都开花……"



牛年牛词网络不完全大盘点(转)

http://www.guyizhou.cn/article/10176.htm

2009-12-12

TIME_KILL_SYNCHRONOUS

上次提到 TIME_KILL_SYNCHRONOUS 参数保证 timeKillEvent() 之后不会再进入定时器回调函数。
不过,我发现有新问题(现在还没有最终确认,很怀疑):使用 TIME_KILL_SYNCHRONOUS 之后,有时会导致 timeKillEvent() 不能正常返回,一直等待。
我现在的做法是:不使用参数,使用自定义变量 m_bTimerIsRunning 来保证在 timeKillEvent() 后不再执行相关操作(从理论上来讲,可能还是进入了那个函数的)。

2009-12-11

(zz)如编程语言是一只船

http://linux.chinaunix.net/bbs/viewthread.php?tid=1146018

如果一种编程语言是一只船,那么将会是什么情况?
Turing
Turing可以被定义为爱斯基摩独木舟(kayak,欢迎评论)。它足够小,由人来驱动。它通常被初学划船者使用,具有加拿大风格。

图片来源于 naokomc

Java
Java是一艘货船。 它非常庞大,并且非常适合于企业单位。尽管它载重量很大,可以是整个工程,但驾驶起来不是很令人愉快。

图片来源于 cfarivar

Perl
Perl 是一艘拖船。功能强大到大约80字符以内就可以牵引Java。

图片来源于 xeeliz

Ruby
很难来描述Ruby。 它造型优美,性感,并且驾驶起来令人非常愉悦。下面就是它的照片,非常流行。

图片来源于 Tony Falcon

PHP
PHP 是一只竹筏。尽管一批hack被string所掌控,但仍然漂泊于海上。

图片来源于  permanently scatterbrained

C
C语言就是一艘核潜艇。指导说明书可能是使用外文编写,但是可以优化所有硬件自生的性能。

图片来源于 Ryan C. McGinley

HTML
HTML 不是真正的编程语言,因此也不是一只真正的船。

图片来源于 ascendeddaniel

Live Spaces上不去了

我这是通过邮件发送的博客。
blogger早被GFW了,Live Spaces这几天上不了。
MSN是上得去,home.live.com也可以,就是spaces不行,并且MSN有些联系人的spaces也是可以的。
据中书判断,可能是跟我在同一个服务器上的某人干了坏事,城门失火殃及池鱼。

2009-12-10

赞foobar

之前就用过foobar对大量mp3文件的tag进行过统一修改,省时省力。
今天又使用了foobar的一些强大功能:通过Tagging菜单选择Manage Scripts,我把原来的title拷贝到comments中,并且自动添加了track number。
我期望的能自动实现的功能,foobar几乎都有了。

编译出现错误error C2039: 'GetWindowLongPtr' : is not a member of '`global namespace''

这是VC6编译中遇到的。
1,请安装SDK。VC6适用的最高版本SDK是February 2003。安装后请确认相应的目录已经在MSVC中添加。
2,如果已经安装SDK且设置了目录仍然出现问题,那么:
Take "Include directories" from tools / options menu and move the latest platform SDK include paths to top.
See http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/17e36619-8871-484a-aab4-2ea0e82a75f9/

2009-12-09

MFC程序的怪异问题(关键字:输入法,CEdit)

现象:某MFC对话框程序,用户每次用键盘对Edit控件进行输入时,硬盘灯总会相应的亮起。

经过Filemon(注意:现在官方只有Process Monitor下载了)定位,程序频繁访问了msctf.dll和msimtf.dll。
这两个是输入法相关的DLL。

于是做了测试:
在Edit中输入时,把中文输入法打开,那么,用户输入时,不会读写硬盘;如果关掉输入法,则会读写硬盘文件。

但是,总不能让用户只输入数字还要把输入法打开吧?
于是,程序启动时关闭输入法:
    HWND hWnd = GetDlgItem(IDC_EDIT_USER_RESULT)->m_hWnd;
    HIMC hIMC = ImmGetContext(hWnd);
    ImmAssociateContext(hWnd, NULL);
    ImmReleaseContext(hWnd, hIMC);
这样,用户无需操作。
测试了一下,不论是否打开中文输入法,均没有频繁读写文件现象。

vector的sum

用accumulate。
MSDN有例子:
...
// Sum the array
cout << "The sum of 1 + 1/2 + 1/3 + ... + 1/10 is " << accumulate(rgFA.begin(),rgFA.end(),0.0f) << endl;
...

设置Default button

缺省情况下,IDOK会是Default button。也就是说,如果按回车键,则相当于点击了IDOK按钮。

需要跟Focus区分。比如,当前焦点在哪个按钮上,那么按空格键,则相当于点击焦点所在的按钮。

如果需要动态修改Default button,参考如下代码
Q.  How do I set the default button in a dialog when using MFC?

A.  Usually its the "OK" button.
This function does the trick:
int CMyDialogClass::SetDefaultButton(const DWORD nNewId)
{
    DWORD nPrevId;

    nPrevId  = GetDefID();
    // Its not automatic - we have to remove the border from the old button
    SendDlgItemMessage(nPrevId, BM_SETSTYLE, BS_PUSHBUTTON, (LPARAM)TRUE);

    SetDefID(nNewId);
    // Likewise, add a border to the new one
    SendDlgItemMessage(nNewId, BM_SETSTYLE, BS_DEFPUSHBUTTON, (LPARAM)TRUE);

    return nPrevId;
}

2009-12-06

Windows下的定时器

请先阅读Timers Tutorial
补充说明:
使用Standard Win32 Timers,如果程序在GUI上消耗时间比较多,那么定时器会严重不准。比如,在我的程序中,如果用户一直按住键盘的某个键不放,那么定时器根本没有时间执行。
也就是因为这个原因,我才使用其他定时器。
先用Queue Timers,尽管我下载了PSDK,也#define _WIN32_WINNT 0x0500了,还是有问题。
所以,只得用Multimedia Timers
需要注意,为了避免timeKillEvent之后仍然触发定时器事件(很有可能:比如timeKillEvent之后,处理生效时间大于定时器周期,则会再次触发),timeSetEvent时需要加上TIME_KILL_SYNCHRONOUS。
MSDN的原文说:Creating an event with the TIME_KILL_SYNCHRONOUS and the TIME_CALLBACK_FUNCTION flag prevents the event from occurring after the timeKillEvent function is called.
不过,郁闷的是,TIME_KILL_SYNCHRONOUS在mmsystem.h中没有定义。Google了一下: #define TIME_KILL_SYNCHRONOUS 0x100 。(对吗?)

2009-12-02

设置Firefox地址栏搜索引擎

这里说的不是指搜索栏的搜索引擎,而是指在地址栏直接输入关键字自动搜索的搜索引擎。
我以前说过,Firefox从之后是Yahoo的搜索引擎了。
修改方法:about:config,将Keyword.URL设置成相应的值,比如http://www.google.com/search?hl=en&q=

2009-12-01

(zz)资源管理器里看不见地址栏

转自http://zhidao.baidu.com/question/43083153.html

说明:双击 我的电脑 正常,用<Win>+<E>打开 资源管理器,地址栏不见了。
解决方法:先右键点击 工具栏, 取消 锁定工具栏, 用鼠标指向工具最下端, 当鼠标变成双箭头时往下拖, 就会出现地址栏了。