[不指定 2006/03/10 11:01 | by turbozv ]
移动开发网
 
作者:Daric   来源:BIPLIP   时间:2004年7月8日 4:51
 
问:请问在我的程序里如何才能取得Windows Mobile 2003当前的屏幕模式(横向/竖向)?我可以通过程序切换吗?


答:从Windows CE 4.0开始,DEVMODE 结构多了一个属性dmDisplayOrientation,你可以通过这个属性来取得或设置屏幕旋转模式,它对应的值如下。
DMDO_0   不旋转
DMDO_90  旋转90度
DMDO_180 旋转180度
DMDO_270 旋转270度

点击在新窗口中浏览此图片


切换屏幕旋转模式通过调用 ChangeDisplaySettingsEx 来实现,如:
DEVMODE devmode = {0};
devmode.dmSize = sizeof(DEVMODE);
devmode.dmDisplayOrientation = DMDO_90; //水平模式
devmode.dmFields = DM_DISPLAYORIENTATION;
ChangeDisplaySettingsEx(NULL, &devmode, NULL, 0, NULL);


取得当前模式的代码如下:
DEVMODE devmode = {0};
devmode.dmSize = sizeof(DEVMODE);
devmode.dmFields = DM_DISPLAYORIENTATION;
ChangeDisplaySettingsEx(NULL, &devmode, 0, CDS_TEST, NULL);
通过 devmode.dmDisplayOrientation 的值可以判断当前模式。


值得注意的是,这样切换模式并不是永久的,当设备重新起动后,就会还原为初始状态。
如果你需要在保留切换的屏幕模式,可以通过设置注册表中HKEY_LOCAL_MACHINE\System\GDI\Rotation 下的两个键值实现
Angle - DWORD    (0, 90, 180, 270)
LandscapeMode - DWORD   (0,1)
[不指定 2006/02/26 10:31 | by turbozv ]
     今天晚上把掌心万年历的内部数据全部做成Unicode,其他地方轻松搞定,不过就是在节日文件festivals.txt上出了不小的问题。


【问题一】在Active Sync软件中将PC上的unicode格式的festivals.txt拷贝到PPC后,被默认地转换为ascii格式
【解决办法】我忍了,改为festivals.dat,这下Active Sync不加转换了


【问题二】Unicode文件格式的识别
【解决办法】头部两个字节 0xff, 0xfe,在写程序的时候注意了一下 fread(buf, 2, 1, fp); 之后是用强制转换来解决无符号数和有符号数的比较问题
if (0xff != (unsigned char)buf[0] && 0xfe != (unsigned char)buf[1]) { //ERROR }


【问题三】Unicode文件的读入,fgetws()不能读正确读入Unicode
【解决办法】这个问题我拿到VC6下面去试了一把,结果正确,但是eVC4就是不对。没办法,自己做解码吧,先读取0xff, 0xfe, 然后顺序读ch1, ch2,把ch1 + ch2 << 8 赋值给一个wch,如此反复。


【问题四】Unicode文件的写回
【解决办法】和上面一个类型的问题,MSDN上也没说太明白,fwprintf()写回的内容仍然是ASCII格式。我觉得很奇怪,难道M$的fwprintf在写入文件的时候自行做了一次wcstombs的转码?不管了,自己再做了一次同上的代码。faint!
[不指定 2006/02/20 08:23 | by turbozv ]
     最近几天都在思考重构 历史上的今天。
     总体来说,这个问题需要处理的1万条左右的文本,总长度有10MB左右,很自然我们需要对数据做一个索引。对于这个具体的问题,我们需要的索引数据是{发生时间+事件标题+内容偏移量+内容长度},但是这里有一个问题,采用定长的索引,势必标题这个变长的数据不好处理,会浪费不少的磁盘空间和内存空间。但是如果采用变长的索引,在读取的时候会带来繁琐和低效。最终我采用的是定长的索引,不过额外引入了一个标题池,即:每条索引={发生事件+标题偏移量+内容偏移量+内容长度},索引文件分位三部分:{记录条数n+n条定长的索引+标题池},那么我们读取的时候就非常简单了:


1)读取记录条数n
2)分配n条索引的空间给,从文件中直接读入n条索引
3)分配标题池,空间=文件长度-当前文件位置,从文件中直接读入标题池


     对于索引的生成,需要分两步,第一步写{记录条数n + n条定长索引},注意索引在写入的时候,动态计算它的标题偏移量;第二步写标题池,直接遍历一次写入。


     在PPC上的运行结果非常令人满意,不过这个索引跑得还真是够慢,哈哈,当然瓶颈是在于磁盘读写:)
分页: 53/68 第一页 上页 48 49 50 51 52 53 54 55 56 57 下页 最后页 [ 显示模式: 摘要 | 列表 ]