Windows Mobile编程技巧.docx

上传人:b****5 文档编号:8230362 上传时间:2023-01-30 格式:DOCX 页数:14 大小:286.34KB
下载 相关 举报
Windows Mobile编程技巧.docx_第1页
第1页 / 共14页
Windows Mobile编程技巧.docx_第2页
第2页 / 共14页
Windows Mobile编程技巧.docx_第3页
第3页 / 共14页
Windows Mobile编程技巧.docx_第4页
第4页 / 共14页
Windows Mobile编程技巧.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

Windows Mobile编程技巧.docx

《Windows Mobile编程技巧.docx》由会员分享,可在线阅读,更多相关《Windows Mobile编程技巧.docx(14页珍藏版)》请在冰豆网上搜索。

Windows Mobile编程技巧.docx

WindowsMobile编程技巧

如何通过代码实现WindowsMobile窗体的最小化

Microsoft.NETCompactFramework2.0的窗体类(System.Windows.Forms.Form)也提供了WindowsState属性,是FormWindowState枚举类型。

在.NETFramework中FormWindowState枚举有Normal,Minimized,Maximized三个值。

但是.NETCompactFramework中的FormWindowState枚举只有Normal和Maximized两个值。

因此在.NETCompactFramework的窗体类中,不能通过设置WindowState属性为FormWindowState.Minimized实现窗体的最小化。

不过我们可以通过调用Win32API来实现,以下是实现该功能的关键代码:

//usingSystem.Runtime.InteropServices;

[DllImport("coredll")]

private static extern bool ShowWindow(IntPtr hwnd, int nCmdShow);

private const int SW_MINIMIZE = 6;

private void mniHide_Click(object sender, EventArgs e)

{

    //隐藏窗体,可以通过重新运行程序来显示窗体

    ShowWindow(this.Handle, SW_MINIMIZE);

}

private void mniExit_Click(object sender, EventArgs e)

{

    // 关闭窗体,窗体对象将会被销毁

    this.Close();

}

 漂亮的WindowsMobile进度条控件

这个漂亮的自定义ProgressBar能够在桌面的WinFrom程序中使用,也可以在WindowsMobile应用程序中使用。

是我在 CodeProject发现的,带源代码和示例程序,跟大家分享一下!

出处:

CustomProgressBarfor.NETCompactFramework

 如何在WindowsMobile程序中获得包含Millisecond的DateTime收藏

新一篇:

 漂亮的WindowsMobile进度条控件 | 旧一篇:

 Channel9:

OfflineDataSynchronizationServicesinVisualStudio2008

在我们编写的WindowsCE 或 WindowsMobile应用程序中,常常通过调用System.DateTime.Now来获得设备的当前时间。

我们可以利用设备的当前时间给变量和控件赋值,或者生成单据号和主键字段值等。

不过,细心的你可能已经发现,在WindowsMobile应用程序中每次调用System.DateTime.Now获取到的DateTime,它的Millisecond值始终为0。

这难道是.NETCompactFramework的bug?

事实上就算你用Native代码调用GetLocalTime 或GetSystemTimeAPI函数,得到的时间的毫秒也是0。

那么,有没有办法在WindowsMobile程序中获得包含Millisecond的DateTime呢?

办法是有的,不过没有直接的,需要自己编写一点代码来实现。

OpenNETCF顾问ChrisTacke就介绍了一种方法,利用System.Environment.TickCount获取系统启动后经过的毫秒数,再整除以1000得到一个一秒以内的时间差,之后可以利用这个时间差来计算出当前DateTime时间的Millisecond值。

详细的原理阐述和具体的代码实现就不再这里粘贴了,需要的朋友可以阅读《GettingaMillisecond-ResolutionDateTimeunderWindowsCE》一文,文章还附带了打包的示例代码和PDF格式提供下载。

在分布式环境下,一般会选择GUID或精确到毫秒的时间(DateTime)作为在设备上新增数据的唯一标识,以避免数据提交到中央服务器后出现主键冲突。

关于这个话题可以阅读我N久前写的《在PPC上用时间做唯一编号遇到的问题及其解决方法》。

 

 在WindowsMobile上使用GDI+收藏

新一篇:

 如何清除保存在WindowsMobile上的OutlookWebAccess访问密码 | 旧一篇:

 诚聘WindowsMobile开发工程师

GDI+是Windows操作系统中提供二维矢量图形、图像处理和版式的部分。

GDI+在GDI(较早版本的Windows中提供的GraphicsDeviceInterface)的基础上进行了改进,添加了新功能并优化了现有功能。

.NETFramework已经实现了托管的GDI+编程接口,而.NETCompactFramework并没有支持GDI+。

这使得WindowsMobile应用程序在实现一些漂亮的绘图效果时(如:

渐变),没有桌面应用程序那么容易。

事实上很早以前就有人开发了一个叫XrossOneMobileGDI+的开源二维图形引擎,它完全是用C#托管代码编写的。

XrossOneGDI+可以帮助.NETCompactFramework开发人员创建高质量的矢量图形输出。

GDI+中的所有高级功能(反锯齿绘图、线帽/联接装饰、二维变换、渐变填充等等)几乎都可以通过它实现。

不过由于XrossOneGDI+是纯托管代码实现的,在绘图性能上跟.NETFramework的GDI+还有一定的差距。

在《用于Microsoft.NETCompactFramework的XrossOneMobile》一文中可以了解到XrossOneGDI+的详细介绍及源代码下载。

WindowsMobile还提供了GameAPI和Direct3DMobile,但这两套API是针对游戏程序的,并不一定适合普通的应用程序。

事实上从WindowsMobile5.0开始就支持GDI+了,开发人员可以利用C语言或者P/Invoke来使用这些API。

OpenNETCF顾问AlexFeinman已经将WindowsMobile的GDI+API用C#语言封装好了,并且提供了一些很漂亮的示例程序。

Brushes

BrushDemosourcecode:

1.PathGradientbrush

           //Createrectangularpath

           GraphicsPathpath=newGraphicsPath(FillMode.FillModeAlternate);

           path.AddRectangle(newGpRectF(0,0,ClientRectangle.Width,

               ClientRectangle.Height/5));

           

           //Createrectangulargradientbrush

           //withredincenterandblackinthecorners

           brPathGrad=newPathGradientBrush(path);

           brPathGrad.SetCenterColor(Color.Red);

           intcount=2;

           brPathGrad.SetSurroundColors(newColor[]{Color.Black,Color.Black},

               refcount);

2.SolidBrush

           brSolid=newSolidBrushPlus(Color.CornflowerBlue);

3. HatchBrush

           brHatch=newHatchBrush(HatchStyle.HatchStyle25Percent,

               Color.Black,Color.White);

4.LinearGradient

           brLinGrad=newLinearGradientBrush(newGpPointF(0,0),

               newGpPointF(50,50),Color.Black,Color.White);

5.Texturebrush

           StreamOnFilesf=newStreamOnFile(bitmapPath);

           ImagePlusimg=newImagePlus(sf,false);

           brTexture=newTextureBrushPlus(img,WrapMode.WrapModeTile);

Pens

PenDemosourcecode:

1. Solidwithcaps.Standardcapsareused–roundandarrow

           brSolid=newSolidBrushPlus(Color.CornflowerBlue);

           penSolid=newPenPlus(Color.Red,10);

           penSolid.SetEndCap(LineCap.LineCapRound);

           penSolid.SetStartCap(LineCap.LineCapArrowAnchor);

2. Solidwithcapsandantialiasing.Thisoneisthesameasbeforeexceptitisdrawnwithantialiasing

           g.SetSmoothingMode(SmoothingMode.SmoothingModeAntiAlias);

           penSolid.SetColor(Color.Blue);

           g.DrawLine(penSolid,5,rcf.Top+10,rc.Width-10,rcf.Top+10);

3.Hatched(25%)

           brHatch=newHatchBrush(HatchStyle.HatchStyle25Percent,

               Color.Black,Color.White);

           penHatch=newPenPlus(brHatch,10);

4.Solidwithtransparency

           penSolidTrans=newPenPlus(Color.FromArgb(-0x5f7f7f7f),10);

5.Customcap.Thecustomcaphasbeencreatedoutofapathobjectconsistingofasingleellipse

           penSolidCustomCap=newPenPlus(Color.Black,20);

           GraphicsPathpath=newGraphicsPath(FillMode.FillModeAlternate);

           path.AddEllipse(-0.5f,-1.5f,1,3);

           CustomLineCapcap=newCustomLineCap(null,path,LineCap.LineCapFlat,0);

           penSolidCustomCap.SetCustomEndCap(cap); 

6.Dash

           penDash=newPenPlus(Color.Black,5);

           penDash.SetDashStyle(DashStyle.DashStyleDot);

7.Gradientbrush-based

           brGrad=newLinearGradientBrush(

               newGpPointF(0,0),newGpPointF(100,100),

               Color.Black,Color.White);

           penGradient=newPenPlus(brGrad,30);

Demoapplication

效果还不错吧!

既然是用Win32API实现绘图的,性能肯定不差。

关于这套GDI+API的详细信息,可以仔细看AlexFeinman的《UsingGDI+onWindowsMobile》,还提供源代码和文章的PDF格式下载哦!

 利用数据缓存机制提高智能设备应用程序的数据访问性能收藏

新一篇:

 MicrosoftOfficeMobile6.1发布 | 旧一篇:

 开发直接访问SQLServer的智能设备应用程序

刚看了ChrisTacke的《ImprovingDataAccessPerformancewithDataCaching》一文,回想起以前做过的一些项目,对数据缓存在提高数据访问性能方面的作用颇有感受,跟大家分享一下。

我们在开发MIS项目时,要跟各种业务和数据在打交道。

其中数据可以根据它们的用途,分为业务数据和参考数据两种。

业务数据是业务的信息载体,如:

采购进货单、销售出货单、盘点单等。

参考数据是业务数据组成部分,如:

度量单位、颜色、城市等。

参考数据在英文里面通常叫LookupData或ReferenceData,它们是在系统中使用频率很高的一类数据。

因此,这类数据的访问性能将会影响整个系统的用户体验。

那么,如何提高lookupdata的访问性能呢?

ChrisTacke在他的文章中分析了三种数据访问方式。

前两种访问方式差不多,主要区别在于:

第一种在每次访问数据库时都会打开和关闭数据库连接;而第二种是在系统缓存一个数据库连接对象,每次使用后不关闭它。

我相信大家都会认为第二种方式在频繁访问数据库时性能更优,因为打开一个数据库连接是比较耗系统资源的。

然而结果却让人出乎意料,这两种方式的性能很接近,甚至第二种方式性能还更好。

测试结果1:

Device

Processor

MeanExecution(ms)*

OLDISAM-L8

800MHzGeodex86

7.5to9.5

iCOPeBox2300

200MHzVortex86

47to52

DellAximx51

416MUzIntelPXA270

38to62

测试结果2:

Device

Processor

MeanExecution(ms)

OLDISAM-L8

800MHzGeodex86

7.1to14.8

iCOPeBox2300

200MHzVortex86

51to52

DellAximx51

416MUzIntelPXA270

43to61

第三种方式利用数据缓存机制,在第一次获取数据时,将数据加载到一个Hashtable中,然后再返回。

以后就直接从缓存获取数据。

第三种方式的性能跟前面两种相比差了十万八千里呀!

测试结果3:

Device

Processor

MeanExecution(ms)

OLDISAM-L8

800MHzGeodex86

0.0193to0.0201

iCOPeBox2300

200MHzVortex86

0.1014to0.1164

DellAximx51

416MUzIntelPXA270

0.0975to0.1437

在以前做过的一些项目中,也是采用了类似的缓存机制来提高数据访问性能,效果确实明显。

不过,要特别注意缓存数据的更新问题!

在更新了数据库中的lookupdata时,别忘了内存中的缓存数据也需要更新。

ChrisTacke的文章还提供示例代码和PDF格式下载:

DownloadtheSourceCode

DownloadthePDF

另外,ChrisTacke说他们在那个项目中还开发了一个运行在WindowsCE的轻量级ASP.NETWeb服务器,用来展现报表,在后续文章中会详细介绍它的实现,期待ing...  

开发直接访问SQLServer的智能设备应用程序收藏

新一篇:

 利用数据缓存机制提高智能设备应用程序的数据访问性能 | 旧一篇:

 一本关于WindowsMobile数据同步的书

Microsoft.NET中的System.Data.SqlClient命名空间为.NETFramework和.NETCompactFramework都提供了一致的访问SQLServer数据库的API。

SqlClient是针对SQLServer的数据提供程序,而SqlServerCe是针对SQLServerCompactEdition的数据提供程序。

大部分人都知道智能设备应用程序可以访问SQLServerCE数据库,但是不知道还可以通过TCP/IP连接直接访问SQLServer数据库。

我在前段时间撰写的《如何将数据导入到SQLServerCompactEdition数据库中(续)》中就智能设备应用程序访问SQLServer数据库做了实例证明。

或许你在开发这样的应用时遇到了一些难题,一直得不到解决。

那么,这里推荐大家阅读PrashantDhingra写的《DevelopingConnectedSmartDeviceApplicationswithSqlClient》一文。

你将会了解到如何配置SQLServer的连接设置和Windows防火墙,编写程序代码,以及SqlClient数据提供程序在.NETFramework和.NETCompactFramework中的不同之处。

文中提供了示例代码和PDF格式的下载。

 

 如何判断.NETCompactFramework的版本收藏

新一篇:

 WindowsLiveforWindowsMobile10.6.0030.2100 | 旧一篇:

 PowerToysfor.NETCompactFramework3.5CTP(September2007)

到目前为止,.NETCompactFramework已经发展到了v3.5beta2。

从v1.0RTM到v3.5beta2中间发布过了许多个版本,有时候我们需要在程序中判断当前CLR的版本,并做出适当的处理。

判断.NETCompactFramework的版本最简单的方法是调用System.Environment.Version静态属性,这个属性会返回执行当前代码的CLR版本号。

不过,只有版本号很难判断出该版本的实际名称。

为了解决这个问题,NeilCowburn整理了下面的表格,供大家参考:

Version

Release

1.0.2268.0

1.0RTM

1.0.3111.0

1.0SP1

1.0.3226.0

1.0SP2(Recalled)

1.0.3227.0

1.0SP2Beta

1.0.3316.0

1.0SP2RTM

1.0.4177.0

1.0SP3Beta

1.0.4292.0

1.0SP3RTM

2.0.4037.0

2.0MayCTP

2.0.4135.0

2.0Beta1

2.0.4317.0

2.0NovemberCTP

2.0.4278.0

2.0DecemberCTP

2.0.5056.0

2.0Beta2

2.0.5238.0

2.0RTM

2.0.6103.0

2.0SP1Beta

2.0.6129.0

2.0SP1RTM

2.0.7045.0

2.0SP2RTM

3.5.7066.0

3.5Beta1

3.5.7121.0

3.5Beta2

另外他还提供了一个保存上述映射关系的xml文件,谢谢NeilCowburn!

C#中DatagridView单元格动态绑定控件

字体大小:

大|中|小2007-09-0611:

33-阅读:

737-评论:

1

我们在使用DatagridView的列样式的时候很方便,可以设置成comboboxcolumn,textboxcolumn等等样式,使用起来非常方便,但是,这样设置的列都采用同一种样式.对同一列采用多种样式的,就需要单独对单元格进行操作了.

具体方法如下:

1.实例化一个定义好的控件:

如combobox

2.初始化combobox控件

3.获取

      privatevoiddataGridView1_CellClick(objectsender,DataGridViewCellEventArgse)

       {

           if(dataGridView1.CurrentCell.ReadOnly==false&&dataGridView1.CurrentCell.RowIndex==2)//combobox显示条件

           {

               comboBox1.Text=dataGridView1.CurrentCell.Value.ToString(); //对combobox赋值

               R=dataGridView1.GetCellDisplayRectangle(dataGridView1.

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 制度规范

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1