问题出处:
已知:
1。为了做横竖屏切换,控件的布置都放在ONSIZE里面去做。
2。页面调用关系是SHOWPAGE HIDEPAGE 方式。
结果有两种情况:
1。内部调用:
子窗口在输入法切换的时候,引起父窗口重绘。
重绘的结果是:父窗口认为输入法面板弹起,所以ONSIZE里重新布置就出现空白了下面一个输入法面板的范围,这个范围显示的是父窗口的父窗口内容。
当你从当前窗口返回父窗口时,显示不正常。
2。外部调用:
当你当前窗口去掉系统的带输入的程序,比如调用系统发短信页面时,切换输入法,返回,也会出现窗口重绘问题。
总结:
1。输入法切换会发消息出来。
2。不同输入法发消息不同(内容不同,次数不同。典型: 全屏手写, 搜狗)。
问题解决办法:
响应WM_SETTINGCHANGE 消息. 这个消息是监控注册表是否改变。
输入法切换,屏幕横竖切换等都改变注册表。
但是他们之间是有区别的。
输入法切换:
先是判断你是否响应了WM_SETTINGCHANGE 消息,如果响应那么就跳过。如果没有就是发ONSIZE消息到窗口(具体发到哪些我也不清楚,我只知道貌似当前窗口和父窗口)。
最后,向最上层页面发发ONSIZE消息.
横竖屏切换:
首先,向所有窗口发ONSIZE消息。
然后,发WM_SETTINGCHANGE 消息。
所以,解决办法就是我在WM_SETTINGCHANGE 里什么都不做就可以了。
这里要做的,是输入框和输入法面板关系 。
切记不要在 WM_SETTINGCHANGE 里做隐藏/显示输入法面板操作,会死机。
另外隐藏显示输入法时,改窗口如果可见,如果没有响应WM_SETTINGCHANGE那么会触发ONSIZE操作。
如果响应了WM_SETTINGCHANGE,那么就不触发ONSIZE操作。