2013-08-01 67 views
0

我試圖創建一個允許用戶在圖片控件框上繪製矩形的界面。我有一個圖片控件類,並使用CRectTracker允許用戶繪製一個矩形。我希望用戶也能夠選擇以前繪製的矩形,但我不知道如何處理繪製的矩形的選擇。 我希望能夠選擇矩形,並在其上添加調整大小處理程序。MFC在圖片控件上選擇用戶繪製的矩形

這是我繪製矩形的代碼。

空隙PictureCtrl :: OnLButtonDown中(UINT NFLAGS,口岸系統點) {

// If mouse click is outside of rectangle 
if(m_drawRect.m_tracker.HitTest(point) < 0) { 
    if(m_drawRect.m_tracker.TrackRubberBand(this, point, TRUE)) { 
     CDC* pDC = GetDC(); 

     m_drawRect.m_tracker.m_nStyle &= CRectTracker::resizeInside; 


     // Paint transparent rectangle 
     pDC->SelectStockObject(NULL_BRUSH); 
     pDC->Rectangle(m_drawRect.m_tracker.m_rect); 

     ReleaseDC(pDC); 


    } 
} 

CStatic::OnLButtonDown(nFlags, point); 

}

任何幫助,將不勝感激。謝謝。

回答

1

您需要將矩形的座標存儲在班級中(同時保存/加載),並在鼠標放下期間執行HitTest

要實現調整大小手柄,您將需要一個布爾值來表示矩形被選中(如果點擊不在矩形上,則將boolean設置爲FALSE),並在布爾值爲TRUE時在繪製期間繪製抓握手柄;如果鼠標移過抓手,則更改鼠標光標,在這種情況下在鼠標移動和鼠標移動期間執行調整大小。

這一切都非常複雜,如果你不只有一個矩形,就會變得更加複雜! 這是一個DrawCLI MSDN example,它用矩形,圓角矩形,橢圓,直線和多段線加上對OLE的支持 - 這可能會有所幫助,它可能更容易從DrawCLI中刪除類/函數,然後它處於合併狀態您的應用程序...

+0

感謝您的幫助。我看了一下DrawCLI的例子和許多其他的例子,並注意到其中大部分都是在一個文檔上繪製的。除了在優化校準之外,我希望能夠做到這一點。我看到一些例子,在調整大小後,文檔需要調用invalidate/update方法來顯示更改。我可以用圖片控件做同樣的事嗎? – Jay

+0

實際上,DrawCLI引用了View類--Document類只是保存數據,而View類是數據的「視圖」;我不明白爲什麼你不能在Picture Control上繪製,只要它有一個'OnDraw()'或'OnPaint()'方法或類似的東西 –

+0

啊好吧。無效/更新窗口會導致OnDraw()方法執行嗎?對不起,我是MFC的新手。 – Jay