`
ymfhcn
  • 浏览: 31136 次
  • 来自: 湖南
最近访客 更多访客>>
社区版块
存档分类
最新评论

.Net开发WinCE应用程序杂碎(转)

阅读更多
VS.NET做CE程序需要注意的问题:

1、Form的显示问题。由于在CE上运行的是简化版的.NET Framework,上面不仅少了很多的东西,而且因为被过度简化而出现了一些Winform上没有的问题,这些问题当中最容易困惑刚接触CF的人的就是多个Form如何正常显示和隐藏。
   在Winform下面,Form1.Show()就能够将Form1显示出来,但是在CF下面就不一样了。在CF下面,这段代码会让你的程序“消失掉”:
   // this = Form1
   Form2 f2 = new Form2();
   this.Hide();
   f2.Show();
如此简单的代码,你也许会认为应该是显示出一个f2,而事实上却是出现了系统桌面或者另外一个不相关的程序界面。仔细研究了一下,发现只要你的程序转到后台之后,你就不可能通过代码将你的程序中任意一个窗口显示出来(API除外),因为这个Show在CF当中的MSIL仅仅改变了某一个窗口的“可视状态”而没有重新设置程序焦点的步骤。而上面这个代码片断首先将自己隐藏了,这个时候你的程序中所有的界面都已经被隐藏了,因此焦点自然不在这个程序上了,后面的f2.Show又没有夺回焦点,因此还是没有被显示出来。
   那么怎么半呢?通过API?那是可以的,不过这样的话就比较麻烦了:除了需要写出API的声明,还要在每次调用Show的时候额外调用这个API。实际上那个API存不存在我没有研究过,也许是向窗口发送一个什么消息吧。事实上要解决这个问题并不难,关键就是要避免焦点的丢失,想上面的那个代码就应该改成这样:
   // this = Form1
   Form2 f2 = new Form2();
   f2.Show();
   this.Hide();
需要注意的是,这个问题对于ShowDialog的窗口也同样存在,比如:
   // this = Form1
   Form2 f2 = new Form2();
   f2.ShowDialog();
   this.Show();

   // this = Form2,f1 = Form1
   private void Form2_Load(...)
   {
      f1.Hide();
   }
因为只有当Dialog被隐藏了之后才会执行ShowDialog下面的一句话,因此实际上的顺序就和
   f2.Hide();
   this.Show();
一样了。处理的办法只能够是在f2隐藏之前先把原来的窗口显示出来,比如:
   // this = Form1
   Form2 f2 = new Form2();
   f2.ShowDialog();

   // this = Form2, f1 = Form1
   private void Form2_Load(...)
   {
      f1.Hide();
   }
   private void Form2_Closing(...)
   {
      f1.Show();
   }
   private void ButtonOK_Click(...)
   {
      f1.Show();
      this.ShowDialog = DialogResult.OK;
      this.Hide();
   }
2、Form的外观问题:
   Form的外观控制是另外一个非常困惑初次接触者的问题。这里的外观控制指的是如何控制只显示一个小窗口、如何全屏、如何点击右上角就立即关闭而不是隐藏等等。

   小窗口  这里指的是如同Winform那样,只占据屏幕一部分而不是全部的那种显示模式。方法是将FormBorderStyle调整为None,这意味着没有标题栏,也就是不能够移动。如果你希望有标题栏,能够移动,看来只能够你自己去实现了。
   全屏    这里指的是连标题栏都不想要了,实现的方法是:
           1.关掉SIP
           2.将Form的Menu设为null
           3.将Form的WindowState设为Maximize.
           注意,这个必须在这个Form已经显示出来之后再设才能够有效。
   点击右上角就立即关闭而不是隐藏
           这个比较简单,只要将MinimizeBox设为False就可以了。

3. SIP的问题
   Sip就是输入板,比如什么拼音啦、全屏手写什么的。这个东西非常讨厌,整个开发当中都会不断的出现和她有关的问题。总结了一下,主要需要注意以下几个方面:
   1、Sip似乎是全局的,Form1代码里面将Sip.Enabled = false,然后Form2代码里面将Sip.Enabled = true,这个时候显示的是Form1,你不要以为那个Sip就没有显示出来,实际上是显示出来的。于是很多时候会出现这样的问题:你显示着的窗口关闭了SIP,但是某些用户操作触动了这个窗口的代码,而这个代码又触动了另外一个隐藏着的窗口的代码,而这个代码却将Sip打开了。于是你在调试的时候就会非常的郁闷:我的代码明明没有打开SIP,为是么会突然就自动打开了呢?调是的时候很容易就忽略了那些“无关的”代码,与是很难调试出来。
   2、Sip和MainMenu是关联的。如果一个Form没有设置Menu属性为一个有效值,那么一旦调用sip.Enabled = true就会抛出一个异常。一个比较容易因为没有注意到而出现的情况是,如果你想要将窗口全屏,那么就必须要将Menu去掉,如果这时候sip.Enabled = true……
   3、Sip不会自动判断搜属的Form是否已经被抛弃了(Disposed)。同时由于Form在Close之后不是马上,甚至根本就不会调用Dispose(),于是Sip在Form事实上已经Disposed的情况下并没有被Dispose,甚至关联在这个Sip上面的事件也不会被解除。下面是一个出错的例子:

   // this = Form1
   Form2 f2 = new Form2();
   f2.Close();
   sip.Enabled = true;
   sip.Enabled = false;

   // this = Form2
   ... void InitializeComponents()
   {
   ...
       sip.EnabledChanged += new System.EventHandler(sip_EnabledChanged);
   ...
   }
   ... void sip_EnabledChanged(...)
   {
       this.Visible = true;  // 在这里抛出异常,因为实际上f2已经被关闭了。
   }  

现在来回答一下各人的问题:

Q:在PDA上,开发些什么软件呢?
A:目前看来可能是一些行业软件以及手机上的应用,可能后者受到的关注程度较多。例如无线传输啦,GSM、GPRS、CDMA + GPS + GIS之类的,看到国外的还有一些其他服务性的东西,诸如天气预报、酒店车票价格查询等等。我个人有部分观点和 bisslot(米杜)  的一样,就是Web方式。不过从现在看来,PDA上面看For PC的东西比较慢,如果要做也必须连Web部分都要专门给For PPC做。

Q:模拟器在哪啊? 我挺感兴趣的 但是不知道从哪里下手阿
A:模拟器Vs.NET 2003自带。你新建一个SmartDevice的Solution就可以做啦,进去之后你会看到一个类似“PocketPC 模拟器”这样的选项(下拉框),里面可以选的还有PocketPC设备等。不过这个自带的是一个PPC 2002的模拟器,PPC2003(包括SmartPhone)的模拟器附加包可以在微软网站找到。不过就算你不装都可以开发PPC2003的软件,因为.NET CF 开发出来的本身就是平台无关的——包括CPU平台以及WinCE的版本。写出来的程序只要在装有.NET CF的机子上就能够运行,直接Copy上去就可以了,不一定非要安装程序的。目前支持.NET CF的包括PPC2000/PPC2002/PPC2003/WinCE.NET 4.0/4.1/4.2等,不过只有PPC2003/WinCE 4.2是自带.NET CF,其他的都要安装。从这个方面看来,用VS.NET开发比用eVC做开发,可移植性要强一些,不需要为不同的CPU编译不同的版本。
    至于说从何下手嘛,现在上面随便写点什么再说,练练嘛!

Q:用VS.NET做开发很爽,比如开发起来速度比较快,比如能实现一些很有趣的编程方式,比如能够做到每台机子的程序都不能够装到别的机子上用,即使你知道了这是怎么做出来的恐怕也无能为力。  什么意思?同一类型的机器上不能通用? 看了一些类似你写的东西,偶想做WINCE下的开发了  偶也用VS.NET的
A:不是啊,我的意思是可以这么做,不是必须这么做,而且这么做需要一定的技巧的,系统本身并没有这样的功能。实际上如果你不特地去做些什么,不仅仅统一类型的机子上通用,而且不同CPU,不同版本的WinCE系统,只要安装了(或者自带了).NET CF,就可以运行,直接Copy就可以了!是不是非常方便啊?
   不过问题也就来了,随便Copy都能够用,那么不就和PC机上的一样了?那不很容易盗版吗?我想告诉大家的就是这个:在PPC上用VS.NET开发完全有可能防止盗版,可以做到这台机子上的软件只有这台机子上能够用,甚至说这台机子的安装软件装出来的东西也只有这台机子能用。不过怎么做嘛,偶不敢说,保密问题……

Q:.NET程序在CE运行速度怎么样?
A:速度确实不能够和eVC的比,而且大小似乎也会大一点。不过如果你打算用.NET CF做的话,一定要注意优化,有没有优化真的差很远!(感觉有点像回到了DOS时代,那时候可是以速度为第一考虑要素啊!)怎么优化日后有机会我会讲的。

Q:能不能介绍一下在公司里用VS.NET 2003 + WIN CE.NET开发PDA的薪水情况
A:如果你是老板,你觉得应该给多少呢?呵呵!现在俺的薪水就要看着款产品是否畅销了……目前来说似乎比较顺利,不过钱还没有到手呢……



在PC上运行很好,但是down到Win CE目标机后运行时立即自动退出,是何原因?
我的Win CE image文件中已经包含了Compact framework

在win ce上运行.net cf程序,需要先在PDA上安装.net cf
vs.net在发布程序到PDA时会先判断 PDA上有无安装.net cf,没有的话 会先安装
你也可以自己先安装了,这样调试的时候会快一些

ce 下没有win32 类,所以不能所有win32 的功能,包括API,所以handle 所没必要了,因为它不需要也不能进行句柄操作

怎样将文件复制到Wince .NET 模拟器上
我按照msdn例子“ms-help://MS.MSDNQTR.2003FEB.2052/dv_evtuv/html/ettskCopyingFilesToTargetDevice.htm”试了,但是在第二步没有发现“网络共享”的图标,无法进行下去

首先你的机器可以使用iis,
照MSDN上添加虚拟的网卡,把原来的物理网卡禁用,虚拟网卡的ip设为192.168.0.1
iis的Ip也是192.168.0.1
共享一个文件夹(如test),在iis中设为可以浏览的。
现在在浏览器中键入http://192.168.0.1/test
如果可以看到test文件夹下的文件就可以了
在wince.net或pocket pc中把网卡的ip设为同一网段的如192.168.0.2
现在在wince的浏览器中键入
http://192.168.0.1/test
看是不是可以看到test文件夹下 的内容?

分享到:
评论

相关推荐

    VB.rar_vb.net wince_wince_wince vb.net_wince vb

    3. **VB.NET on WinCE开发**:开发VB.NET应用程序在WinCE平台上需要使用Visual Studio的嵌入式开发工具,如Visual Studio .NET CE或Visual Studio 2005/2008 Professional版配合PocketPC或Smart Device Extensions。...

    wince开发.net教程

    本教程将深入探讨WinCE开发与.NET技术的结合,旨在帮助开发者全面理解并熟练掌握这一领域的知识。 一、Windows CE.NET简介 Windows CE.NET是微软推出的一种面向嵌入式设备的操作系统,它基于微内核设计,具有轻量级...

    wince.net开发

    "wince.net开发"着重于利用.NET框架进行WinCE应用程序的开发,这对于想要进入嵌入式开发领域的初学者来说是一个很好的起点。 在学习WinCE开发之前,首先需要理解其基础概念。Windows CE是一种微内核的操作系统,它...

    [VB.NET源码]开发的WinCE下的串口通讯类

    VB.NET是Microsoft .NET Framework的一部分,它是一种面向对象的编程语言,适合快速应用程序开发。在VB.NET中,我们可以通过类(Class)来封装功能,便于代码的复用和组织。 2. **SerialPort类** 在.NET ...

    wince 应用程序开发

    开发工具是进行Windows CE应用开发的基础。Platform Builder是一个重要的工具,它支持创建Win CE应用程序、动态链接库(DLL)和库文件(Lib),并使用Win32 API进行开发。应用程序与操作系统内核紧密集成,因此一旦...

    WinCE应用程序开机自动运行

    WinCE应用程序开机自动运行 WinCE应用程序开机自动运行 WinCE应用程序开机自动运行 WinCE应用程序开机自动运行 WinCE应用程序开机自动运行 WinCE应用程序开机自动运行 WinCE应用程序开机自动运行 WinCE应用程序开机...

    wince6.0上的.net framework 3.5安装包

    不一定支持.netframwork,即使支持也很可能是低版本的,要自已定制.netframework3.5的系统非常麻烦,经研究发现,可以在wince6系统启动以后手动安装.netframework3.5的包,安装后就可以完美支持3.5的应用程序了。...

    wince6.0下可用应用程序

    其中,本机应用程序使用API调用,而.NET应用程序则基于.NET Compact Framework框架。 4. **API和库**:WinCE 6.0提供了丰富的API函数,用于文件操作、网络通信、图形界面等。开发者可以通过API函数实现各种功能。...

    WINCE5.0应用程序

    在Windows CE 5.0(简称WINCE5.0)平台上进行应用程序开发,开发者通常会利用Visual Studio 2005(VS2005)作为集成开发环境(IDE)。这个平台提供了丰富的工具和资源,使得开发者能够创建高效、可移植的嵌入式应用...

    wince之应用程序设计

    3. eMbedded Visual Tools:这些工具包括eMbedded C++、eMbedded Visual Basic等,是Visual Studio的扩展,专门针对WinCE应用开发。 三、应用程序模型 WinCE支持两种主要的应用程序模型: 1. Native Application:...

    用Labview开发WINCE应用程序.doc

    【Labview开发WINCE应用程序】 Labview(Laboratory Virtual Instrument Engineering Workbench)是一种图形化编程环境,常用于科学实验、数据分析以及自动化测试等领域。利用Labview,开发者可以通过拖拽图标和...

    wince.net开发简介

    "wince.net"可能是指Windows CE的.NET版本,它支持.NET Compact Framework,允许开发者使用C#、VB.NET等.NET语言进行应用程序开发。 在Windows CE的开发过程中,有几个关键知识点是初学者必须掌握的: 1. **架构...

    LabVIEW开发WinCE应用程序

    ### LabVIEW 开发 WinCE 应用程序知识点详解 #### 一、概述 随着工业控制领域的发展,基于Windows CE系统的单板电脑逐渐受到欢迎。这些设备不仅具备强大的处理能力,还能够提供良好的用户界面和丰富的功能。对于...

    WinCE应用程序开发

    WinCE应用程序开发是针对运行在Windows CE操作系统上的嵌入式设备的应用程序开发过程。Windows CE是微软推出的一种精简型操作系统,针对资源有限的设备,例如智能手机、手持设备、工业控制器、车载娱乐系统等。...

    .net cf wince 贝兹 曲线图

    在.NET Compact Framework (NET CF) 下开发Windows CE (Wince) 应用时,有时需要在设备上呈现复杂的图形,例如曲线图。在Wince环境中,由于默认的库并不包含用于绘制图形的动态库,因此需要寻找第三方库或者自定义...

    cir1_buf.rar_vb.neT界面_vb.net_vb.net wince_wince_wince VB.NET

    在VB.NET平台上开发Windows CE(WINCE)应用时,创建美观且功能丰富的用户界面是至关重要的。本示例“cir1_buf.rar_vb.neT界面_vb.net_vb.net wince_wince_wince VB.NET”提供了关于如何在WINCE设备上实现一个用于...

    VS2008 C#开发WinCE系统程序开发详细步骤

    "VS2008 C#开发WinCE系统程序开发详细步骤" 本文详细介绍了使用VS2008+SQLite开发WinCE系统下的PDA程序的开发步骤,涵盖了开发环境的配置、数据库的选择和连接、开发工具的选择等方面。 一、开发环境配置 开发...

Global site tag (gtag.js) - Google Analytics