問題情境:
上司對自己的關懷,稱現有的畫圈圈區域不太理想,需要有:
可拖拽移動圓的位置,
滾輪可以控制大小,
邊界也可以通過拖拽調整圓的長軸短軸調整大小。
原理描述:
1.畫形狀容易實現;
2.調整大小通過整個窗體的滑鼠move事件。來進行實時重新整理顯示;
3.拖拽移動位置用mousedown事件和mousemove事件,可以實時監控游標位置;
4.滾輪控制用mousewheel事件,mouseeventargs的delta屬性可控制上下滾;
自己做了個簡單demo例項:
publicform1()
//矩形框座標
private rectangle drawrect = new rectangle(0, 0, 100, 100
);
//滑鼠按下時座標
private point mousedownp = new
point();
//放大倍數
private
int zoom = 0
;
//滑鼠移動矩形框次數,如果移動過矩形框則不從中心放大,以移動後的位置放大縮小,縮小為原大小,縮放數為0時,重置此數
private
int movecount = 0
;
private
void this_mousewheel(object
sender, mouseeventargs e)
else
//下滾縮小
//放大原理
//1、先獲取放大倍數
//2、根據放大倍數,計算矩形框高度,高度=控制項高度-倍數×2;
//3、根據高度,提取矩形寬度,寬度=高度×(控制項寬度/控制項高度),為保證矩形和原控制項縱橫比例,所以要乘以比例
//4、根據矩形框大小,和控制項大小,計算矩形框在控制項中的位置,即x,y座標
//1)如果沒有拖動過矩形,則按預設中間位置取值,x=(控制項寬度-矩形寬度)/2,y=(控制項高度-矩形高度)/2
//2)如果拖動過矩形框,則原x,y座標不變化
//5、根據得到的新矩形框的座標和範圍,判斷是否超界,判斷xy座標
//滾輪放大事件
//矩形區域高度=控制項高度-放大縮小倍數*2
double ratio = math.round(drawrect.width / (drawrect.height * 1.0) , 2
); drawrect.height = drawrect.height - inctemp * 2
;
//按比例計算寬度
drawrect.width = (int)(convert.tosingle(drawrect.height) *ratio);
//if (movecount == 0)
//沒有拖動過,滾動滾輪才按中間放大縮小
//
//***************判斷是否超界===============
//如果right超過控制項寬度
if (drawrect.right > this
.width)
//如果bottom超過控制項高度
if (drawrect.bottom > this.height - 20
)
drawimg();
}int cursorflag = 0
;
private
void this_mousemove(object
sender, mouseeventargs e)
drawrect.width += drawrect.x -e.x;
drawrect.x =e.x;
break
;
case
2://
right
if (e.x - drawrect.x drawrect.width = e.x -drawrect.x;
break
;
case
3://
top
if (drawrect.height + drawrect.y - e.y drawrect.height += drawrect.y -e.y;
drawrect.y =e.y;
break
;
case
4://
bottom
if (e.y - drawrect.y drawrect.height = e.y -drawrect.y;
break
; }
drawimg();
}else}}
else
else
if ((e.x >= drawrect.x + drawrect.width + 1 && e.x <= drawrect.x + drawrect.width +boundary)
&& e.y >= drawrect.y && e.y <= drawrect.y + drawrect.height)//
right
else
if ((e.y <= drawrect.y - 1 && e.y >= drawrect.y -boundary)
&& e.x > drawrect.x && e.x < drawrect.x + drawrect.width)//
top
else
if ((e.y >= drawrect.y + drawrect.height + 1 && e.y <= drawrect.y + drawrect.height +boundary)
&& e.x > drawrect.x && e.x < drawrect.x + drawrect.width)//
bottom
else}}
private
void this_mousedown(object
sender, mouseeventargs e)
void
drawimg()
}private
void log(string
text)
private
void form1_paint(object
sender, painteventargs e)
C GDI畫圓及填充
用c 畫圓的時候不知大家遇到沒有遇到過這樣的問題,就是畫過圓以後,矩形的四角輪廓還是存在的,讓人感覺不夠完美,就如下圖所示 我畫的這個是基於自定義控制項的,宣告類以後繼承control類,然後在這個類中重寫onpaint的事件,完成上圖所需要的 protected override void onp...
調整視窗大小
getwindowrect lprect getclientrect lprect screentoclient lprect movewindow lprect 注 這裡四個函式的引數既可以是crect,也可以是crect cwnd getwindowrect 的作用是獲取cwnd 視窗的座標位置...
quark mail 調整大小
usr bin perl w use strict use mime base64 set environment my domain shift or die usage 0 domain n die error illegal domain n if domain get domain head...