vcl中dragdrop功能的底層實現(xiàn)_第1頁
已閱讀1頁,還剩13頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、VCL中Drag功能的底層實現(xiàn)前段時間在論壇里看了一篇關于剖析VCL結(jié)構(gòu)的文件,其中不少高手的開懷暢談讓小輩們心里感覺非常的痛快!看完余又覺得不能光看,也該將自己的心得拿出來與大家分享,于是就邊夜翻看VCL源碼,終于將VCL如何實現(xiàn)Drag功能的過程弄個“基本明白”,其中可能會有不當之處,再加上小弟的文學水平也只是初中畢業(yè),有些地方也許會表達不當,但其意思也基本上八九不離十了,故也請大家開懷暢言、批評指正,都是為了進步嘛!哈哈……雖然D

2、ragDock操作與Drag操作是密切相關,并且很大一部分操作是相同的,但本文暫且不討論與DragDock有關的部分,留待下回分解或也給大家表現(xiàn)表現(xiàn)………………一、與Drag操作相關的屬性、事件、函數(shù)VCL的Drag功能是在TControl類中現(xiàn)的,因此所有從TControl類派生出來的控件類者繼承了這些屬性、事件和函數(shù),包括:屬性:DragCurs:Drag時的鼠標類型:(TCurs)DragKind:Drag的類型:(dkDragd

3、kDock)DragMode:Drag的方式:手動(dmManual)或自動(dmAutomatic)事件:OnStartDrag:Drag開始事件;OnDragOver:Drag經(jīng)過某個控件;OnDrag:Drag到某個控件并放開;OnEndDrag:Drag動作結(jié)束;函數(shù):BeginDrag:開始控件的Drag動作;Dragging:返回控件是否正被Dragging;CancelDrag:取消正在執(zhí)行的Drag操作;EndDrag:

4、結(jié)束正在執(zhí)行的Drag操作,與CancelDrag不同,EndDrag允許操作指定是否產(chǎn)生操作(由參數(shù)決定)。此外還有一些與Drag相關的函數(shù),在隨后的介紹中將逐一說明。二、Drag操作產(chǎn)生與執(zhí)行的過程1、自動產(chǎn)生過程。我們知道在控件上單擊鼠標左鍵時便會產(chǎn)生WM_LBUTTONDOWN消息,TControl類的WinProc消息處理方法捕捉到該消息時,便判斷控件的DragMode是否為dmAutomatic,即是否自動執(zhí)行Drag操作,

5、如果是則調(diào)用類保護函數(shù)BeginAutoDrag,立即進入分析前請先留意在Controls單元中聲明的幾個全局變量:varDragControl:TControl被Drag的控件DragObject:TDragObject管理整個Drag過程的TDragObject對象DragInternalObject:BooleanTDragObject對象是否由內(nèi)部創(chuàng)建DragCapture:HWND管理Drag過程的Wnd實例句柄DragSta

6、rtPos:TPointDrag開始時的鼠標位置DragSaveCurs:HCURSDrag開始的的鼠標類型DragThreshold:IntegerDrag操作延遲位置ActiveDrag:TDragOperation正在執(zhí)行的Drag操作:(dopNonedopDragdopDock)DragImageList:TDragImageListDrag過程中代替鼠標顯示的圖像列表BeginDrag的函數(shù)原型聲明為:procedureBe

7、ginDrag(Immediate:BooleanThreshold:Integer=1)參數(shù):Immediate:是否直接進入Drag狀態(tài);Threshold:若Immediate參數(shù)為False,當鼠標移動量超過Threshold給出的值時進入Drag狀態(tài);且先看其實現(xiàn)代碼:procedureTControl.BeginDrag(Immediate:BooleanThreshold:Integer)varP:TPointbeginD

8、rag操作的對象不允許是窗體if(SelfisTCustomFm)(FDragKinddkDock)thenraiseEInvalidOperation.CreateRes(@SCannotDragFm)前面提過暫且不討論DragDock相關部分,所以對CalcDockSizes的函數(shù)調(diào)用不作分析。CalcDockSizesDragControl不為nil或Pointer($FFFFFFFF)說明已經(jīng)進入了Drag狀態(tài)這里的判斷避免了遞

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論