日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

MFC一路走來(lái)------鼠標(biāo)響應(yīng)

系統(tǒng) 2518 0

鼠標(biāo)響應(yīng)關(guān)鍵就是對(duì)兩個(gè)函數(shù)進(jìn)行操作:OnLButtonDown和OnLButtonUp;

1、使用MFC AppWizard(exe)建立一個(gè)單文檔MFC工程

2、首先要在CxxxView類(lèi)的定義里加上后續(xù)必備的數(shù)據(jù)成員

class CDrawView : public CView
{
。。。。。。。。。。。。
private:
CPoint m_ptOrigin; //用來(lái)記錄鼠標(biāo)按下時(shí)的點(diǎn)
BOOL m_bDraw; //鼠標(biāo)按下的標(biāo)志,用來(lái)判斷鼠標(biāo)彈起來(lái)了沒(méi)有
CPoint m_ptOld; //用來(lái)記錄鼠標(biāo)的移動(dòng)路勁
};

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point) //鼠標(biāo)按下
{
MessageBox("Haibara Ai"); //鼠標(biāo)一按下就會(huì)送出消息(以對(duì)話(huà)框形式)
m_ptOrigin=m_ptOld=point; //將當(dāng)前鼠標(biāo)按下的位置用m_ptOrigin記錄
m_bDraw=TRUE; //將鼠標(biāo)按下標(biāo)志置為T(mén)URE
CView::OnLButtonDown(nFlags, point); //函數(shù)自調(diào)用,循環(huán)檢測(cè)。nFlags 表示控制鍵狀態(tài)

//(包括 ctrl,shift,鼠標(biāo)左、中、右共5個(gè)鍵的狀態(tài))
//point表示鼠標(biāo)坐標(biāo)。(相對(duì)于當(dāng)前窗口而言的坐標(biāo))

}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point) //鼠標(biāo)彈起
{

//鼠標(biāo)畫(huà)直線(xiàn)方式一
HDC hdc; //先定義一個(gè)HDC對(duì)象:Handler to a device context(DC),指向一個(gè)DC(設(shè)備描述表)的句柄
hdc=::GetDC(m_hWnd); //“::”用全局的函數(shù)(即SDK中的函數(shù))

圖片


MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);//由原點(diǎn)(0,0)移動(dòng)到起點(diǎn)(即鼠標(biāo)按下點(diǎn))
LineTo(hdc,point.x,point.y); //由當(dāng)前位置移動(dòng)到坐標(biāo)點(diǎn)(x,y)(即鼠標(biāo)彈起點(diǎn));
::ReleaseDC(m_hWnd,hdc);
//釋放DC

//鼠標(biāo)畫(huà)直線(xiàn)方式二

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(); //獲取一個(gè)CDC類(lèi)對(duì)象的指針
pDC->MoveTo(m_ptOrigin);
pDC->LineTo(point);
ReleaseDC(pDC);

//鼠標(biāo)畫(huà)直線(xiàn)方式三
//CClientDC dc(this); //在客戶(hù)區(qū)畫(huà)直線(xiàn)
CClientDC dc(GetParent()); //在框架窗口上畫(huà)直線(xiàn)
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);

//鼠標(biāo)畫(huà)直線(xiàn)方式四

//CWindowDC dc(this); //在客戶(hù)區(qū)畫(huà)直線(xiàn)
//CWindowDC dc(GetParent()); //在框架窗口上畫(huà)直線(xiàn)
CWindowDC dc(GetDesktopWindow()); //在整個(gè)桌面面板上畫(huà)直線(xiàn)
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);

//鼠標(biāo)畫(huà)直線(xiàn)方式五(畫(huà)筆)

CPen pen(PS_SOLID,20,RGB(255,0,0)); //創(chuàng)建一個(gè)筆(CPen類(lèi)封裝了跟畫(huà)筆相關(guān)的操作)

//(線(xiàn)型,線(xiàn)粗,線(xiàn)色)
CClientDC dc(this); //創(chuàng)建一個(gè)DC
CPen *pOldPen=dc.SelectObject(&pen); //將筆選到設(shè)備描述表中
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
dc.SelectObject(pOldPen);

//鼠標(biāo)響應(yīng)畫(huà)矩形(畫(huà)刷)
CBrush brush(RGB(255,0,0)); //創(chuàng)建畫(huà)刷,紅色
CClientDC dc(this); //創(chuàng)建一個(gè)dc
dc.FillRect(CRect(m_ptOrigin,point),&brush); //用一個(gè)指定畫(huà)刷填充一個(gè)指定的區(qū)域,
//第一個(gè)參數(shù)用于設(shè)定這個(gè)區(qū)域,用畫(huà)線(xiàn)時(shí)保存下來(lái)的起點(diǎn)和終點(diǎn)來(lái)設(shè)定這個(gè)區(qū)域

//運(yùn)行結(jié)果是:我們的dc在用我們所創(chuàng)建的紅色的畫(huà)刷去填充了一塊矩形的區(qū)域

//用位圖對(duì)象填充鼠標(biāo)畫(huà)出的矩形框圖
CBitmapbitmap; //首先定義一個(gè)位圖
bitmap.LoadBitmap(IDB_BITMAP1); //用資源的ID加載這個(gè)位圖
CBrushbrush(&bitmap); //有了這個(gè)位圖之后,就可以創(chuàng)建這個(gè)位圖的畫(huà)刷,形參為這個(gè)位圖對(duì)象的指針
CClientDC dc(this); //然后創(chuàng)建一個(gè)dc
dc.FillRect(CRect(m_ptOrigin,point),&brush); //用這個(gè)指定的畫(huà)刷(位圖畫(huà)刷)去填充一塊矩形區(qū)


////////////////////////////////////////////////////////////
///創(chuàng)建透明畫(huà)刷,即空畫(huà)刷/////////
////////////////////////////////////////////////////////////

CClientDC dc(this);
CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));

//注意這里,GetStockObject函數(shù)返回的是一個(gè)HGDIOBJ
//的一個(gè)句柄,需要用強(qiáng)制轉(zhuǎn)換將其轉(zhuǎn)換為畫(huà)刷的句柄
//(HBRUSH)GetStockObject(NULL_BRUSH)
//FromHandle是CBrush類(lèi)的靜態(tài)成員函數(shù)(見(jiàn)MSDN),所以可以直接由類(lèi)名調(diào)用
CBrush *pOldBrush=dc.SelectObject(pBrush); //將畫(huà)刷選到我們的設(shè)備描述表中,

//用空畫(huà)刷去替換我們先前的畫(huà)刷(缺省畫(huà)刷、默認(rèn)畫(huà)刷)
dc.Rectangle(CRect(m_ptOrigin,point)); //DC當(dāng)中用來(lái)畫(huà)矩形矩形的一個(gè)函數(shù)
dc.SelectObject(pOldBrush); //回到畫(huà)刷替換前的默認(rèn)畫(huà)刷

m_bDraw=FALSE; //鼠標(biāo)彈起標(biāo)志,將m_bDraw置為FALSE

CView::OnLButtonUp(nFlags, point);
}

//鼠標(biāo)移動(dòng)響應(yīng)函數(shù),應(yīng)用在畫(huà)曲線(xiàn)方面

void CDrawView::OnMouseMove(UINT nFlags, CPoint point) //point為函數(shù)獲取的當(dāng)前鼠標(biāo)所在位置的坐標(biāo)

//它會(huì)鼠標(biāo)的移動(dòng)而不斷改變值
{
CClientDC dc(this); //創(chuàng)建一個(gè)DC,指向當(dāng)前窗口(客戶(hù)區(qū))
dc.SetROP2(R2_BLACK); //設(shè)置繪畫(huà)模式
CPen pen(PS_SOLID,1,RGB(255,0,0)); //設(shè)置畫(huà)筆(線(xiàn)型、線(xiàn)寬、線(xiàn)顏色)
CPen*pOldPen=dc.SelectObject(&pen); //將畫(huà)筆選到設(shè)備描述表中
if(m_bDraw==TRUE)
{

///////////////////////
///畫(huà)曲線(xiàn)
dc.MoveTo(m_ptOrigin); //移動(dòng)到起始點(diǎn)
dc.LineTo(point); //畫(huà)線(xiàn)到,注意這里的每一次畫(huà)線(xiàn)都是很短的。很短的多次畫(huà)線(xiàn)就得到了曲線(xiàn)
m_ptOrigin=point; //將終點(diǎn)設(shè)為下一次畫(huà)線(xiàn)的起點(diǎn)。。。。這樣不斷循環(huán),直到鼠標(biāo)彈起,跳出循環(huán)結(jié)束畫(huà)線(xiàn)。
//////////////////////

//////////////////////
///畫(huà)扇形線(xiàn)
dc.MoveTo(m_ptOrigin); //定下起點(diǎn)不變
dc.LineTo(point);
//////////////////////

//////////////////////
//畫(huà)帶邊線(xiàn)的扇形線(xiàn)
dc.MoveTo(m_ptOrigin); //定下起點(diǎn)不變
dc.LineTo(point); //開(kāi)始畫(huà)線(xiàn)
dc.LineTo(m_ptOld); //在線(xiàn)的終點(diǎn)處引線(xiàn)到另一條線(xiàn)的終點(diǎn)
m_ptOld=point; //將上一條線(xiàn)的終點(diǎn)寄存下,以待下一條線(xiàn)劃下時(shí),將終點(diǎn)與之相連。
//////////////////////

}

dc.SelectObject(pOldPen); //回到畫(huà)刷替換前的默認(rèn)畫(huà)筆

CView::OnMouseMove(nFlags, point); //函數(shù)自調(diào)用,循環(huán)檢測(cè)。nFlags 表示控制鍵狀態(tài)

/ /(包括 ctrl,shift,鼠標(biāo)左、中、右共5個(gè)鍵的狀態(tài))
//point表示鼠標(biāo)坐標(biāo)。(相對(duì)于當(dāng)前窗口而言的坐標(biāo))


}

MFC一路走來(lái)------鼠標(biāo)響應(yīng)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 渑池县| 开远市| 屏东县| 从化市| 藁城市| 女性| 滦南县| 明星| 宁武县| 镶黄旗| 柳江县| 连城县| 阳高县| 山丹县| 云和县| 苗栗市| 壤塘县| 成安县| 莱西市| 张北县| 潮州市| 吉木萨尔县| 秦安县| 桦南县| 漯河市| 石首市| 乃东县| 霍州市| 泊头市| 克拉玛依市| 冀州市| 伊吾县| 丰原市| 嵩明县| 德格县| 莱阳市| 托克逊县| 奇台县| 丹棱县| 缙云县| 澄城县|