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);
这样,用户无需操作。
测试了一下,不论是否打开中文输入法,均没有频繁读写文件现象。

No comments: