关于输入法改变而引起的自适应问题

问题出处:

已知:

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操作。

 

你可能感兴趣的:(杂七杂六)