void COpencvTestDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CRect myshowwinrect;
GetDlgItem(IDC_SHOW_IAMGE_FC)->GetWindowRect(myshowwinrect);//獲得螢屏坐標
ScreenToClient(&myshowwinrect);//轉到客戶區相對坐標
CWnd* pwnd=GetDlgItem(IDC_SHOW_IAMGE_FC);
HWND hwnd=pwnd->GetSafeHwnd();
if (point.x >= myshowwinrect.left && point.x <= myshowwinrect.right &&
point.y >= myshowwinrect.top && point.y <= myshowwinrect.bottom)//滑鼠在Picture Control 控制元件上進行了單擊操作
{
m_startRect = TRUE; //滑鼠左鍵單擊,設定可以開始繪制矩形框
m_startPoint = point; //記錄開始點
m_OldPoint = point; //設定老點也為開始點
CClientDC dc(this); //獲取設備句柄
dc.SetROP2(R2_NOT); //繪制模式
dc.SelectStockObject(NULL_BRUSH); //不使用畫刷
dc.Rectangle(CRect(m_LastSartPoint,m_LastStopPoint));//消除之前畫的矩形
}
CDialogEx::OnLButtonDown(nFlags, point);
}
void COpencvTestDlg::OnMouseMove(UINT nFlags, CPoint point)
{
CClientDC dc(this); //獲取設備句柄
dc.SetROP2(R2_NOT); //繪制模式
dc.SelectStockObject(NULL_BRUSH); //不使用畫刷
if (TRUE == m_startRect) //根據是否有單擊判斷是否可以畫矩形
{
dc.Rectangle(CRect(m_startPoint,m_OldPoint));
dc.Rectangle(CRect(m_startPoint,point));
m_OldPoint = point;
}
CDialogEx::OnMouseMove(nFlags, point);
}
void COpencvTestDlg::OnLButtonUp(UINT nFlags, CPoint point)
{
m_startRect = FALSE; //重置繪制矩形框標志
// //消隱最后的一個矩形(其原理跟拖動時矩形框繪制原理相同)
CClientDC dc(this);
dc.SetROP2(R2_NOT);
dc.SelectStockObject(NULL_BRUSH);
dc.Rectangle(CRect(m_startPoint,m_OldPoint));
dc.Rectangle(CRect(m_startPoint,point));
CDialogEx::OnLButtonUp(nFlags, point);
}
上面的代碼是可以的,但是矩形外框是黑色的,我想修改顏色,但是顏色改了之后,dc.SetROP2(R2_NOT);不能消除之前的矩形,求助怎么破?或者有沒有別的方法?跪謝
uj5u.com熱心網友回復:
重寫CStatic類,OnPaint函式中先繪制圖形作為背景(或者OnEarseBkGnd繪制背景),然后繪制其它uj5u.com熱心網友回復:
你好,不是很明白,有具體點的描述嗎?MFC新手,謝謝uj5u.com熱心網友回復:
dc.SetROP2(R2_XORPEN)uj5u.com熱心網友回復:
dc.SetROP2(R2_XORPEN)@3#,今天用了這個做過測驗,還是不行轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/145252.html
標籤:界面
