随笔-5  评论-3  文章-0  trackbacks-0
  2010年5月15日

很久没有来更新了。

世界变化太快,这个博客本来是主要针对windows mobile的技术分享,但是windows mobile已死,windows phone7还在路上,也该看看关注一下其他平台了。

一直想研究一下linux下的应用开发,正好换了手机,换到android了,就从android开始吧。

posted @ 2010-05-15 16:47 如影如风 阅读(38) 评论(0) 编辑
  2009年4月26日

 

一直对Windows Mobile开发很有兴趣。去年已经做过一个这方面的项目了,虽然自己看了很多资料,但是没有系统的学习过。现在应该还只是个入门者吧。

现在想系统的学习一番,我决定把Windows Mobile SDK中的sample都看一遍。我想这样应该能比较全面的掌握Windows Mobile的开发。

边看边写,对自己的学习成果做一个总结,也把心得体会和朋友分享。

今天看了Sample:BasicApp。我安装了wm5.0的sdk,这个程序的代码在

C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Samples\CPP\Win32

同样是一个非常简单的小程序。这种非常简单的小程序很适合初学者,主题鲜明,不会被一些花哨的代码勾引。

程序的功能是现实一个窗口,然后在窗口里显示一幅图片和这幅图片的文字说明。点击左键菜单“Switch”,切换另一幅图片和文字说明。

windows mobile系统和windows桌面系统一样也是基于事件驱动的,系统同样会象应用程序发送很多消息。

用户的每一个操作都会由系统向运行着的应用程序发送相应的消息, 应用程序的主要工作就是处理系统消息。每个应用程序都有自己的消息队列,以及消息处理机制。

每一个窗口同样也有自己的消息队列和消息处理机制。这些都是我对windows系统的一些机制的理解,如果有什么不对的地方还请大家指出。

让我们来看看代码实现。

只有一个cpp文件,所有内容都在这个文件中。入口函数是WinMain。看看这个程序的架构:

1.检查该程序是否已经在系统中运行 。

hEvent = FindPrevInstance();

2.创建程序窗口对象。

hwnd = CreateMainWindow(nShowCmd);

3.执行程序的消息队列。

while (GetMessage(&msg, NULL, 0, 0) > 0)

     {

         TranslateMessage(&msg);

       DispatchMessage(&msg);

     }

    

和winodws中的win32程序结构一样。

在创建程序窗口对象时,程序执行了如下操作:

1.构建一个窗口对象。

   WNDCLASS wc;

   ZeroMemory(&wc, sizeof(wc));

   wc.lpfnWndProc = MainWindowProc;

   wc.hInstance = g_hInstance;

   wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);

   wc.lpszClassName = g_szClassName;

在注册时,我们制定了这个窗口的消息处理函数

wc.lpfnWndProc = MainWindowProc;

MainWindowProc 这个函数就是这个窗口的消息处理函数。

2.注册这个对象。

  atm = RegisterClass(&wc);

  

3.创建窗口并显示。

   hwnd = CreateWindow((LPCTSTR)atm, szTitle, WS_OVERLAPPED | WS_SYSMENU,

       CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,

NULL, NULL, g_hInstance, NULL);

ShowWindow(hwnd, nShowCmd);

4.在MainWindowProc消息处理函数中处理系统给这个窗口发送的消息。

这个简单的框架挺实用的。在移动设备上程序效率还是很重要的,毕竟硬件性能比不过pc。.net这样的东西还是太耗资源了,

还是win32程序效率高,对系统的可控性较好。写win32程序就离不开这个框架。

 

posted @ 2009-04-26 18:18 如影如风 阅读(1539) 评论(2) 编辑
  2009年4月17日

 

一直对Windows Mobile开发很有兴趣。去年已经做过一个这方面的项目了,虽然自己看了很多资料,但是没有系统的学习过。现在应该还只是个入门者吧。

现在想系统的学习一番,我决定把Windows Mobile SDK中的sample都看一遍。我想这样应该能比较全面的掌握Windows Mobile的开发。

边看边写,对自己的学习成果做一个总结,也把心得体会和朋友分享。

今天看了Sample:AddContactPicture。我安装了wm5.0的sdk,这个程序的代码在

C:\Program Files\Windows CE Tools\wce500\Windows Mobile 5.0 Pocket PC SDK\Samples\CPP\Win32

这个程序的功能很简单,程序启动后进入系统的联系人界面,提示你选取一个联系人。选定一个联系人后,程序转入系统的图片选择界面。

你选择想作为这个选定的联系人照片的图片。接下来程序显示联系人信息。这时你选择的图片就变为了这个联系的照片。

 

这个程序自己本身没有界面。这是一个典型的Win32程序,WinMain函数为入口点。程序利用POOM这个com对象来访问系统的联系人信息。

使用POOM的流程如下:

1.初始化COM对象:

hr = CoCreateInstance(CLSID_Application, NULL, CLSCTX_INPROC_SERVER, IID_IPOutlookApp2, (LPVOID *) &g_pPoom);

2.登录POOM对象:

hr = g_pPoom->Logon(NULL);

3.取得联系人对象:

hr = g_pPoom->GetItemFromOidEx(cc.oidContactID, 0, ppItem);

4.注销POOM对象

g_pPoom->Logoff();

5.释放COM对象。

在选取了图片以后,没有把这个图片缩小保存到联系人里。写入联系人属性的方法是采用写流数据的方式。

这个程序非常简单的说明了如何通过POOM对象访问联系人,对我这样的初学者很有帮助。

 

posted @ 2009-04-17 21:30 如影如风 阅读(577) 评论(1) 编辑
  2009年3月29日

最近在做一个Windows Mobile的开发,因为是新手,所以找了很多资料自己学习。

下面是我收集的一些入门接的常见问题的处理方法。

1、Q:新建项目的时候选择哪个项目类型才能创建智能设备的应用程序?
A:在Visual Studio的新建项目对话框中选择Visual C#或者Visual Basic项目类型,选择智能设备模板,然后再选择相应的设备SDK,最后选择“Device Application”,就可以创建一个移动设备的应用程序了。


2、Q:托管代码与本地代码有哪些区别?
A:托管代码是指使用.NET Compact Framework开发的程序代码,可执行文件被编译成IL,执行时需要有.NET的运行时环境。而本地代码指用C++等语言开发的程序代码,可执行文件被编译成与CPU指令集有关的机器码,可以直接运行。

3、Q:托管性的代码执行效率怎么样?和使用Visual C++编写的代码相比较。
A:托管代码的执行效率肯定不如本地代码高,但是托管代码也有一些好处是无法取代的。

4、Q:请问如何在模拟器里面配置连接到移动网络?
A:模拟器如果需要连接移动网络的话,必须有专门的硬件提供支持。可以在开发PC的串口上连一个GPRS的模拟器,SDK文档中对此有专门的说明。

5、Q:开发好的程序通过什么方式部署到手机上?对手机有什么要求?
A:开发的程序需要打包成cab文件部署到手机上。除了通过ActiveSync安装外,还可以通过网络下载、存储卡运行等方式来安装应用程序。对手机的要求是,必须和开发程序的目标平台相兼容。比如为Windows Mobile 5开发的应用程序,可能就没办法很好地运行在Windows Mobile2003平台上。

6、Q:用.NET开发Pocket PC程序需要考虑设备具体使用的是哪种CPU吗?
A:不必。无论是在虚拟机上的x86指令集,还是实际设备上的ARM指令集,对.NET Compact Framework程序的运行来说都一样。

7、Q:对开发来说CDMAGPRS的数据传输是透明的吗?
A:对于软件开发来说数据传输是透明的,CDMAGPRS对于上层应用程序来说,只要支持HTTP协议或者TCP/IP协议就可以进行数据传输的操作。

8、Q:在使用.NET Compact Framework 1.0进行开发时,用EVC直接调用Native代码与使用C#通过P/Invoke在性能上有什么差别?在.NET Compact Framework 2.0上,用C++直接调用和用C#通过P/Invoke又如何呢?
A:用EVC調用Native API的效率,会比使用.NET Compact Framework通过P/Invoke调用Native API要高,这是.NET Compact Framework本身的特性。在从托管代码中调用Native API时,其内部会进行一些额外的类型转换动作,这会导致效率的降低。

9、Q:OpenNETCF能运行在.NET Framework 1.1环境下吗?其中的控件可以与.NET Framework 1.1控件混合使用吗?怎样在Visual Studio .NET 2003中加入OpenNETCF控件?
A:当初在设计NET Compact Framework 1.0/1.1时,由于考虑到移动设备的资源有限,所以有些原本.NET Framework 1.1中已经提供的类和控件就被删除了,OpenNETCF Smart Device Framework主要是针对.NET Compact Framework 1.0/1.1中没有的功能,开发出来的类似的类型和额外的功能,以弥补.NET Compact Framework 1.0/1.1不足之处。这套Framework主要是供.NET Compact Framework程序开发所用,除了少部份针对PC与Pocket PC的同步功能所编写的类之外,大部分都是在.NET Compact Framework上执行的,一般不支持.NET Framework。OpenNETCF的Smart Device Framework安装完毕之后,可以在VS 2003左侧的工具箱中看到OpenNETCF的控件,可以直接拖放来使用 

10、Q:请问如何才能保证应用程序能够及时地释放系统资源? 
A:由于.NET Compact Framework所运行的移动设备,受限于CPU、内存、电源,因此其中的Garbage Collection时经过调整的,垃圾回收的速度比.NET Framework更快。通过调用Dispose()方法,可以立即释放掉对象所占用的非托管资源。 

11、Q:使用.Net开发的智能设备程序是否比用C语言开发的程序效率低很多? A:使用.NET开发的程序会比使用C语言开发的本地程序要慢一些,不过对于一般的应用软件来说,下率不会差太多,除非是需要实时处理硬件或I/O的程序,必须要使用C语言进行开发之外,一般的应用程序用.NET Compact Framework开发即可,因为这样可以获得最好的灵活性和可移植性。


12、Q:请问.NET Compact Framework 2.0对于使用不同CPU的移动设备支持好吗?.NET Compact Framework 2.0在GSM应用方面有没有增强? 
A:.NET Compact Framework具有Windows Mobile跨平台的特性,因此开发时不需要考虑底层的OS、CPU和其它硬件因素。目前.NET Compact Framework对常见的CPU都能够支持,例如ARM、MIPS、SH、x86等。另外在GSM应用方面,主要针对Smartphone的应用作了加强。

13、Q:在制作安装程序的时候,如何在start->program菜单中生成程序的快捷方式?
A:在VS 2005中建立Smart Device Cab Project,在File System页面中,可以看到Application Folder,这就是Start->Program的位置,可以先建立Primary Output的快捷方式,然后将此快捷方式移到Programs Folder,并构建Cab文件即可。

14、Q:移动设备内存较小,填充DataSet是否有大小限制? 
A:DataSet在逻辑上并没有对大小的限制。但是DataSet的大小必须小于当前前的可用内存,否则会有内存分配不成功的异常出现。

15、Q:能不能在一些应用中以XML替代SQL的作用? 
A:可以的。XML的查询效率比SQL Mobile要低,但是在数据比较少的情况下不需要安装更多的组件,这是XML的一个优势。

posted @ 2009-03-29 22:04 如影如风 阅读(255) 评论(0) 编辑
  2008年12月13日
摘要: 原文见:http://blogs.msdn.com/windowsmobile/archive/2008/12/08/uninstalling-applications-programmatically-in-windows-mobile.aspx 我觉得这个主题对我很有帮助。   以编程得方式卸载Windows Mobile程序一个比较简单得方法就是利用CSP( Uninstall Configuration Service Provider )。利用CSP可以达到在后台静悄悄的卸载 程序但目的对于处理软件自动升级比较有帮助。也可以应用在某些设备安全程序中,可以在用户没有任何察觉的基础上在后台卸载一些程序。阅读全文
posted @ 2008-12-13 14:43 如影如风 阅读(347) 评论(0) 编辑
正在学习Javascript和windows mobile开发。 希望和大家一起分享学习心得。
昵称:如影如风
园龄:3年10个月
粉丝:1
关注:0
<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

搜索

 

常用链接

我的标签

随笔分类

随笔档案

最新评论