智能终端定制开发 ad
MTK/瑞芯微/高通-Android,智能模块/智能终端方案商

深度定制各类智能终端和智能硬件产品,提供硬件选型咨询、参考设计、元器件推荐、驱动开发、行业模块集成、操作系统定制与算法集成等软硬件定制服务。
contact.aspx

Android核心板产品覆盖2G、3G、4G通讯,双核、四核、八核CPU,可选的平台有MTK6580、MTK6737、MTK6750等,Android版本有5.1 6.0 7.0等。
contact.aspx

可广泛应用于低端智能POS、安防监控、车载设备、低端智能机器人、智能家居、智能硬件、工业智能手持设备、低端智能对讲设备、低端警务或执法设备、智能穿戴、贩卖机、物流柜、智能门禁系统等行业和设备。
contact.aspx

可提供以太网转串口透传,WIFI转串口透传,蓝牙转串口透传,CAN总线模拟量控制输出模块等。
contact.aspx

带3G或4G通讯功能,运行android系统,有多个串口,可以外挂各种模块:条码扫描、RFID、指纹识别、身份证识别、磁条卡、ID卡、GPS/北斗模块等。
contact.aspx

具有4G通讯功能,多个RS232或RS485接口,以太网接口,USB接口,CAN接口,多个AD输入。基于Android系统智能平台,方便APP应用开发。器件严格选型,运行稳定,质量可靠。
contact.aspx

软件框架的利器、TangramMini组件应用教程三:基本使用
[VC 编程] 2008-04-03



作者:骆归

下载源代码

上篇中我介绍了SetWnd()以及Save()的用法,我相信大家已经知道怎样安装自己的窗口组件了,在这一篇中我将介绍一下TangramMiniCtrl组件的基本方法,以及将Tutorial1对话框程序改造成一个软件的模型。

首先,我们来改造这个对话框程序。因为是个框架程序,所以做为一个对话框我们假设这个对话框要有可改变窗体尺寸的要求,我们先更改窗体属性,显示主对话框的属性对话框(View -> Properties),在Dialog Properties对话框中,进入Styles页,将Border列表中选择Resizing,并将Minimize box以及Maximize box复选框选上,为了防止控件在改变尺寸时闪烁,选上Clip children选项,最终如下图所示:



这样更改之后,对话框就在运行时可以改变尺寸大小了,也可以最大化、最小化,但是我们画上去的TangramMiniCtrl组件并不会同步更改大小,这样我们有必要响应主对话框的确WM_SIZE消息,并在此消息处理过程中改变TangramMiniCtrl组件的尺寸。

首先,响应WM_SIZE消息,在ClassView中,右击主对话框类(CTutorial1Dlg),在右击菜单中选择Add Windows Message Handler…项,在弹出的对话框中,从左边的New Windows messages/events列表中选择WM_SIZE并双击(选择后单击Add Handler也一样),此对话框自动将WM_SIZE消息加入到右边的Existing message/event handlers列表中。然后在右边的列表中双击WM_SIZE项,VC自动转到OnSize(…)函数中,我们在这里加入以下代码:

if (IsWindow(m_wndMiniCtrl.m_hWnd)) { m_wndMiniCtrl.MoveWindow(0,0,cx,cy,false); }
最终代码如下:



加入此代码后,编译运行之后,对话框可以更改大小,TangramMiniCtrl组件相对应的更改尺寸并平铺整个对话框。但是刚启动的时候,TangramMiniCtrl组件并没有更改尺寸,并且上面还有两个按钮,删掉按钮(或者隐藏也可),并在BOOL CTutorial1Dlg::OnInitDialog()函数体中SetWnd()之后加入以下代码:
CRect rt; GetClientRect(&rt); m_wndMiniCtrl.MoveWindow(0,0,rt.Width(),rt.Height(),false);
这样程序一启动就会调节尺寸, 现在尺寸合理了,但是没有退出的地方,我们给对话框加入一个菜单(Insert -> Resource…)在弹出的Insert Resource对话框中,选择Menu,然后单击New按钮,加入一个菜单(IDR_MENU1),我们加入的菜单简单一点,就一个File菜单下有一项Exit项(ID为ID_FILE_EXIT),此Exit项对应的于CTutorial1Dlg类,添加此项的COMMAND消息,处理函数为OnFileExit(),在函数体内加入退出代码(我加入了保存框架的功能):
m_wndMiniCtrl.Save(); CDialog::OnOK();
然后设置主对框资源的菜单为IDR_MENU1,对话框属性中的General页将Menu项设置为IDR_MENU1,最终编译运行效果图如下:



从图上可以看出,现在已经不再是一个简单的对话框了,有了点像软件的模型,但是可能你不喜欢分页名Page1、Page2这样的标题显示,可能要显示点别的,比如我计划第二页放一个About对话框,我们有必要改标题为Main、About之类的名称,我们利用SetCaption方法可以有效的更改标题。
BOOL SetCaption(LPCTSTR strObjName, LPCTSTR strCaption);

该方法有两个参数,第一个参数为Tangram节点对象的名称,第二个参数为我们要设置的新标题,两个参数都为字符串类型,返回布尔型,表示设置是否成功。
为了改变标题,我们继续在BOOL CTutorial1Dlg::OnInitDialog()函数体中加入以下代码:

m_wndMiniCtrl.SetCaption(_T("page1"),_T("Main")); m_wndMiniCtrl.SetCaption(_T("page2"),_T("About"));

加入此两行代码后,分页上的标题将被修改为Main、About。

在这步之后,我新建了一个CAboutDlg对象,并将此对象设置到Page2中,要将一个对话框放在另一个对话框中,最好做一些有必要的风格修改,我将CAboutDlg对话框的风格属性修改结果如下:Style修改为Child,Border修改为None,并将上面的OK按钮设置为不可见,这样是为了防止用户单击此按钮而销毁此窗体。

具体的在page2中安装CAboutDlg的分以下几步:

1、在CTutorial1Dlg定义一个类型为CAboutDlg*的成员变量m_pAboutDlg;

2、分配(new)一新CAboutDlg对象给m_pAboutDlg,并创建对象(Create);

3、安装窗口,利用SetWnd()方法,Tangram节点名称为page2;

4、删除(delete)分配的空间。

具体的代码可以查看源码,我这里就不贴出来了。通过上面的修改后,我们的结果如下:



通过上图,我们可以看出标题已经修改了,而且给第二页添加了对象。

现在新的问题是可能你正在看About页,然后用File菜单中的Exit功能退出程序,由于退出的时候记住了框架,因此程序重新启动的时候还是会显示为About页,可能你认为这样不好,你要求每次启动时都应该显示Main页,那么你就有必要使用一个新的方法SetActive()。

BOOL SetActive(LPCTSTR strObjName);

该方法需要一个参数为Tangram节点对象名称,返回一个布尔值,表示设置是否成功。

我们在BOOL CTutorial1Dlg::OnInitDialog()函数体中加入此语句:

m_wndMiniCtrl.SetActive(_T("page1"));

表示每一次启动程序时默认显示第一页。

好了,这一篇就介绍到这里,主要介绍了两个方法:SetCaption与SetActive,都很方便使用,在下一篇中我将完成一些基本的通信,大家将看到更高级的效果与更好的体验。

[VC 编程添加评论 | 评论/阅读(0/278)
评论
昵称
主页
内容
递交


Copyright @ 我的开发笔记     2008 - 2017         粤ICP备19155526号-1