中利用設(shè)計(jì)繪圖程序初步呢
首先我們說(shuō)下通過(guò)鼠標(biāo)的移動(dòng)來(lái)繪制直線。
這里要捕獲到鼠標(biāo)的兩個(gè)消息:WM_LBUTTONDOWN, WM_LBUTTONUP。響應(yīng)WM_LBUTTONDOWN消息記錄直線的起始點(diǎn),響應(yīng)WM_LBUTTONUP消息記錄直線的終點(diǎn)并繪制直線。
好了,我們看看怎么響應(yīng)。
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
//MessageBox(\"Left Button Clicks DrawView\");
m_ptOrigin = point ; //這里先定義了一個(gè)內(nèi)部變量保存直線的起始點(diǎn)
CView::OnLButtonDown(nFlags, point);
}
下面看看響應(yīng)WM_LBUTTONUP消息記錄直線的終點(diǎn)并繪制直線。
//方法一
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
HDC hdc;
hdc = ::GetDC(m_hWnd); //調(diào)用全局函數(shù)
MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,0);
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);
CView::OnLButtonUp(nFlags, point);
}
//方法二
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
CDC *pDC = GetDC();
pDC-MoveTo(m_ptOrigin);
pDC-LineTo(point);
ReleaseDC(pDC);
}
//方法三
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
CClientDC dc(this) ; //CClientDC對(duì)象構(gòu)造的時(shí)候就調(diào)用了GetDC,析構(gòu)的時(shí)候調(diào)用
ReleaseDC ,只能訪問(wèn)客戶區(qū)
CClientDC dc(GetParent());
veTo(m_ptOrigin);
neTo(point);
}
//方法四
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
CWindowDC dc(this) ; //CWindowDC可以訪問(wèn)客戶區(qū)和非客戶區(qū)
veTo(m_ptOrigin);
neTo(point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
CWindowDC dc(GetDesktopWindow()) ; //現(xiàn)在可以訪問(wèn)桌面
veTo(m_ptOrigin);
neTo(point);
}
連續(xù)線繪圖:
思路:鼠標(biāo)移動(dòng)的信號(hào)被捕捉到,然后隨時(shí)響應(yīng)該信號(hào),繪制圖線。
這里要設(shè)置一個(gè)BOOL變量 m_bDraw 來(lái)判斷是否鼠標(biāo)左鍵按下了。
//畫連續(xù)的線條
void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
if ( m_bDraw )
{
CClientDC dc(this) ;
veTo(m_ptOrigin); //移動(dòng)到原來(lái)的點(diǎn)
neTo(point); //繪制直線
m_ptOrigin = point ; //將現(xiàn)在的點(diǎn)賦值給原來(lái)的坐標(biāo),以便下次調(diào)用
}
CView::OnMouseMove(nFlags, point);
}
//改變畫筆的顏色
void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
if ( m_bDraw )
{
CClientDC dc(this) ;
CPen pen( PS_SOLID , 1 , RGB(255,128,128) );
CPen *pOldPen = lectObject(pen);
veTo(m_ptOrigin);
neTo(point);
m_ptOrigin = point ;
lectObject(pOldPen);
}
CView::OnMouseMove(nFlags, point);
}
//畫扇型
void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
if ( m_bDraw )
{
CClientDC dc(this) ;
CPen pen( PS_SOLID , 1 , RGB(255,128,128) );
CPen *pOldPen = lectObject(pen);
但由于F-86過(guò)于笨重 veTo(m_ptOrigin);
neTo(m_ptOld);
veTo(m_ptOrigin);
neTo(point);
m_ptOld = point ;
lectObject(pOldPen);
}
CView::OnMouseMove(nFlags, point);
}
//畫帶邊線的扇型
void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
if ( m_bDraw )
{
CClientDC dc(this) ;
CPen pen( PS_SOLID , 1 , RGB(255,128,128) );
CPen *pOldPen = lectObject(pen);
veTo(m_ptOrigin);
neTo(m_ptOld);
veTo(m_ptOrigin);
neTo(point);
veTo(m_ptOld);
neTo(point);
m_ptOld = point ;
lectObject(pOldPen);
}
CView::OnMouseMove(nFlags, point);
}
//看看繪圖的模式設(shè)置方法
void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
if ( m_bDraw )
{
CClientDC dc(this) ;
tROP2(R2_BLACK); //繪圖的模式設(shè)置,始終繪制黑色圖形
CPen pen( PS_SOLID , 1 , RGB(255,128,128) );
CPen *pOldPen = lectObject(pen);
veTo(m_ptOrigin);
neTo(m_ptOld);
veTo(m_ptOrigin);
neTo(point);
veTo(m_ptOld);
neTo(point);
m_ptOld = point ;
lectObject(pOldPen);
}
CView::OnMouseMove(nFlags, point);
}
到此,我們知道了一般地繪圖方法了。查看本文來(lái)源
永州白癜風(fēng)醫(yī)院哪家好重慶治療白癜風(fēng)醫(yī)院哪好
西安哪家醫(yī)院做人流好
- 挪威石油基金6.77億歐羅收購(gòu)柏林索尼中心50%股權(quán)
- 美股跌幅擴(kuò)充 納指跌超1%
- 天德鈺科研實(shí)力雄厚 有望在快充芯片市場(chǎng)再創(chuàng)高分
- V5中單Dream重回二隊(duì)引非議,水友:直接讓Rookie真的好嗎
- 想讓男人真情你真情到上癮,就要主動(dòng)索取三樣?xùn)|西
- 線粒體功能障礙/突變與神經(jīng)系統(tǒng)疾病的肺癌機(jī)制相互關(guān)聯(lián)
- 易烊千璽唯一一次放飛自我,各種“丑照”被瘋傳,看到胖虎我笑罐了
- 帝陵地宮,連現(xiàn)代技術(shù)都無(wú)法挖掘,究竟隱藏著哪些未解之謎?
- 漲漲漲!加拿大四口之家去小店買菜,要多花近千元!這7樣貴最多!
- 智聯(lián)+影音,AITO問(wèn)界M7就讓干翻的不止理就讓One
- 投資者提問(wèn):董秘你好,公司和問(wèn)界的合作若無(wú)新進(jìn)展?
- 觸樂(lè)夜話:從沒(méi)這么堅(jiān)持不懈過(guò)