VC動態軌跡畫線
睿豐德科技 專注RFID識別技術和條碼識別技術與管理軟件的集成項目。質量追溯系統、MES系統、金蝶與條碼系統對接、用友與條碼系統對接
分類: 2.4 線程/圖形學2010-04-30 22:14 1878人閱讀 評論(0) 收藏 舉報 文檔null
{
//········
protected:
int m_Dragging;
HCURSOR m_HCross;
CPoint m_PointOld;
CPoint m_PointOrigin;
//········
};
{
// TODO: add construction code here
m_Dragging=0;
m_HCross=AfxGetApp()->LoadStandardCursor(IDC_CROSS);//載入標準的十字光標
}
{
// TODO: Add your message handler code here and/or call default
::SetCursor(m_HCross);//這一句能防止左鍵單擊的時候,保持鼠標樣式不變
m_PointOrigin=point;
m_PointOld=point;
SetCapture();//捕獲鼠標,充分控制鼠標
m_Dragging=1;
RECT Rect;
GetClientRect(&Rect);//取得窗口當前顯示坐標
ClientToScreen(&Rect);//轉換為屏幕坐標
::ClipCursor(&Rect);//限定光標在指定矩形了嗎
CView::OnLButtonDown(nFlags, point);
}
{
// TODO: Add your message handler code here and/or call default
::SetCursor(m_HCross);
if (m_Dragging)
{
CClientDC ClientDC(this);
ClientDC.SetROP2(R2_NOT);//逆轉當前屏幕顏色來畫線的繪圖方式
ClientDC.MoveTo(m_PointOrigin);//
ClientDC.LineTo(m_PointOld); //擦去上一次的線
ClientDC.MoveTo(m_PointOrigin);
ClientDC.LineTo(point);//繪制這一次的臨時線
m_PointOld=point;
}
CView::OnMouseMove(nFlags, point);
}
{
// TODO: Add your message handler code here and/or call default
if (m_Dragging)
{
m_Dragging=0;
::ReleaseCapture();//結束捕獲鼠標
::ClipCursor(NULL);//解鎖鼠標
CClientDC ClientDC(this);
ClientDC.SetROP2(R2_NOT);
ClientDC.MoveTo(m_PointOrigin);
ClientDC.LineTo(m_PointOld);//擦去上一次的臨時線
ClientDC.SetROP2(R2_COPYPEN);//缺省繪圖模式,像素為畫筆顏色
ClientDC.MoveTo(m_PointOrigin);
ClientDC.LineTo(point);//繪制固定線
}
CView::OnLButtonUp(nFlags, point);
}
分類: 2.4 線程/圖形學2010-04-30 22:14 1878人閱讀 評論(0) 收藏 舉報 文檔null
這是一個繪制直線的簡單繪圖程序,能過實現動態軌跡畫線,在拖動時產生臨時線來表示可能畫出的直線效果。
首先:建立一個單文檔程序,名稱為Demo
然后:在視圖類的聲明文件里面加入數據成員
{
//········
protected:
int m_Dragging;
HCURSOR m_HCross;
CPoint m_PointOld;
CPoint m_PointOrigin;
//········
};
接著:在視圖類的構造函數里面
CDemoView::CDemoView(){
// TODO: add construction code here
m_Dragging=0;
m_HCross=AfxGetApp()->LoadStandardCursor(IDC_CROSS);//載入標準的十字光標
}
接著:為視圖類添加鼠標左鍵,鼠標移動,鼠標左鍵釋放消息
void CDemoView::OnLButtonDown(UINT nFlags, CPoint point){
// TODO: Add your message handler code here and/or call default
::SetCursor(m_HCross);//這一句能防止左鍵單擊的時候,保持鼠標樣式不變
m_PointOrigin=point;
m_PointOld=point;
SetCapture();//捕獲鼠標,充分控制鼠標
m_Dragging=1;
RECT Rect;
GetClientRect(&Rect);//取得窗口當前顯示坐標
ClientToScreen(&Rect);//轉換為屏幕坐標
::ClipCursor(&Rect);//限定光標在指定矩形了嗎
CView::OnLButtonDown(nFlags, point);
}
void CDemoView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
::SetCursor(m_HCross);
if (m_Dragging)
{
CClientDC ClientDC(this);
ClientDC.SetROP2(R2_NOT);//逆轉當前屏幕顏色來畫線的繪圖方式
ClientDC.MoveTo(m_PointOrigin);//
ClientDC.LineTo(m_PointOld); //擦去上一次的線
ClientDC.MoveTo(m_PointOrigin);
ClientDC.LineTo(point);//繪制這一次的臨時線
m_PointOld=point;
}
CView::OnMouseMove(nFlags, point);
}
void CDemoView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if (m_Dragging)
{
m_Dragging=0;
::ReleaseCapture();//結束捕獲鼠標
::ClipCursor(NULL);//解鎖鼠標
CClientDC ClientDC(this);
ClientDC.SetROP2(R2_NOT);
ClientDC.MoveTo(m_PointOrigin);
ClientDC.LineTo(m_PointOld);//擦去上一次的臨時線
ClientDC.SetROP2(R2_COPYPEN);//缺省繪圖模式,像素為畫筆顏色
ClientDC.MoveTo(m_PointOrigin);
ClientDC.LineTo(point);//繪制固定線
}
CView::OnLButtonUp(nFlags, point);
}
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成