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...