VC++60 第五章 如何設計鼠標事件

第五章如何設計鼠標事件

 

鼠標的每一個動作都是一個事件,應用程序可以捕獲這個事件,並對它作出相應的處理,當然也可以不予理睬。鼠標事件有(左鍵)單擊,雙擊,右鍵單擊,左鍵按下,鼠標移動等,本章通過用鼠標畫圖的例程來介紹如何設計鼠標事件。

 

本章要點

1 爲鼠標事件添加消息映射
2 爲鼠標事件函數添加代碼
3 在面版上畫圖-畫直線的方法

 

5.1 Draw.exe的界面和功能

VC++60 <wbr>第五章 <wbr>如何設計鼠標事件
chap05-01

程序的上方是文字提示,下面有兩個按鈕。按下鼠標時移動就可以畫出任意圖形,用[清除]按鈕可靠以抹掉圖形。

 

5.2 Draw程序的界面設計

先創建工程文件,在“D:\myVC\CHO5\”建立Draw程序;MFC標準的對話框模式;用靜態DLL支持。

設計工程的界面,參考下列屬性表設計如圖chap05-01的界面。

控件和標題 ID Styles Extended Styles
按鈕[測試] IDC_CLEAR_BUTTON 默認 Client edge
Static edge
Modal Form
按鈕[退出] IDOK
靜態文本[畫圖...] IDC_STATIC 對齊方式:居中  
對話框 Draw程序 IDD_DRAW_DIALOG Title, sysytem menu  

對話框設置字體大爲12。編譯和運行。

 

5.3 編寫代碼

畫一條任意曲線實際上是由很短的直線段構成的,這需要從前一點向當前點即鼠標的現在位置畫直線。所以需要定義兩個變量來存放前一點的座標。在鼠標移動時不斷地畫直線,這需要引進一個消息映射WM_MOUSEMOVE。另外,在面版上畫圖需要定義一個屏幕設備對象CClientDC dc(this)。

1 在頭文件DrawDlg.h中定義變量:
    int m_PrevX, m_PrevY;

2 在對話框CDrawDlg中消息映射WM_MOUSEMOVE。在類嚮導中選中對話框DrawDlg,再在消息列表框中尋找WM_MOUSEMOVE,選中後點擊Add Function,就生成函數OnMouseMove(),點Add code立即輸入代碼。

3 函數OnMouseMove()的代碼

void CDrawDlg::OnMouseMove(UINT nFlags, CPoint point)
{
    if(nFlags & MK_LBUTTON == MK_LBUTTON)
    {
//定義屏幕設備對象

        CClientDC dc(this);
        dc.MoveTo(m_PrevX, m_PrevY);
        dc.LineTo(point.x, point.y);
        m_PrevX = point.x;
        m_PrevY = point.y;
    }
    CDialog::OnMouseMove(nFlags, point);
}
MoveTo()定位畫筆到前一點,畫完直線後把點point儲存到m_Prev中。

4 給“鼠標按下”寫代碼
添加消息映射WM_MOUSEDOWN,函數OnLButtonDown的功能是保存鼠標點擊的當前點,代碼爲:
    m_PrevX = point.x;
    m_PrevY = point.y;

5 給清除按鈕寫代碼
    Invalidate();
該函數的功能是調用Panit函數重畫對話框。

編譯和運行。

—END—

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章