鼠標響應關鍵就是對兩個函數進行操作:OnLButtonDown和OnLButtonUp;
1、使用MFC AppWizard(exe)建立一個單文檔MFC工程
2、首先要在CxxxView類的定義里加上后續必備的數據成員
class CDrawView : public CView
{
。。。。。。。。。。。。
private:
CPoint m_ptOrigin;
//用來記錄鼠標按下時的點
BOOL m_bDraw;
//鼠標按下的標志,用來判斷鼠標彈起來了沒有
CPoint m_ptOld;
//用來記錄鼠標的移動路勁
};
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
//鼠標按下
{
MessageBox("Haibara Ai");
//鼠標一按下就會送出消息(以對話框形式)
m_ptOrigin=m_ptOld=point;
//將當前鼠標按下的位置用m_ptOrigin記錄
m_bDraw=TRUE;
//將鼠標按下標志置為TURE
CView::OnLButtonDown(nFlags, point);
//函數自調用,循環檢測。nFlags 表示控制鍵狀態
//(包括 ctrl,shift,鼠標左、中、右共5個鍵的狀態)
//point表示鼠標坐標。(相對于當前窗口而言的坐標)
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
//鼠標彈起
{
//鼠標畫直線方式一
HDC hdc;
//先定義一個HDC對象:Handler to a device context(DC),指向一個DC(設備描述表)的句柄
hdc=::GetDC(m_hWnd);
//“::”用全局的函數(即SDK中的函數)
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);//由原點(0,0)移動到起點(即鼠標按下點)
LineTo(hdc,point.x,point.y);
//由當前位置移動到坐標點(x,y)(即鼠標彈起點);
::ReleaseDC(m_hWnd,hdc);
//釋放DC
//鼠標畫直線方式二
CWnd::GetDC
CDC* GetDC( );
Return Value
Identifies the device context for the CWnd client area if successful; otherwise, the return value is NULL . The pointer may be temporary and should not be stored for later use.
CDC *pDC=GetDC();
//獲取一個CDC類對象的指針
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(point);
ReleaseDC(pDC);
//鼠標畫直線方式三
//CClientDC dc(this);
//在客戶區畫直線
CClientDC dc(GetParent());
//在框架窗口上畫直線
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
//鼠標畫直線方式四
//CWindowDC dc(this);
//在客戶區畫直線
//CWindowDC dc(GetParent());
//在框架窗口上畫直線
CWindowDC dc(GetDesktopWindow());
//在整個桌面面板上畫直線
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
//鼠標畫直線方式五(畫筆)
CPen pen(PS_SOLID,20,RGB(255,0,0)); //創建一個筆(CPen類封裝了跟畫筆相關的操作)
//(線型,線粗,線色)
CClientDC dc(this);
//創建一個DC
CPen *pOldPen=dc.SelectObject(&pen);
//將筆選到設備描述表中
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.SelectObject(pOldPen);
//鼠標響應畫矩形(畫刷)
CBrush brush(RGB(255,0,0));
//創建畫刷,紅色
CClientDC dc(this);
//創建一個dc
dc.FillRect(CRect(m_ptOrigin,point),&brush);
//用一個指定畫刷填充一個指定的區域,
//第一個參數用于設定這個區域,用畫線時保存下來的起點和終點來設定這個區域
//運行結果是:我們的dc在用我們所創建的紅色的畫刷去填充了一塊矩形的區域
//用位圖對象填充鼠標畫出的矩形框圖
CBitmapbitmap;
//首先定義一個位圖
bitmap.LoadBitmap(IDB_BITMAP1);
//用資源的ID加載這個位圖
CBrushbrush(&bitmap);
//有了這個位圖之后,就可以創建這個位圖的畫刷,形參為這個位圖對象的指針
CClientDC dc(this);
//然后創建一個dc
dc.FillRect(CRect(m_ptOrigin,point),&brush);
//用這個指定的畫刷(位圖畫刷)去填充一塊矩形區
////////////////////////////////////////////////////////////
///創建透明畫刷,即空畫刷/////////
////////////////////////////////////////////////////////////
CClientDC dc(this);
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
//注意這里,GetStockObject函數返回的是一個HGDIOBJ
//的一個句柄,需要用強制轉換將其轉換為畫刷的句柄
//(HBRUSH)GetStockObject(NULL_BRUSH)
//FromHandle是CBrush類的靜態成員函數(見MSDN),所以可以直接由類名調用
CBrush *pOldBrush=dc.SelectObject(pBrush);
//將畫刷選到我們的設備描述表中,
//用空畫刷去替換我們先前的畫刷(缺省畫刷、默認畫刷)
dc.Rectangle(CRect(m_ptOrigin,point));
//DC當中用來畫矩形矩形的一個函數
dc.SelectObject(pOldBrush);
//回到畫刷替換前的默認畫刷
m_bDraw=FALSE;
//鼠標彈起標志,將m_bDraw置為FALSE
CView::OnLButtonUp(nFlags, point);
}
//鼠標移動響應函數,應用在畫曲線方面
void CDrawView::OnMouseMove(UINT nFlags, CPoint point) //point為函數獲取的當前鼠標所在位置的坐標
//它會鼠標的移動而不斷改變值
{
CClientDC dc(this);
//創建一個DC,指向當前窗口(客戶區)
dc.SetROP2(R2_BLACK);
//設置繪畫模式
CPen pen(PS_SOLID,1,RGB(255,0,0));
//設置畫筆(線型、線寬、線顏色)
CPen*pOldPen=dc.SelectObject(&pen);
//將畫筆選到設備描述表中
if(m_bDraw==TRUE)
{
///////////////////////
///畫曲線
dc.MoveTo(m_ptOrigin);
//移動到起始點
dc.LineTo(point);
//畫線到,注意這里的每一次畫線都是很短的。很短的多次畫線就得到了曲線
m_ptOrigin=point;
//將終點設為下一次畫線的起點。。。。這樣不斷循環,直到鼠標彈起,跳出循環結束畫線。
//////////////////////
//////////////////////
///畫扇形線
dc.MoveTo(m_ptOrigin);
//定下起點不變
dc.LineTo(point);
//////////////////////
//////////////////////
//畫帶邊線的扇形線
dc.MoveTo(m_ptOrigin);
//定下起點不變
dc.LineTo(point);
//開始畫線
dc.LineTo(m_ptOld);
//在線的終點處引線到另一條線的終點
m_ptOld=point;
//將上一條線的終點寄存下,以待下一條線劃下時,將終點與之相連。
//////////////////////
}
dc.SelectObject(pOldPen); //回到畫刷替換前的默認畫筆
CView::OnMouseMove(nFlags, point); //函數自調用,循環檢測。nFlags 表示控制鍵狀態
/
/(包括 ctrl,shift,鼠標左、中、右共5個鍵的狀態)
//point表示鼠標坐標。(相對于當前窗口而言的坐標)
}
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
