智能终端定制开发 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组件应用教程六:MDI应用一
[VC 编程] 2008-04-03



作者:骆归

下载源代码

上一篇中我介绍了TangramMini组件在SDI程序中的应用,从这一篇开始我计划写两到三篇关于TangramMini组件在MDI应用程序中的使用,其实在MDI中的应用与SDI中应用创建步骤是一致的。在MDI应用程序中使用了TangramMini组件之后,使应用程序的框架设计更加快捷、简单、易于修改,并且使MDI应用程序有了很强的个性化色彩。

TangramMini组件的安装,请到http://www.tangrammini.com中下载组件安装包并安装。

由于在MDI应用程序中使用TangramMini组件与在SDI中的使用基本上一致,所以下面的说明我也采用了上一篇介绍SDI中应用TangramMini组件文档的原版,只是稍微做一些修改。

首先我们要生成一个普通的MDI程序。启动Microsoft Visual C++ 6.0开发环境,进入主菜单中的File->New,在New对话框,选择Projects页,然后选择MFC AppWizard (exe),在Project name中输入MDI(请注意:这里的MDI是工程名,你也可以随便取个什么名字),然后单击OK按钮,在向导的第一页选择Multiple documents(多文档)类型,然后单击Finish完成单文档程序的创建,你也可以不直接Finish,可以先Next做一些别的修改,然后完成。

由于不是对话框程序,这次我们不能直接在界面上拖入TangramMiniCtrl控件,只能动态创建TangramMiniCtrl控件,在这里我们有两个办法创建TangramMiniCtrl,一个办法当然是直接手工创建;另一个办法就是利用TangramMiniB2C组件创建,因为TangramMiniB2C有辅助创建TangramMiniCtrl的功能,当然要利用TangramMiniB2C组件创建TangramMiniCtrl控件,我们就必须先创建TangramMiniB2C组件。在这里我决定使用第二种办法,就是利用TangramMiniB2C组件创建TangramMiniCtrl控件,因为方法更加简单方便,编码更少。在TangramMini组件安装之后,所带的案例中,这两种创建方法都有相对应的例子,大家也可以自己查看。

为了编码方便,我们直接从安装包的案例源码中找到TangramMini_i.c与TangramMini_i.h两个文件复制到之前新建的MDI工程源码下。搞定之后,我们前期工作准备完毕,开始编码:

1、 打开stdafx.h文件,加入包含头文件语句:

#include "TangramMini_i.c" #include "TangramMini_i.h"

为了编译不出现问题,我这里提醒大家,最好是先包含.c文件,再包含.h文件。

2、 由于需要创建ActiveX组件,所以需要COM支持,在创建TangramMiniB2C组件之前必须调用CoInitialize(NULL)语句。

3、 在CMainFrame类中分别加入成员变量m_pMiniB2C与m_pMiniCtrl,类型分别为ITangramMiniB2C*与ITangramMiniCtrl*类型。

4、 修改CMainFrame类的OnCreate()函数,在函数尾部加入下例代码(也是本篇中最主要的代码):

CoInitialize(NULL); HRESULT hr = CoCreateInstance(CLSID_TangramMiniB2C, NULL, CLSCTX_INPROC_SERVER, IID_ITangramMiniB2C, (LPVOID*)&m_pMiniB2C); if (SUCCEEDED(hr) && (m_pMiniB2C != NULL)) { m_pMiniB2C->put_TargetHandle((LONG)m_hWnd); m_pMiniB2C->get_TangramMiniCtrl(&m_pMiniCtrl); VARIANT_BOOL bSucceed; m_pMiniCtrl->LoadFile(L"test.xtml",&bSucceed); m_pMiniCtrl->SetMDIClient(L"Page1_S0001_S0000",0,3,&bSucceed); }

其中CoInitialize(NULL)为初始化,然后调用CoCreateInstance()函数创建TangramMiniB2C组件并保存在m_pMiniB2C成员变量中,创建TangramMiniB2C组件之后,开始由TangramMiniB2C组件辅助创建TangramMiniCtrl控件,在这里我先说明下一下TangramMiniB2C的TargetHandle与TangramMiniCtrl两个属性,其中TargetHandle表示要创建的TangramMiniCtrl控件的父窗口,这里设置为m_hWnd,表示将TangramMiniCtrl控件创建在主框架窗口上,成为主框架窗口的一个子窗口。TangramMiniB2C的TangramMiniCtrl属性表示为创建后的TangramMiniCtrl控件的引用,在这里我们用get_TangramMiniCtrl(&m_pMiniCtrl)得到创建后的TangramMiniCtrl控件的引用并返回给成员变量m_pMiniCtrl。

得到TangramMiniCtrl控件的引用之后,我们就像之前在对话框程序中使用TangramMiniCtrl控件了,首先调用LoadFile()方法加载框架文件,然后调用SetMDIClient(…)方法安装框架以及客户区。使用SetMDIClient的方法表示将TangramMiniCtrl控件填充当前视图的位置,并将当前MDI客户区平移到名为Page1_S0001_S0000(你也可以用别的有效空白视图名称)的Tangram空白视图区域中。

BOOL SetMDIClient(BSTR strObjName, LONG nMDIHandle, LONG nMDIStyle);

由于TangramMini组件最初的设计目的是针对MDI应用程序而设计的,所以存在这个SetMDIClient方法,此方法存在三个参数,第一个参数就是像其它方法一样,为Tangram空白视图的名称;第二个为MDI客户区窗口句柄,如果为0表示自动匹配MDI客户区,在此案例中,我们也可以设置此参数为m_hWndMDIClient,如果非MDI应用程序,就有必要指定一个有效的窗口句柄;第三个参数为MDI客户区风格,其中nMDIStyle有效值为0、1、2、3四个值,表示四种风格。

经过上面几个简单的步骤之后,最终的效果图如下。这里我直接使用了SDI的案例中的test.xtml框架文件。



上图是已经新建了三个子窗口的效果,由上图可见,TangramMiniCtrl控件填充了整个客户区,其实并不是TangramMiniCtrl控件自动填充了整个客户区,而是因为MDI客户区窗口填充整个客户区,而调用SetMDIClient方法之后,TangramMiniCtrl控件就会自动适应MDI客户区窗口的位置,而且平移MDI客户区窗口到指定的Tangram空白视图位置。并且可以看出在MDI客户区上方有一个Tab分页的效果,这种效果是nMDIStyle(SetMDIClient方法中的第三个参数)值为3的时候效果。

下面是调用SetMDIClient方法时,更改了几个参数之后的效果,语句如下:

m_pMiniCtrl->SetMDIClient(L"Page1_S0000",0,0,&bSucceed);

效果却大不相同,由于第一个参数的Tangram空白视图的名称对象已经改变,所以MDI客户区定位点更改,第三个参数nMDIStyle设置为0,因此MDI客户区上方的Tab分页的风格也有所改变。



第一篇关于在MDI中应用TangramMini组件的文档就写到这里,这一篇中主要介绍了TangramMini组件在MDI中的创建,并没有做实际应用。不过,一些基本的方法,如SetWnd,SetCaption,SetActive等方法我相信大家通过之前几篇文档都已经了解,所以我相信大家到了现在可以自行安装当前例子中的Tangram空白视图的窗口对象了。好了,下一篇我将介绍在MDI程序中TangramMini组件的一些应用。

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


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