WTL下实现的PPC绘制图形的简单范例

本文介绍了如何在Windows Mobile环境下使用WTL库进行图形绘制,对比了其他如.NET和MFC的开发方式,并提供了创建支持Pocket PC平台工程的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       在上一篇文章里我提到过WTL在Windows Mobile下的应用。而且我也是比较推荐WTL。我认识的一些做Windows Mobile开发的朋友,不少是使用.net或MFC的。虽然对于Windows Mobile的程序员来说,一些简单的图形绘制是很容易的,不过我还是想把更有益处的WTL绘制图形的方式介绍出来。

对于程序员而言,不管使用什么工具来完成我们的工作,其最终本质其实区别不大。所以这里只举比较少的例子,我想大家应该是可以触类旁通的。
首先我们要准备的环境是:VS2005,Pocket PC 5.0或以上的SDK,WTL8.0,以及程序员一名 : ) 。
第一步是安装WTL8.0,安装方法在WTL的ReadMe文档里有详细的说明。
安装成功以后,如果我们选择新建工程的话,就可以看到下面的界面。选择图中选中的那个图标, ATL/WTL AppWizard for Windows CE。

 第二步:输入你需要创建的工程的名字,然后直接下一步就可以了。后面就是选择该工程可以支持的平台,图中我选择了Pocket PC的03和05的支持。然后继续下一步下一步…就可以了

第三步:工程建立完成后,如下图,选择5.0SDKWindows Mobile 5.0 Pocket PC SDK
 
 
然后如下图选择5.0的模拟器来运行我们的程序,当然如果你手里有5.0的PPC手机,则可以直接连接数据线在手机上联机运行我们的程序。不过这里为了截图方便(手机上截图比较慢),我们选择模拟器。
 
 
最后,F5 运行一下程序,如果看到下图的执行效果,那么OK,我们建立工程成功了。
 
 
 
 
现在。我来演示WTL如何来绘图,假设我们工程的名字叫Tech,那么找到这个函数:
CTechView::OnPaint 。这个是程序的View负责绘制的函数,和MFC很类似的。
然后这样填入代码
LRESULT CTechView::OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
       CPaintDC dc(m_hWnd);
       CRect rect;
       rect.left = 2;
       rect.top = 2;
       rect.right = 100;
       rect.bottom = 20;
       DrawFocusRectColor(dc.m_hDC, &rect, DFRC_FOCUSCOLOR);
       return 0;
}
现在介绍一下,CPaintDC dc(m_hWnd)生成绘图的DC,也就是生成绘图的设备,我们的图形也就绘制到它上面,就可以显示出来了。CRect 并不是MFCCRect,而属于是WTL的。他在atlmisc.h 文件文件中定义,这个文件很常用,一些很重要的东东都在里面,包括常见的CString等,具体内容可以直接查看这个文件。
我们的程序要在界面上绘制一个矩形框。但是这里我就不使用常见的FillRect了,我还是想介绍一点特别的东西。我用了DrawFocusRectColor ,它是用于绘制一个选择框,它的特殊在与,框的颜色是根据当前PPC系统(相当于就是PPC不同的皮肤,是在PPC的系统设置里设定的)的主题色来决定的,这样很方便,如果你想做一个与系统主题一起联动的界面,这样的函数就很好用。另外这个也是我使用5.0SDK的原因,因为这个函数是在Windows Mobile5.0才新加入的。之前的版本是没有的,而且如果你没有安装MSDN2005的话,仅仅在Windows Mobile的SDK里,包括5.0的SDK都是搜索不到的。
它的效果如下,我的主题色是蓝色的,所以这个框也是蓝色的
 
有的朋友说,这个API是5.0的才有吗,以前的SDK貌似也有这样的的呀?呵呵,如果你也这样想的话,那一定是看错了。之前的版本有这样的API:DrawFocusRect 也是绘制选择框,但这个是不一样的。
我们修改一下代码:
LRESULT CTechView::OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
       CPaintDC dc(m_hWnd);
       CRect rect;
       rect.left = 2;
       rect.top = 2;
       rect.right = 100;
       rect.bottom = 20;
       DrawFocusRectColor(dc.m_hDC, &rect, DFRC_FOCUSCOLOR);
dc.DrawFocusRect(&rect); 
}
 
       然后运行一下:
 
在相同的位置再绘制了一个DrawFocusRect的矩形框,这个函数有颜色异或的功能,它在背景色的前提下取异或值,绘制选择效果。这个API是从1.0版本起就一直都有的。
 
       最后,再介绍个常用的。Draw3dRect,这个也属于Windows moblie的基本API,在MFC下也有一样的东西。绘制一个3D效果的矩形框。我们在代码的后面添加几句
rect.top += 20;
rect.bottom += 40;
dc.Draw3dRect(&rect, RGB(255, 0, 0), RGB(255, 155, 0));
 
OK,看到效果了。
 
累了,: ( 今天就到这里,后面我可能会继续写更多详细的图形绘制的方法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值