DoubleClick和MouseDown兩個事件的關係 |
答題得分者是:aftcast
|
yeeddt
初階會員 發表:18 回覆:28 積分:29 註冊:2008-11-10 發送簡訊給我 |
原本認為在DoublClick發生便完成一個多邊形繪製,所以需要將TPoint的內容消除。
結果在該如何消除TPoint的內容中經由aftcast前輩的解釋發現DoubleClick也會同時執行MouseDown。 經過幾天下來的研究,沒有絲毫進展,實在不知道該如何解決這樣的問題。 是不是根本無法利用DoubleClick做一個多邊形的結束呢? 這小畫家一點都不小啊! |
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
山不轉路轉,轉個彎還是可以到目的地!!
因為當dubleclick時,事件的觸發順序如下: MouseDown -> DoublClick -> MouseDown 所以,在MouseDown裡做一些修改。首先加入一個旗標,用來指示是否按了DoublClick,然後開始的時候是false,而在DoublClick事件裡把它設為true,接下來就是在MouseDown的事件中加入if的判別,我用我自己的例子給你參考。 [code cpp] class TForm1 : public TForm { __published: // IDE-managed Components TPaintBox *PaintBox1; TButton *Button1; void __fastcall PaintBox1Paint(TObject *Sender); void __fastcall PaintBox1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y); void __fastcall Button1Click(TObject *Sender); void __fastcall PaintBox1DblClick(TObject *Sender); private: // User declarations std::vector bool DblFlag; public: // User declarations __fastcall TForm1(TComponent* Owner); }; //--------------------------------------------------------------------------- extern PACKAGE TForm1 *Form1; //------------上面是header----------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { this->DblFlag = false; } //--------------------------------------------------------------------------- void __fastcall TForm1::PaintBox1DblClick(TObject *Sender) { this->DblFlag = true; } //--------------------------------------------------------------------------- void __fastcall TForm1::PaintBox1MouseDown(TObject *Sender, TMouseButton Button, TShiftState Shift, int X, int Y) { if (this->DblFlag == false) { vPoint.push_back(Point(X,Y)); ((TPaintBox *)Sender)->Canvas->Polyline(vPoint.begin(), vPoint.size()-1); return; } else { vPoint.pop_back(); //減1 ,你自己想想為何吧 PaintBox1->Canvas->Polygon( vPoint.begin(), vPoint.size()-1 ); vPoint.clear(); this->DblFlag = false; } } [/code]
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
yeeddt
初階會員 發表:18 回覆:28 積分:29 註冊:2008-11-10 發送簡訊給我 |
|
aftcast
站務副站長 發表:81 回覆:1485 積分:1763 註冊:2002-11-21 發送簡訊給我 |
疑? 怪怪,我測的時候是有必要減1, 因為 當最後一次double click時,由於順序是 1 mouse down,再2 click再3 down… 我主要是要消除第1個mouse down所造成的點。因為,double click 這個動作應該不含加入點,我是把它當做是一個閉合的動作。 也許你是把它當做「額外的最後一點外加閉合」來看待吧?!
總之,有解決就好。 ^ _^ ===================引 用 yeeddt 文 章=================== 原來我還是太死腦筋了。 感謝前輩的解答。 但是下面這行我要去掉才會正常動作。 否則會回到上一個紀錄座標跟原點連起來。 [code cpp] vPoint.pop_back(); //減1 ,你自己想想為何吧 [/code]
------
蕭沖 --All ideas are worthless unless implemented-- C++ Builder Delphi Taiwan G+ 社群 http://bit.ly/cbtaiwan |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |