




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
三 第五課窗口單元終結(jié) 二.邊 四.關(guān)于 歸袁曉輝所有,如需請注明:作者:袁曉輝都可以寫的!下面是我學(xué)習(xí)編寫支持庫的一些心得體會,現(xiàn)在拿出來和大家。LIB_INFOMFCDllCwinAppChtmlViewAppDll的主類,HtmlView.defDll的對外接口――GetNewInf()函數(shù)。FileViewHtmlView.def文件,把光標(biāo)放到該函F1(Definition文件中。但我們發(fā)現(xiàn)這個函數(shù)并沒有做太多的事情,只是簡單地返回了一個static變量s_LibInfoLIB_INFO(這////////////////////////staticLIB_INFOs_LibInfo{/*LibFormat ////本支持庫的GUID/*guid_T}/*m_nDataTypeCount*//*m_nDataTypeCount*/sizeof(s_DataType)/sizeof {{{{ sizeof(s_nHtmlViewerElementCmdIndex)/ ( 應(yīng)該比較眼熟吧?先是屬性個數(shù),然后是屬性的具體定義。我們找到g_HtmlViewerProperty的定義,又是一個數(shù)組,數(shù)組的各個元素依次說明該窗口單元的各個{_WT("最小\0較小\0中等\0較大\0最大} m_wState是用于說明該屬性在易語言“屬性”窗口顯示時是否縮近(,“tech.txtNULL。 _WT(" _WT("最小\0較小\0中等\0較大\0最大看完了屬性,我們按熱鍵Ctrl+Num*或Browse工具條上點(diǎn)“Popcontext”回到找到g_HtmlViewerEvent的定義,同樣是數(shù)組,每個元素說明一個的名稱、描述、tech.txt。//!!! {? (PFN_INTERFACE)GetAllPropertyData_HtmlViewer: (PFN_INTERFACE)GetPropertyData_HtmlViewer:}用了一系列的“?:INTnInterfaceNO的不同值,返回不同的函數(shù)指針,比如當(dāng)接收TF_CREATE_UNIT(即創(chuàng)建單元)消息時,就返回Create_HtmlViewer函數(shù)的指針……有了大概的了解,我們還是更深入一步吧,找到Create_HtmlViewer的定義,看其代碼,我們的疑惑就全然冰釋了,原來窗口創(chuàng)建時易語言最后來看看窗口單元所屬令是如何實現(xiàn)的。經(jīng)過多次的“popcontext”我們來到s_LibInfo的定義出,即//////////////////////staticLIB_INFOs_LibInfo}sizeof(s_CmdInfo)/sizeof(s_CmdInfo (不是全局命令(比如“到文本(。但具體屬于哪個窗口單元,看下面:s_RunFuncPFN_EXECUTE_CMDPFN_EXECUTE_CMDs_RunFunc //s_CmdInfo應(yīng){(fnNavigate//索引應(yīng)與s_CmdInfo中令定義順序?qū)Γ╢nExecute為例switch語句對參數(shù)進(jìn)行了分檢,對應(yīng)于易語言中對pUnitGoForwardGoForward()CHHCtrl的成員{CHHCtrlm_pBrowserApp的GoForward()m_pBrowserApCHHCtrl*pUnit=(CHHCtrl*)GetWndPtrCHHCtrl*pUnit=(CHHCtrl*)GetWndPtrclassCHHCtrl:classCHHCtrl:public{}CWnd繼承下來,protectedIWebBrowser2protected成員的類——CHHCtrl↓↓↓CWnd繼承來一個類,在這個類中實現(xiàn)窗口單元的功能,然后定義該窗口單元的所屬命令、屬性列表、列表、完成對外接口……步,選擇“RagularDLLwithMFCstaticallylinkendFish,生成工程?!癏tmliew)找到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*/ // //類別說明表每項為一字符串,前四位數(shù)字表示圖象索引號(從1開始,0無). 0,//sizeof(s_CmdInfo)/sizeof(s_CmdInfo //用作為易語言IDE提供附加功 0,//sizeof(s_ConstInfo)/sizeof(s_ConstInfo ///本庫正常運(yùn)行所需要依賴的其他文件, 如果此時你編譯這個工程的話,一定會遇到一堆的編譯錯誤,原因就是有一個宏“_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后編譯,F(xiàn)irstLib.dll到易語言的Lib命令下,改名。打開易語言,在“工作夾”中LIB_INFOs_LibInfo持庫的一切最重要的、最基本的信息。然后需要一個GetNewInf的函數(shù)來對外輸出這個結(jié)構(gòu)變量。易語言編程環(huán)境(IDE)在啟動時會查找易語言的Lib下所有fne(LIB_INFO一個結(jié)構(gòu),在lib.h里定義,關(guān)于這個結(jié)構(gòu)的詳細(xì)解釋請參看libdoc 的tech.txt文件,我建議你把這個文件打印出來,看著方便)最后:告你一點(diǎn)技巧,可以打開VC的rojet菜單->Settins找到Link”頁,把“Ouputfilename改為你易語言lib 的路徑“FirstLb.fne比如在我這里就“D:e3.5\li\FistLb.fne然你譯這個工時生成的dl文件會自動出現(xiàn)在語言的lb ,并以fe后綴尾你只要打易語言可以看效果了不用每次編譯后都““改名,很方便的哦但是要記住在每次編譯前一定要關(guān)掉易語言哦,則是無編譯的。tech.txt(別告
HtmlView工程。Let’sGo!! 0,//sizeof(s_ConstInfo)/sizeof(s_ConstInfo 0,//sizeof(s_ConstInfo)/sizeof(s_ConstInfo (pLibConstPLIB_CONST_INFO結(jié)構(gòu)的指針,比如我們要定義兩個常量,一個是整數(shù)型,100(LIB_CONST_INFOs_ConstInfo[]{,"s_LibInfo初始化代碼中相關(guān)代碼改為如下(0NULL去掉 sizeof(s_ConstInfo)/sizeof(s_ConstInfo 此刻你最關(guān)心的可能是LIB_CONST_INFO各個元素的含義吧?我們分析一下,s_ConstInfo數(shù)組共有兩個成員(內(nèi)部的兩個花括號7個元素定義一個常量。7個元素的意義如下:前三個元素分別代表該常量的名稱、英文名稱和詳細(xì)解釋,LPTSTR類型的,如果沒有支持用到的字符串要用“_WT()”宏包起來,這樣會為以后編譯fnr版本提供方便。第四個必須為“LVL_SIMPLE1。第五個指明該常量的類型,可以為如下常量(均在指定(邏輯值按數(shù)值型對待,1代表真,0代表假。如果覺得不好理解,就把支持的定義信息與易語言IDE中顯示的信息反復(fù)對比,記得在易語壇上有人曾問我如何把API函數(shù)中使用的“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("橫坐標(biāo)"), _WT("代表一個點(diǎn)的橫坐標(biāo) _WT("縱坐標(biāo)"),_WT("y"), staticLIB_DATA_TYPE_INFOs_DataType[]{{ sizeof(s_nHtmlViewerElementCmdIndex我們先看 第一個為該數(shù)據(jù)成員的類型,SDT_INTlib.hSDT第二個只有在類型為數(shù)組時有效,具體格式參看tech.txt。對于我們這個例子來NULL。LES_HAS_DEFAULT_VALUENULL00NULL。NULL)s_LibInfo初始化代碼中的相關(guān)代POINT在支持庫中生效!/*type sizeof(s_DataType)/sizeof ARG_INFOs_ArgInfo[]{{/*name*/_WT("參數(shù) ARG_INFOs_ArgInfo[]{{/*name*/_WT("參數(shù) /*bmp /*bmpnum*//*type*/MAKELONG(1,0),// /*state*/staticCMD_INFOs_CmdInfo[]{{ /*state*/ /*level*//*bmp /*bmpnum*//*arglp*/s_ArgInfo[]的定義,這個數(shù)組順序定義了本支持庫中所有命令的參數(shù)信息。打31,0,3s_ArgInfo[]數(shù)組就0。MAKELONG(2,0)是沒有意義的。AS_RECEIVE_VAR表示該參數(shù)必須 /*bmp /*bmpnum*/0,代表顯示時使用默認(rèn)/*arglp*/s_ArgInfo,指定參數(shù)個數(shù)及參數(shù)的定義。注意,如果該命令不是第一個命令,則這里要用&s_ArgInfo[n],n為該命令以前所有命令使用的參數(shù)個數(shù)總和-1。/*CategoryCount*/ ///*category*/_WT("0000類別一"http://類別說明表每項為一字符串, sizeof(s_CmdInfo)/sizeof(s_CmdInfo /*CategoryCount*//*category*/_WT("0000類別一\0"),{}:{ ////一個POINT類型指針pPOINT*pPOINT*)*(pArgInf[0]poundData)pRetData->m_bool=}PFN_EXECUTE_CMDs_RunFunc[] //索引應(yīng)與s_CmdInfo {{其實這里的fn1完全可以換為其他名稱,只要兩個地方一致就可以了。 讓我們定義令實現(xiàn)代碼與相應(yīng)令結(jié)合起來。編譯。這個時候你就可以打開易語 個自定義數(shù)據(jù)類型、封裝了一個API函數(shù)(全局命令。常量相對簡單,自定義數(shù)據(jù)類型和LIB_INFOGetNewInfCMD_INFOARG_INFO指CMD_INFO數(shù)組的指針和命令實現(xiàn)函數(shù)表的指針一起賦值給庫定義LIB_INFO中的tech.txt,于是就放棄了,改成寫窗口單元。如果你對全局命令的編寫還有什么疑問請tech.txt打印出來。雖50多頁(A4紙)要花不少的銀子,但立志為易語言做貢獻(xiàn)的朋友還是破點(diǎn)費(fèi)吧,說不定(MFCCWnd也為一些IT作家提供了謀生的,比如的侯sir就靠分析MFC的書賺了不少錢MFC{ { 1、m_dwStateLDT_WIN_UNIT,說明它是一個窗口單元而非普通數(shù)據(jù)類型;同m_nElementCountm_pElementBegin自動失效。2、m_dwUnitBmpIDIDB_BITMAP_HOTKEYBOX,BMPID,該位圖用于在易語言窗口單元箱中顯示,代表該窗口單元。我是直接從VC中抓屏得來的,,背景顏色MFCCWndCWnd繼承一個類出來吧。我們VC++6.0CHotKey(CWnd的一個繼承類)CMyHotKey(這叫“QQ參數(shù)設(shè)置”窗口里就有一個熱鍵框,我們今天就是要讓易語言寫的程序也能具有類似ClassWizardMFCCMyHotKey,BaseClass選CHotKey,其他默認(rèn)就DWORDm_dwWinFormID,m_dwUnitID,和一個BOOLm_blInDesignModepublic。前兩個用作在易語言中通知系統(tǒng),最后一個用于標(biāo)識當(dāng)前所處環(huán)境是易語言的設(shè)計模式(就是在易語言IDE中設(shè)計窗口和編寫m_pfnGetInterface,它的作用就是向易語言編程環(huán)境創(chuàng)建和初始化工作。具體代碼如下(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;}當(dāng)然編譯前要在MyHotKey.cpp中l(wèi)ib.h并對NotifySys進(jìn)行如下INTWINAPINotifySys(INTnMsg,DWORDdram1,DWORDdram2=在創(chuàng)建它是為它指定了固定的位置(RECTrect={10,0,200,50},并沒有按照你的“指揮”因為還有些工作要做。不過只要你把這一次的例子搞清楚了,這些都是小case啦。下次解VC的不多吧,也可能是我太高估了自己的能力,也許像VC編程這類話題(寫易語言支持庫其實就是用VC編程)不是我等業(yè)余者所能勝任的。但是不管如何,我還是決定看過我上一篇文章的朋友一定注意到了這個支持庫雖然實現(xiàn)了一個窗口單元——熱鍵其實,解決這個問題是非常簡單的,只要打開MyHotKey.cpp文件,找到Create_HotKeyBox函數(shù),RECTrect={10,10,200,50};1.=10”是{ (g_HotKeyBoxProperty[0]);FIXED_WIN_UNIT_PROPERTYMyHotBox.cpp文件中){{1.1.=((1.左邊{ { 式UD_PICK_INT指定該屬性為整數(shù)型,并且只允許用戶從列表中選擇,不能編輯。_WT("_WT("無邊框\0凹入式\0凸出式\0淺凹入式\0鏡框式\0單線邊框式(\0\0為了和管理我們添加的屬性——邊框,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- T-ZHHX 004-2024 粉苞酸腳桿盆花生產(chǎn)技術(shù)規(guī)范
- 二零二五年度員工宿舍入住與退宿手續(xù)協(xié)議
- 2025年度水利工程監(jiān)理工程師合同管理與可持續(xù)發(fā)展
- 二零二五年度商鋪經(jīng)營權(quán)放棄及轉(zhuǎn)讓協(xié)議書
- 二零二五年度酒吧租賃合同書
- 2025年度潤滑油行業(yè)年度銷售排行榜合作合同
- 2025年度機(jī)關(guān)單位食堂餐飲培訓(xùn)與咨詢服務(wù)合同
- 二零二五年度夫妻婚內(nèi)財產(chǎn)約定及家庭財務(wù)顧問服務(wù)協(xié)議
- 二零二五年度智慧城市項目實施團(tuán)隊勞動合同
- 二零二五年度企業(yè)稅收籌劃與稅務(wù)籌劃培訓(xùn)與實施合同
- 《智能家居系統(tǒng)》課件
- 基礎(chǔ)模塊下冊《中國人民站起來了》2
- 繼電保護(hù)業(yè)務(wù)技能實操題庫
- 個人理財(第三版)第01章導(dǎo)論
- 鉆機(jī)交接班記錄表
- 全國初中數(shù)學(xué)聯(lián)賽試題30套
- IATF16949質(zhì)量體系基礎(chǔ)知識培訓(xùn)
- 內(nèi)科學(xué)-高血壓病
- 廣州預(yù)拌混凝土行業(yè)發(fā)展專項規(guī)劃
- 【教案】 人民音樂家 教案高中人音版(2019)必修《音樂鑒賞》
- 河南省中等職業(yè)教育技能大賽組委會辦公室
評論
0/150
提交評論