2010-03-19 129 views
0

即時通訊目前正致力於的Visual C++ 2008 Express Edition的.. 在我的項目,我有一個包含圖像的圖片框,現在我要畫一個矩形enaable用戶選擇圖像的一部分。 。 我已經使用了PictureBox的和下面的代碼的「的MouseDown」事件來繪製一個矩形:在「DrawRectangle的」參數「寬度」和「HT」是靜態繪製一個連續的矩形

Void pictureBox1_MouseDown(System::Object^ sender, Windows::Forms::MouseEventArgs^ e) 
       { 
      Graphics^ g = pictureBox1->CreateGraphics(); 
      Pen^ pen = gcnew Pen(Color::Blue); 
      g->DrawRectangle(pen , e->X ,e->Y,width,ht);   
     } 

現在,因此,上述碼結果該點處的矩形的,其中用戶按下的PictureBox的圖像上的鼠標按鈕... 我想允許用戶能夠拖動光標,並繪製s的矩形圖中ize他希望.. Plz幫助我對此.. Thanx ..

回答

0

您不應該直接在您的事件處理程序中繪製窗口 - 所有繪圖應該在您的Paint事件處理程序中。

有很多你可以做更多,使其工作得很好,但你需要該技術的核心是:

左右移動的矩形用戶拖動鼠標,你必須處理使用鼠標移動事件。每次你得到一個時間,你需要無效(),使您的窗口的重繪。在您的油漆處理程序,如果鼠標按鍵時,獲取鼠標指針位置,在該位置繪製矩形。

這將讓你開始,但它有幾個問題 - 窗口會閃爍,因爲它不斷地重繪,這可能是一個有點慢。

還有其他事情可以做,以改善這一點,包括:

  • 只有失效形式的,你需要的部分(在舊的矩形需要從刪除,並在新的矩形需要繪製)

  • 後的Invalidate()調用Update()立即引起重繪儘快

  • 「雙緩衝」渲染髮生,和/或存儲在窗口中的內容一個fscreen位圖,這樣就可以重新呈現在頂部的矩形背景更快速且無閃爍。 (但這是相當先進的技術)。