Embedded 版 (精华区)

发信人: bage (铁八哥), 信区: Embedded_system
标  题: Windows CE 开发语言之 Visual C++ 
发信站: 哈工大紫丁香 (2001年10月05日18:32:32 星期五), 站内信件

  本文是上篇文章的继续,主要讲述如何使用 Visual C++ 来进行 Windows CE 开发
?如果你已经能够熟练应用 Microsoft Visual C++ 这个微软 Windows 平台上最优秀的
开发工具,请你继续读下去!
  Visual C++ for Windows CE
  Visual C++ for Windows CE 是一个可以加装到 Visual C++ 和 Developer Studi
o 中的组件。它的集成开发环境(IDE)和 Visual C++ 是一样的,但你要弄明白目标环境
、Windows CE和新的向导的特殊性。这里我们将重点介绍一下“Windows CE 应用程序向
导(Wizards)”。
  Visual C++ for Windows CE 中所带的应用程序向导是一个非常有用的工具。一共
有四种类型的新的向导,它们的使用方法和 Visual C++ 中常规的向导没什么区别,只
是它们是用于 Windows CE 开发的。你可以利用它们来快速地创建一个基本的应用程序
、动态连接库(DLL)或者组件应用程序外壳。这四种新的向导分别是:WCE 应用程序向导
; WCE 动态连接库向导 ;WCE ATL COM 应用向导; WCE MFC ActiveX 控件向导。 当
然随着 Windows CE 的普及,必然会有更多的 VC++ for Windows CE 向导出现的(这是
后话)。
  使用Visual C++ for Windows CE编写第一个 CE 应用程序
  以下我们将通过一个简单的例子来说明如何使用 Visual C++ for Windows CE 的 
WCE MFC 应用向导来(EXE) 来开发一个 CE 应用程序。该应用程序具有一个显示着一幅
位图的视图(view),一个点击后能够弹出一个对话框的菜单。该对话框上还包含了一个
 Windows 的常用控件,一个进度控件。(具体操作步骤不再详述)
  以下是代码部份:
{
  CBitmap bmp, poldbmp;/*定义变量*/
BITMAP bmpStruct;
CDC memdc;
CRect bmpRect, clientRect;
  CBrush backBrush(RGB(0,0,0));/*设置背景颜色*/
CBrush* pOldBrush = pDC->SelectObject(&backBrush);
/*获得分配内存大小*/
GetClientRect(&clientRect);
/* 载入新图到分配内存中*/
pDC->FillRect(&clientRect, &backBrush);
bmp.LoadBitmap(IDB_WINCE_BITMAP);
bmp.GetBitmap(&bmpStruct);
/*设置位图尺寸*/
bmpRect.left = clientRect.left + (clientRect.Width() - bmpStruct.bmWidth)/2;

bmpRect.top = clientRect.top + (clientRect.Height() - bmpStruct.bmHeight)/2;

bmpRect.right = clientRect.right - (clientRect.Width()- bmpStruct.bmWidth)/2
;
bmpRect.bottom=clientRect.bottom-(clientRect.Height()-bmpStruct.bmHeight)/2;

/*分配一个新的内存地址*/
memdc.CreateCompatibleDC(pDC);
/*调入位图到新分配内存*/
poldbmp = memdc.SelectObject( &bmp );
/*输入位图到屏幕*/
pDC->BitBlt(bmpRect.left,bmpRect.top, bmpRect.right,bmpRect.bottom,&memdc, 0
,0, SRCCOPY);
memdc.SelectObject(poldbmp);
pDC->SelectObject(pOldBrush);
return TRUE;
}
  以上代码的功能是将客户区的背景设成黑色,并将位图放置于屏幕中心。接下来我
们将创建并添加菜单项和对话框。
  对话框
  现在我们使用进度控件来创建一个对话框。我们首先添加一个菜单项和一个消息句
柄来调用该对话框。以下是详细的操作步骤:
  1. 在 IDR_MAINFRAME 菜单资源中添加一个新的弹出菜单,并命名为 Tools;
  2. 在 Tools 弹出菜单中添加一个菜单项,命名为 Run WCE First Dialog;
  3. 使用 ClassWizard 给新创建的 Run WCE First Dialog 菜单项添加一个命令句
柄;
  下面我们来添加一个对话框,将控件放入其中,并绑定该对话框到一个类。
  4. 插入一个新的对话框资源,并设置其标题为 WCE First Dialog,资源标号为 I
DD_FIRST_DLG;
  5. 将 Ok 按钮的标题(caption)改为 Close;
  6. 将 Cancel 按钮的标题改为 Start,并将其资源标号改为 IDB_START_BTN;
  7. 从控件面板上拉下一个进度控件并放置到对话框中。不要修改该进度控件的风格
(styles)、标题(caption)和资源标号(resource ids);
  8. 根据掌上电脑的屏幕面积调整该对话框的大小,使之能在掌上电脑中正确显示。
建议可以设为 196 x 47 象素大小;
  9. 使用 ClassWizard 绑定该对话框资源到一个新的类:CWCEFirstDialog;
  10. 创建完对话框类后,再使用 ClassWizard 来给进度控件添加一个成员变量,叫
做 m_progressCtrl;
  11. 为 Start 按钮添加一个命令按钮句柄;
  现在你已经将所有的预备设置都添加到程序中去了。虽然我们所使用的进度显示控
件和对话框并没有什么实际意义,但也能够满足我们的这个短小的入门教程的要求了。
当我们选中 Run WCE First Dialog 菜单项时,对话框将显示出来;然后点击 Start 按
钮,进度控件就会从0增长到30000,最后显示一个标准的 Windows 消息框;点击 Clos
e 按钮将关闭该对话框。
  为了设置进度指示器,你必须在对话框的 WM_INITDIALOG 消息句柄中设置进度值范
围和步长。首先使用 ClassWizard 为 Windows 消息 WM_INITDIALOG 添加一个消息句柄
。在 OnInitDialog() 函数中添加下列代码来设置进度指示器的范围和步长:
BOOL CWCEFirstDialog::OnInitDialog()
{
CDialog::OnInitDialog();
m_progressCtrl.SetRange(0,30000);
m_progressCtrl.SetStep(1);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
  下一步,当用户点击 Start 按钮时,进度控件的值要开始增长。在增长结束时,还
要显示一个消息框。下列代码完成上述任务:
void CWCEFirstDialog::OnStartBtn()
{
for(int i = 0; i <=30000; i++)
{
m_progressCtrl.StepIt();
}
AfxMessageBox(_T("Progress Complete!!!"), MB_OK);
}
  完成以上代码后,你就可以运行你的程序看看效果了。
  编程结束
  祝贺你!你已经完成了第一个 Windows CE 应用程序的开发。就像你所看到的一样
,使用 Visual C++ 来开发 Windows CE 应用程序和开发一个 Win32 应用程序是一样的
简单。大多数步骤都是一样的。至此,本文已经就如何使用 Visual C++ 来开发 Windo
ws CE 应用程序做了一个简单的介绍。在下面的章节中,你可以到其它相关的地方去获
取更多的关于 Windows CE 和手持计算的知识。

--
           ooooO    Ooooo      *********************************
           (    )   (    )     #    大肚能容,容天下难容之事    #  
            \  (     )  /      #    开口便笑,笑世间可笑之人    #
             \  )   (  /       *********************************
              ~~     ~~

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: bage.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.430毫秒