MFC IME 资源泄露
iting 2005-03-23 10:53:43 MFC通过Hook置换WinProc。当建立一个MFC有用户界面的应用程序时,在建立主窗口前会建立输入法等窗口,对于第一个非输入法窗口,MFC会调用GlobalAddAtom(),在窗口释放时调用GlobalDeleteAtom() 。
对于中文系统,MFC判断窗口是否是输入法窗口时发生误判,故多调用一次GlobalAddAtom发生资源泄露和其他一系列问题。该问题被VC隐藏,表面上好像没有问题。如果验证此问题,让切换输入法到中文状态,然后在VC6中调试运行任何MFC程序,退出程序后可以看到线程返回值不为0 。
此问题代码位于wincore.cpp中。
只要在判断IME的地方改用GetClassName即可。因为输入法窗口的风格居然不是CS_IME 。
环境:Win2000 Adv Server,VC6,VC7,OfficeXP(输入法相关),均打了最新补丁。
据此,如果在不重新编译MFC库的情况下,如何解决该问题?比如修改输入法窗口的风格为CS_IME。
本贴1分以防浪费,若能提供好的方案并需要分,可以另开贴给分。