c GDI 畫圓,可以調整大小等功能

2022-01-17 07:08:30 字數 3406 閱讀 9950

問題情境:

上司對自己的關懷,稱現有的畫圈圈區域不太理想,需要有:

可拖拽移動圓的位置,

滾輪可以控制大小,

邊界也可以通過拖拽調整圓的長軸短軸調整大小。

原理描述:

1.畫形狀容易實現;

2.調整大小通過整個窗體的滑鼠move事件。來進行實時重新整理顯示;

3.拖拽移動位置用mousedown事件和mousemove事件,可以實時監控游標位置;

4.滾輪控制用mousewheel事件,mouseeventargs的delta屬性可控制上下滾;

自己做了個簡單demo例項:

public

form1()

//矩形框座標

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