等壹會兒給妳寫壹個,這個以前我做過的,不是很難。?
剛才看了壹下,其實不是四個三角形,因為三角形在vb繪圖裏不好畫,沒有直接的函數,我覺得最大的問題是要解決三角形的填充問題,其實妳說的其它的都好解決,就是現在要如何直接填充三角形區域,還有壹個就是妳這個所謂的變化大小,是不是當整體變化時,三角形的區域呈比例變化還是單獨可以控制,如果是單獨控制,那就麻煩了。?
現在我想到的最簡單的辦法就是這樣,妳以控件的對角線分出四個三角形來,分別以中心焦點為圓心,分別向四個方向填充四個半徑大於控件最大邊長,角度等於四個交叉的三角形的角度的扇形。角度需要根據控件的比例來定,最終的結果就是顯示出來四個三角形,因為多畫出的部分是看不到的。
大小變化就比較好弄了,在resize事件裏,寫上刷新畫圖,改變大小就可以。
至於如何用鼠標改變顏色,這個就是判斷鼠標的雙擊點,判斷落在哪個區域內,然後調出顏色對話框,修改顏色就可以。
如果有什麽不清楚的,可以繼續提問。?
至於如何計算鼠標的落點,這就比較麻煩,因為涉及到坐標轉換的問題。
首先作為自定義控件來講,鼠標的坐標是可以捕獲的,妳要把這個四方矩形分成四部分,現在的問題是如何判斷壹個點落在哪裏範圍裏,把這個問題轉換為數學問題來處理。
假設知道某壹個矩形的邊長和左上角點坐標,現在告訴妳壹個坐標,取某壹點,請問這壹點是在矩形對角線分開的四部分的哪壹個區域內。
現在進行坐標轉換,把基本坐標轉換到中間的那個焦點,相對應的鼠標的點也要轉換。轉換後就看X,Y的值,這個就比較簡單了吧
這個時候其實就把問題轉換為壹個點在這裏四個象限的那個象限,然後根據角度求出在那個顏色的部分。妳看到這裏應該差不多明白了吧。
關鍵是要細心的計算。附圖給妳?
妳要是不著急我找個時間給妳寫寫可以,我這段時間忙。
這樣吧我給妳個大體代碼,過個壹兩天吧,真的沒時間去寫啊。?
給妳寫了壹個,為了方便測試,我寫了個窗體下的,妳把它改成控件吧,
壹個窗體上壹個picture1,壹個label1,壹個Commondialog1
代碼如下
Const?pi?=?3.141592637 Dim?MidWidth?As?Double Dim?MidHeight?As?Double Dim?MyR?As?Double Dim?IfDBClick?As?Boolean Dim?MouseX?As?Single Dim?MouseY?As?Single Dim?Jiao?As?Single Dim?FirstColor,?SecondColor,?ThreeColor,?FourColor?As?LongPrivate?Sub?Form_Load()
MidWidth?=?Picture1.Width?/?2
MidHeight?=?Picture1.Height?/?2
MyR?=?2?*?MidHeight
If?MidWidth?>?MidHeight?Then?MyR?=?2?*?MidWidth
IfDBClick?=?False
FirstColor?=?vbBlue
SecondColor?=?vbRed
ThreeColor?=?vbYellow
FourColor?=?vbGreen
End?Sub
Function?GetColorFromDialog()?As?Long
Me.CommonDialog1.ShowColor
If?(CommonDialog1.Color?=?Null)?Then
Else
GetColorFromDialog?=?CommonDialog1.Color
End?If
End?Function
Sub?ChangeColor(ColorArea?As?Integer)
If?ColorArea?=?1?Then
FirstColor?=?GetColorFromDialog()
End?If
If?ColorArea?=?2?Then
SecondColor?=?GetColorFromDialog()
End?If
If?ColorArea?=?3?Then
ThreeColor?=?GetColorFromDialog()
End?If
If?ColorArea?=?4?Then
FourColor?=?GetColorFromDialog()
End?If
Picture1.Refresh
End?Sub
Private?Sub?Picture1_DblClick()
'找鼠標的雙擊點的位置坐標,判斷是否在範圍內
'首先進行坐標轉換
Dim?newX,?newY?As?Single
newX?=?MouseX?-?MidWidth
newY?=?MidHeight?-?MouseY
Dim?newJiao?As?Single
'對轉換後的坐標判斷象限
'第壹象限,對應1,2塊
If?(newX?>?0?And?newY?>?0)?Then
newJiao?=?Atn(newY?/?newX)
'這裏不考慮相等的情況
If?newJiao?>?Jiao?Then
'色塊2 ChangeColor?(2)ElseIf?newJiao?<?Jiao?Then
'色塊1ChangeColor?(1)
End?If
End?If
'第二象限,對應2,3塊
If?(newX?<?0?And?newY?>?0)?Then
newJiao?=?Atn(-newY?/?newX)
'這裏不考慮相等的情況If?newJiao?>?Jiao?Then
'色塊2ChangeColor?(2)
ElseIf?newJiao?<?Jiao?Then
'色塊3ChangeColor?(3)
End?If
End?If
'第三象限,對應3,4塊
If?(newX?<?0?And?newY?<?0)?Then
newJiao?=?Atn(newY?/?newX)
'這裏不考慮相等的情況If?newJiao?>?Jiao?Then
'色塊4ChangeColor?(4)
ElseIf?newJiao?<?Jiao?Then
'色塊3ChangeColor?(3)
End?If
End?If
'第四象限,對應4,1塊
If?(newX?>?0?And?newY?<?0)?Then
newJiao?=?Atn(-newY?/?newX)
'這裏不考慮相等的情況If?newJiao?>?Jiao?Then
'色塊4ChangeColor?(4)
ElseIf?newJiao?<?Jiao?Then
'色塊1ChangeColor?(1)
End?If
End?If
End?Sub
Private?Sub?Picture1_MouseMove(Button?As?Integer,?Shift?As?Integer,?X?As?Single,?Y?As?Single)
MouseX?=?X
MouseY?=?Y
Label1.Caption?=?"X:"?&?X?&?"Y:"?&?Y
End?Sub
Private?Sub?Picture1_Paint()
Picture1.FillStyle?=?0
Picture1.FillColor?=?FirstColor
Jiao?=?Atn(MidHeight?/?MidWidth)
Picture1.Circle?(MidWidth,?MidHeight),?MyR,?FirstColor,?-2?*?pi?+?Jiao,?-Jiao
Picture1.FillStyle?=?0
Picture1.FillColor?=?SecondColor
Picture1.Circle?(MidWidth,?MidHeight),?MyR,?SecondColor,?-Jiao,?-pi?+?Jiao
Picture1.FillStyle?=?0
Picture1.FillColor?=?ThreeColor
Picture1.Circle?(MidWidth,?MidHeight),?MyR,?ThreeColor,?-pi?+?Jiao,?-pi?-?Jiao
Picture1.FillStyle?=?0
Picture1.FillColor?=?FourColor
Picture1.Circle?(MidWidth,?MidHeight),?MyR,?FourColor,?-pi?-?Jiao,?-2?*?pi?+?Jiao
End?Sub?
代碼有少許不完善的地方,在picture的resize方法裏面,應該刷新畫圖。這個妳自己搞吧。