亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

MFC一路走來------鼠標響應

系統 2339 0

鼠標響應關鍵就是對兩個函數進行操作: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表示鼠標坐標。(相對于當前窗口而言的坐標)


}

MFC一路走來------鼠標響應


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 777色狠狠一区二区三区香蕉 | 久草精彩视频 | 国产精品人成人免费国产 | 国产成人青草视频 | 视频一区中文字幕 | 不卡一区二区在线 | 色国产在线视频一区 | 欧美日韩一二三区免费视频观看 | 国产精品久久二区三区色裕 | 天天好逼365| 成人午夜性a一级毛片美女 成人午夜性视频欧美成人 成人午夜亚洲影视在线观看 | 伊人色综合网一区二区三区 | 九九热综合 | 一级特黄牲大片免费视频 | 久久精品中文字幕有码日本 | 青青国产成人久久激情911 | 久久国产亚洲偷自 | 中文字幕在线看视频一区二区三区 | 成人嫩草研究院永久网址 | 亚洲手机中文字幕 | 最近中文字幕在线视频1 | 在线免费视频国产 | 久久国产精品男女热播 | 性做久久久久久久免费看 | 天堂成人在线视频 | 深夜免费看片 | 亚洲一区二区三区不卡在线播放 | 奇米色影视 | 婷婷综合另类小说色区 | a网在线| 久久久久99| 天天操夜夜摸 | 91正在播放极品白嫩在线观看 | 日产一二三四五六七区麻豆 | 久久综合九色综合网站 | 黄色片网站在线免费观看 | 亚洲综合欧美在线 | sese在线播放 | 99精品国产一区二区青青牛奶 | 永久黄网站色视频免费 | 特一级黄|