




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
三 第五课窗口单元终结 二.边 四.关于 归袁晓辉所有,如需请注明:作者:袁晓辉都可以写的!下面是我学习编写支持库的一些心得体会,现在拿出来和大家。LIB_INFOMFCDllCwinAppChtmlViewAppDll的主类,HtmlView.defDll的对外接口――GetNewInf()函数。FileViewHtmlView.def文件,把光标放到该函F1(Definition文件中。但我们发现这个函数并没有做太多的事情,只是简单地返回了一个static变量s_LibInfoLIB_INFO(这////////////////////////staticLIB_INFOs_LibInfo{/*LibFormat ////本支持库的GUID/*guid_T}/*m_nDataTypeCount*//*m_nDataTypeCount*/sizeof(s_DataType)/sizeof {{{{ sizeof(s_nHtmlViewerElementCmdIndex)/ ( 应该比较眼熟吧?先是属性个数,然后是属性的具体定义。我们找到g_HtmlViewerProperty的定义,又是一个数组,数组的各个元素依次说明该窗口单元的各个{_WT("最小\0较小\0中等\0较大\0最大} m_wState是用于说明该属性在易语言“属性”窗口显示时是否缩近(,“tech.txtNULL。 _WT(" _WT("最小\0较小\0中等\0较大\0最大看完了属性,我们按热键Ctrl+Num*或Browse工具条上点“Popcontext”回到找到g_HtmlViewerEvent的定义,同样是数组,每个元素说明一个的名称、描述、tech.txt。//!!! {? (PFN_INTERFACE)GetAllPropertyData_HtmlViewer: (PFN_INTERFACE)GetPropertyData_HtmlViewer:}用了一系列的“?:INTnInterfaceNO的不同值,返回不同的函数指针,比如当接收TF_CREATE_UNIT(即创建单元)消息时,就返回Create_HtmlViewer函数的指针……有了大概的了解,我们还是更深入一步吧,找到Create_HtmlViewer的定义,看其代码,我们的疑惑就全然冰释了,原来窗口创建时易语言最后来看看窗口单元所属令是如何实现的。经过多次的“popcontext”我们来到s_LibInfo的定义出,即//////////////////////staticLIB_INFOs_LibInfo}sizeof(s_CmdInfo)/sizeof(s_CmdInfo (不是全局命令(比如“到文本(。但具体属于哪个窗口单元,看下面:s_RunFuncPFN_EXECUTE_CMDPFN_EXECUTE_CMDs_RunFunc //s_CmdInfo应{(fnNavigate//索引应与s_CmdInfo中令定义顺序对(fnExecute为例switch语句对参数进行了分检,对应于易语言中对pUnitGoForwardGoForward()CHHCtrl的成员{CHHCtrlm_pBrowserApp的GoForward()m_pBrowserApCHHCtrl*pUnit=(CHHCtrl*)GetWndPtrCHHCtrl*pUnit=(CHHCtrl*)GetWndPtrclassCHHCtrl:classCHHCtrl:public{}CWnd继承下来,protectedIWebBrowser2protected成员的类——CHHCtrl↓↓↓CWnd继承来一个类,在这个类中实现窗口单元的功能,然后定义该窗口单元的所属命令、属性列表、列表、完成对外接口……步,选择“RagularDLLwithMFCstaticallylinkendFish,生成工程。“Htmliew)找到Lib.h,拷贝至你的“FistLib”工程所 吧,打开FirstLib工程中的“FirstLib.cpp,加入对lib.h的:#include"lib.h"(Htmliew////////////////////////staticLIB_INFOs_LibInfo//The//TheoneandonlyCFistLibAppobjectCFistLibApptheApp;////////////////////////staticLIB_INFOs_LibInfo{/*LibFormat // 号码/*guid_T /*m_nRqSysKrnlLibMinorVer*/_T我的第一个支持库 ,eah"),/*szAuthor*/_WT("海洋/*szAddress*/ /*type 0,//sizeof(s_DataType)/sizeof /*CategoryCount*/ // //类别说明表每项为一字符串,前四位数字表示图象索引号(从1开始,0无). 0,//sizeof(s_CmdInfo)/sizeof(s_CmdInfo //用作为易语言IDE提供附加功 0,//sizeof(s_ConstInfo)/sizeof(s_ConstInfo ///本库正常运行所需要依赖的其他文件, 如果此时你编译这个工程的话,一定会遇到一堆的编译错误,原因就是有一个宏“_WT()”没有定义,一个“ProcessNotifyLib//HTMLVIEW_FNR_RELEASE//HTMLVIEW_FNR_RELEASEINTWINAPIProcessNotifyLibINTWINAPIProcessNotifyLib(INTnMsg,DWORDdram1,DWORDINTg_nLastNotifyResult;PFN_NOTIFY_SYSg_fnNotifySys=INTWINAPINotifySys(INTnMsg,DWORD//#includeram1,DWORDPLIB_INFOWINAPIGetNewInfPLIB_INFOWINAPIGetNewInf{return}”改为“GetNewInf后编译,FirstLib.dll到易语言的Lib命令下,改名。打开易语言,在“工作夹”中LIB_INFOs_LibInfo持库的一切最重要的、最基本的信息。然后需要一个GetNewInf的函数来对外输出这个结构变量。易语言编程环境(IDE)在启动时会查找易语言的Lib下所有fne(LIB_INFO一个结构,在lib.h里定义,关于这个结构的详细解释请参看libdoc 的tech.txt文件,我建议你把这个文件打印出来,看着方便)最后:告你一点技巧,可以打开VC的rojet菜单->Settins找到Link”页,把“Ouputfilename改为你易语言lib 的路径“FirstLb.fne比如在我这里就“D:e3.5\li\FistLb.fne然你译这个工时生成的dl文件会自动出现在语言的lb ,并以fe后缀尾你只要打易语言可以看效果了不用每次编译后都““改名,很方便的哦但是要记住在每次编译前一定要关掉易语言哦,则是无编译的。tech.txt(别告
HtmlView工程。Let’sGo!! 0,//sizeof(s_ConstInfo)/sizeof(s_ConstInfo 0,//sizeof(s_ConstInfo)/sizeof(s_ConstInfo (pLibConstPLIB_CONST_INFO结构的指针,比如我们要定义两个常量,一个是整数型,100(LIB_CONST_INFOs_ConstInfo[]{,"s_LibInfo初始化代码中相关代码改为如下(0NULL去掉 sizeof(s_ConstInfo)/sizeof(s_ConstInfo 此刻你最关心的可能是LIB_CONST_INFO各个元素的含义吧?我们分析一下,s_ConstInfo数组共有两个成员(内部的两个花括号7个元素定义一个常量。7个元素的意义如下:前三个元素分别代表该常量的名称、英文名称和详细解释,LPTSTR类型的,如果没有支持用到的字符串要用“_WT()”宏包起来,这样会为以后编译fnr版本提供方便。第四个必须为“LVL_SIMPLE1。第五个指明该常量的类型,可以为如下常量(均在指定(逻辑值按数值型对待,1代表真,0代表假。如果觉得不好理解,就把支持的定义信息与易语言IDE中显示的信息反复对比,记得在易语坛上有人曾问我如何把API函数中使用的“POINT”类型和使用该类typedefstructtagPOINT{LONGx;LONGtypedefstructtagPOINT{LONGx;LONG}FirstLib.cpps_LibInfo/*type0,//sizeof(s_DataType)/sizeof/*PLIB_DATA_TYPE_INFO*/s_DataType(HtmlViews_LibInfo:staticLIB_DATA_TYPE_ELEMENT ement[]{ _WT("横坐标"), _WT("代表一个点的横坐标 _WT("纵坐标"),_WT("y"), staticLIB_DATA_TYPE_INFOs_DataType[]{{ sizeof(s_nHtmlViewerElementCmdIndex我们先看 第一个为该数据成员的类型,SDT_INTlib.hSDT第二个只有在类型为数组时有效,具体格式参看tech.txt。对于我们这个例子来NULL。LES_HAS_DEFAULT_VALUENULL00NULL。NULL)s_LibInfo初始化代码中的相关代POINT在支持库中生效!/*type sizeof(s_DataType)/sizeof ARG_INFOs_ArgInfo[]{{/*name*/_WT("参数 ARG_INFOs_ArgInfo[]{{/*name*/_WT("参数 /*bmp /*bmpnum*//*type*/MAKELONG(1,0),// /*state*/staticCMD_INFOs_CmdInfo[]{{ /*state*/ /*level*//*bmp /*bmpnum*//*arglp*/s_ArgInfo[]的定义,这个数组顺序定义了本支持库中所有命令的参数信息。打31,0,3s_ArgInfo[]数组就0。MAKELONG(2,0)是没有意义的。AS_RECEIVE_VAR表示该参数必须 /*bmp /*bmpnum*/0,代表显示时使用默认/*arglp*/s_ArgInfo,指定参数个数及参数的定义。注意,如果该命令不是第一个命令,则这里要用&s_ArgInfo[n],n为该命令以前所有命令使用的参数个数总和-1。/*CategoryCount*/ ///*category*/_WT("0000类别一"//类别说明表每项为一字符串, sizeof(s_CmdInfo)/sizeof(s_CmdInfo /*CategoryCount*//*category*/_WT("0000类别一\0"),{}:{ ////一个POINT类型指针pPOINT*pPOINT*)*(pArgInf[0]poundData)pRetData->m_bool=}PFN_EXECUTE_CMDs_RunFunc[] //索引应与s_CmdInfo {{其实这里的fn1完全可以换为其他名称,只要两个地方一致就可以了。 让我们定义令实现代码与相应令结合起来。编译。这个时候你就可以打开易语 个自定义数据类型、封装了一个API函数(全局命令。常量相对简单,自定义数据类型和LIB_INFOGetNewInfCMD_INFOARG_INFO指CMD_INFO数组的指针和命令实现函数表的指针一起赋值给库定义LIB_INFO中的tech.txt,于是就放弃了,改成写窗口单元。如果你对全局命令的编写还有什么疑问请tech.txt打印出来。虽50多页(A4纸)要花不少的银子,但立志为易语言做贡献的朋友还是破点费吧,说不定(MFCCWnd也为一些IT作家提供了谋生的,比如的侯sir就靠分析MFC的书赚了不少钱MFC{ { 1、m_dwStateLDT_WIN_UNIT,说明它是一个窗口单元而非普通数据类型;同m_nElementCountm_pElementBegin自动失效。2、m_dwUnitBmpIDIDB_BITMAP_HOTKEYBOX,BMPID,该位图用于在易语言窗口单元箱中显示,代表该窗口单元。我是直接从VC中抓屏得来的,,背景颜色MFCCWndCWnd继承一个类出来吧。我们VC++6.0CHotKey(CWnd的一个继承类)CMyHotKey(这叫“QQ参数设置”窗口里就有一个热键框,我们今天就是要让易语言写的程序也能具有类似ClassWizardMFCCMyHotKey,BaseClass选CHotKey,其他默认就DWORDm_dwWinFormID,m_dwUnitID,和一个BOOLm_blInDesignModepublic。前两个用作在易语言中通知系统,最后一个用于标识当前所处环境是易语言的设计模式(就是在易语言IDE中设计窗口和编写m_pfnGetInterface,它的作用就是向易语言编程环境创建和初始化工作。具体代码如下(MyHotKey.cpp中://CMyHotKeymessageHUNITWINAPICreate_HotKeyBox(LPBYTEpAllData,INT DWORDdwStyle,HWNDhParentWnd,UINTuID,H h ,INTx,INTy,INTcx,INTcy, { CMyHotKey*pUnit=new /*if(pUnit->m_info.LoadData(pAllData,nAllDataSize)== delete return pUnit->m_dwUnitID= pUnit->m_blInDesignMode= dwStyle|= RECT if(pUnit- return return}{ }}请注意,要在FirstLib.cpp中增加如下头文件:#include"MyHotKey.h",在只是我并不建议你这么做,因为我们还没有为这个窗口单元写释放代码(GetInterface_HotKeyBox()里的new了吗?要delete的。为CMyHotKey类添加voidvoid{deletethis;}当然编译前要在MyHotKey.cpp中lib.h并对NotifySys进行如下INTWINAPINotifySys(INTnMsg,DWORDdram1,DWORDdram2=在创建它是为它指定了固定的位置(RECTrect={10,0,200,50},并没有按照你的“指挥”因为还有些工作要做。不过只要你把这一次的例子搞清楚了,这些都是小case啦。下次解VC的不多吧,也可能是我太高估了自己的能力,也许像VC编程这类话题(写易语言支持库其实就是用VC编程)不是我等业余者所能胜任的。但是不管如何,我还是决定看过我上一篇文章的朋友一定注意到了这个支持库虽然实现了一个窗口单元——热键其实,解决这个问题是非常简单的,只要打开MyHotKey.cpp文件,找到Create_HotKeyBox函数,RECTrect={10,10,200,50};1.=10”是{ (g_HotKeyBoxProperty[0]);FIXED_WIN_UNIT_PROPERTYMyHotBox.cpp文件中){{1.1.=((1.左边{ { 式UD_PICK_INT指定该属性为整数型,并且只允许用户从列表中选择,不能编辑。_WT("_WT("无边框\0凹入式\0凸出式\0浅凹入式\0镜框式\0单线边框式(\0\0为了和管理我们添加的属性——边框,
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 台阶坡道改建方案范本
- 审计部门年度工作总结
- 情志护理与养生
- 单招综评政策解读
- 教官培训工作述职报告
- 2026届福建省龙岩市北城中学英语九年级第一学期期末调研试题含解析
- 早教教师述职报告
- 新人销售技巧培训
- 2026届四川省成都西蜀实验英语九上期末学业质量监测试题含解析
- 江苏省徐州市市区部分2026届化学九年级第一学期期中学业水平测试试题含解析
- 2025-2030滑雪培训行业市场发展分析及前景趋势预测与投资可行性评估报告
- 课堂高效学习的主阵地 教学设计-2023-2024学年高中上学期主题班会
- 2025年放射工作人员培训考试试题(附答案)
- 高考熟词生义解密(复习讲义)-2026年高考英语一轮复习(北京专用)挖空版
- 2025年北京市中考英语试卷(含答案与解析)
- 浙江名校协作体(G12)2025年9月2026届高三返校联考英语(含答案)
- 2025年环保法律法规基础知识考试卷及答案
- 2026届新人教版高考物理一轮复习讲义:静电场及其应用(含答案)
- 检测基础知识培训课件
- 采购管理大师谢勤龙讲义《供应链管理的问题多多与解决之道》
- 国企招聘笔试题及答案-投资专员、投资经理B卷
评论
0/150
提交评论