大鱼若智,大智若鱼

如鱼得水,如影随形

« The O'Jays - For The Love of MoneyFileArchiver,为pChao同学定制的文件归档小工具 »

自适应设备的分辨率和其他

buySmart的第一个release发布之后我就在想,能不能让程序自己去适应客户端的分辨率呢?虽说我很偏心地让buySmart只能在320 x 240的Landscape模式下运行,但这总归不是一个好的做法,毕竟没有更多理由这么做。它终究只是一个计算器而已,呵呵。

所以今天要解决的问题至少有两个:一是检测设备的屏幕分辨率,二是调整各个控件的位置和尺寸。还有一个问题是输入法的自动切换,因为大家需要输入的是数字,而不是字母。嗯,接下来就开始分析和解决问题吧:)

一,检测设备的屏幕分辨率

在Visual Studio 2005里面,我能够找到的函数就是GetSystemMetrics,这是一个常见的Windows API。可惜,也许是因为buySmart用的是托管代码(Managed Code)而非本地代码(Native Code),当我用VB中的方式来调用这个API的时候,被告知:MissingMethodException(试图动态访问不存在的方法时,将引发MissingMethodException异常)-。- 我用的代码如下:

Declare Function GetSystemMetrics% Lib "user" (ByVal nIndex%)
Const SM_CXSCREEN = 0
Dim intScreenX = GetSystemMetrics(SM_CXSCREEN)


只好去找其他的办法,最后我用ClientSize来判断设备的屏幕尺寸:

If Me.ClientSize.Width = 240 Then
    '将界面调整为240 x 320模式
    Call mySubChange2Portrait()
ElseIf Me.ClientSize.Width = 320 Then
    '将界面调整为320 x 240模式
    Call mySubChange2Landscape()
End If


二,调整各个控件的位置和尺寸

在上面的代码中,调整界面的过程有两个:mySubChange2Landscape(),mySubChange2Portrait()。内容都很简单,类似于:

TextBox1.Location = New System.Drawing.Point(21, 48)
TextBox1.Size = New System.Drawing.Size(130, 28)


要保证两个函数调整的控件是一样的,也就是说,能调整过来还得调整回去。因为我们还要考虑到多普达C858(HTC P4350, Herald)这种可以自由更换显示模式的及其,呵呵。就在昨天,我还看到了多普达C730(HTC Cavalier)的真机,它的最大亮点就是和C858一样自由更换横屏竖屏。嗯?你说它的操作系统?是Windows Mobile 6啊,呵呵。

编写第一个Smartphone程序的时候,我就发现其实这些程序都可以自动适应屏幕分辨率的。之所以还要掺和一下,是因为我担心自动调整的效果不好,呵呵。肯定还有更好的办法,但我不继续优化代码了,它终究只是一个计算器而已 -。-

三,输入法的自动切换

这个问题暂时没有解决,我觉得它更加重要,所以我会解决它的 -。-

因为我根本就不知道应该怎么去修改输入法的状态,然后就在MSDN里找啊找,看到一篇很受用的文章:Chung Webster: Crafting Smartphone User Interfaces Using .NET Compact Framework。嗯,文章虽然已经很老了,但对初学者来说真的很受用,呵呵。Chung在这篇文章里说:“The Compact Framework does not provide a class to change the input mode...”也就是说,仅仅用托管代码是没有办法去修改这个属性的,需要动用本地代码咯。解决的办法是“use native interop...”,啧啧。今天的时间不多了,我暂时放下,明晚再来看看-。-

解决了上面几个问题,事实上就可以开发一大批小程序了。只要能想到需求,只要愿意去动手做,呵呵。
Subscribe RSS to Google

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Calendar

TwitterBoy

    Tweets Loading...

站内搜索

 

友情链接

图标汇集

最新评论及回复

最近发表

Proudly Powered By Z-Blog

Copyright © bfishadow inc. (since 2005), some rights reserved.
Except where otherwise noted, this site is licensed under creative commons licence.