在windows mobile平台的应用程序开发过程中,如何处理屏幕方向改变对程序带来的影响是一个重要的问题。allen lee的文章《wm有约(四):处理屏幕旋转》中讲述了如何使用mobile client software factory中的orientationaware控件来处理屏幕方向改变,好处就是我们不用添加任何代码。在我之前的文章《docking and anchoring controls on windows mobile》和《创建windows mobile上兼容性好的ui程序》中,提到了使用控件自身的docking and anchoring来适应设备屏幕方向的改变。今天在msdn的技术文章中,看到了一篇文章,《developing orientation-aware and resolution-aware windows mobile-based applications in native code》,讲述了如何使用native code来处理设备的portrait/landscape这两个模式的改变对设备ui带来的影响,觉得有必要和大家分享一下。
该文章使用字谜游戏crossword为背景,在没有处理设备portrait/landscape模式之前,该程序是运行在portrait模式下的,然而在landscape模式下,有些控件就不在屏幕显示的范围之内了,而且背景看上去也不对了,如下图1所示:
图1:未经处理情况下的程序界面
解决的方法可以分为几个步骤:
1. 准备一张320*320大小的背景图片替换掉原来的240*320的图片。
2. 在onpaint事件处理中,修改添加背景图片的代码如下:
bitblt(hdc, 0, 0, 320, 320, hmemdc, 0, 0, srccopy);
3. 在wndproc 的wm_size处理中,修改text box的宽度,代码如下:
1casewm_size:
2
3{
4
5 hwndheditbox=getdlgitem(hwnd,idc_main_edit_box);
6
7 hwndhenterbutton=getdlgitem(hwnd,idc_main_enter_button);
8
9 intnwidth=loword(lparam);
10
11
12
13 movewindow(heditbox,8,4,nwidth-70,20,true);
14
15 movewindow(henterbutton,nwidth-57,4,50,20,true);
16
17}
18
19break;
如果喜欢用本地代码实现屏幕方向自适应的windows mobile程序请收藏或告诉您的好朋友.
阅读(130) | 评论(0) | 转发(0) |