CRectTracker 橡皮筋類

2021-07-22 21:36:54 字數 3311 閱讀 2219

crecttracker(俗稱「橡皮筋」類)是乙個非常有意思的類。你在windows中,在桌面上用滑鼠拖拽,便可以看到乙個虛線的矩形框,它便是橡皮筋.它可以用做顯示邊界,你也可以扽它的八個角用來放大縮小,做框選使用。如何通過程式設計來實現這種功能呢?這就是crecttracker類的作用;

介紹橡皮筋類前,先介紹其他兩個類:

(1) 

cpoint 類 或point類,cpoint.x 

cpoint.y,作為螢幕上的座標上的x和y 軸的座標。

(2)crect類,既矩形類。

crect.left 

crect.bottom 

crect.top 

crect.right,

crect::setrect(crect.left, crect.top, crect.right,crect.bottom);

crecttracker 類成員: 一

資料成員:

( 摘自

msdn 2000,

省略了一些 )

1.m_rect

當前橡皮筋矩形的矩形框的位置

2. m_sizemin

決定橡皮筋矩形的最新的長和寬 3.

m_nstyle

橡皮筋矩形的形式如:

crecttracker::solidline

用實線標記矩形框

crecttracker::dottedline

虛線crecttracker::hatchedborder 

影陰線crecttracker::resizeinside 

改變大小的控制代碼在橡皮筋矩形框內部(點在橡皮筋矩形框

裡面來改變大小)

crecttracker::resizeoutside 

改變大小的控制代碼在橡皮筋矩形框外部

crecttracker::hatchinside 

影陰線布滿總個矩形框

二 成員函式:

1.void draw( cdc* pdc ) const;

這個函式用來劃矩形框的邊框和內部區域。

2.void gettruerect( lprect lptruerect ) const;

這個函式用來換回矩形框的 矩形座標,引數為crect型別,返回矩形

3.int hittest( cpoint point ) const;

當你滑鼠被按下的時候,你可以呼叫這個函式,它將返回滑鼠點在了矩形框的什麼位置:可以看出,返回值如果大於等於零則在四邊形區域之內。如果小於則說明不在區域範圍之內。

返回值代表的含義 -1

點在了四邊形的外部 0

左上角 1

右上角 2

右下角 3

左下角(0,1,2,3順時針轉了一圈) 4

頂部 5

右部 6

底部 7

左部(還是順時針轉了一圈) 8

點在了四邊形的內部,但沒有擊中前面的那八個點

4.bool setcursor( cwnd* pwnd, uint nhittest ) const;

呼叫這個函式用來當滑鼠放在矩形框時,顯示各種滑鼠形象

5.bool track( cwnd* pwnd, cpoint point, bool ballowinvert = false, cwnd* pwndclipto = null );

這個函式用來顯示當人們用滑鼠改變矩形框大小 或 拖拽矩形框時顯示矩形框動作

一般由wm_lbuttondown 訊息來觸發這個函式, 不需要編寫mousemove函式,矩形框它就自動的變大小了呢?這就是track()函式的功勞,從呼叫它到抬起滑鼠鍵為止,它時刻的改變四邊形的大小。

6.bool trackrubberband( cwnd* pwnd, cpoint point, bool ballowinvert = true );

當滑鼠在空區域拖拽時顯示橡皮筋矩形框,讓滑鼠畫乙個

「橡皮筋

」區域,第乙個引數,畫「橡皮筋」的窗體的指標,當然是this ,第二個引數,畫「橡皮筋」的起始點。 讓我們注意第三個引數,它非常有意思。當你使用 false時(true 值是預設的),你的「橡皮筋」只能從左上到右下的畫,不允許反向。編譯執行一下false這個值。

特別值得注意的是:在

trackrubberband

的過程中是以右鍵的抬起為結束的,這其間並沒有

cview

的 mousemove

發生。這一點一定要記住!這時滑鼠畫過的區域已經記錄在crecttracker 類資料成員 m_rect裡面了,即crecttracker:: m_rect.

下面我舉乙個自己已經測試的例子:

我要實現的是乙個在控制項上選定一部分的功能。首先,在介面上畫乙個控制項,

id為:

idc_picture

,實現在控制項裡選定某一塊內容的功能,

首先,在過載主介面的

onlbuttondown(滑鼠左鍵點下訊息)函式

crecttracker m_tracker;

m_tracker.m_nstyle=crecttracker::resizeinside|crecttracker::solidline|crecttracker::hitnothing;

void cmrdlg::onlbuttondown(uint nflags, cpoint point) 

//在滑鼠左鍵訊息中響應拖拽

else

//在四邊形區域內:  

if (trect.bottom>prect.bottom)

if (trect.right>prect.right)

if (trect.left

//設定

矩形框大小

m_tracker.m_rect.setrect(trect.left,trect.top,trect.right,trect.bottom);

m_tracker.draw(&dc);

// track()

是 crecttracker

中最富魅力的函式。它時時的改變呼叫者的

m_rect;

clipcursor(null); 

//釋放對滑鼠的限制  }

absrect.left=abs(trect.left-prect.left);

absrect.right=abs(trect.right-prect.right);

absrect.top=abs(trect.top-prect.top);

absrect.bottom=abs(trect.bottom-prect.bottom);

cdialog::onlbuttondown(nflags, point);

}

CRectTracker 橡皮筋 類的使用

crecttracker 俗稱 橡皮筋 類 是乙個非常有意思的類。你在windows中,在桌面上用滑鼠拖拽,便可以看到乙個虛線的矩形框,它便是橡皮筋.它可以用做顯示邊界,你也可以扽它的八個角用來放大縮小,做框選使用。如何通過程式設計來實現這種功能呢?這就是crecttracker類的作用 介紹橡皮筋...

CRectTracker(橡皮筋類)的應用

大家都知道windows自帶的畫圖軟體中可以用虛線框選擇影象的某個區域,之後便可以拖動 放大 縮小該區域,這是怎麼實現的?下面我將為大家介紹橡皮筋類 crecttracker 它將實現用虛線框選中乙個區域,並可以拖動 放大 縮小該區域。1.新建乙個單文件應用程式,命名為crecttracker,完成...

OpenGL 橡皮筋技術

後天圖形學考試,整理了下實驗課上的opengl關於橡皮筋實驗的 簡單實現了如下功能 1.右鍵選單功能響應 2.右鍵選擇畫折線或矩形,可儲存 書上例子演變 3.可選取畫線或畫矩形的顏色,線寬,畫素大小 include include define num 100 折線的最大折線段 int flag 0...