MFC動態畫直線並且具有視窗重繪功能和儲存在磁碟上

2021-10-11 21:28:09 字數 2031 閱讀 4253

void cmylineview::onmousemove(uint nflags, cpoint point)

if(m_up)

cview::onmousemove(nflags, point);

}void cmylineview::onlbuttonup(uint nflags, cpoint point)

cview::onlbuttonup(nflags, point);

}為線段定義新類cline。執行insert|new class命令,彈出new class對話方塊。在class type框選擇generic class,在name框輸入cline,在base class框輸入cobject,單機ok按鈕,自動生成類cline的標頭檔案line.h和實現檔案line.cpp。

為類cline定義成員變數和成員函式。一條線段需要起點和終點兩個點的座標來確定,在標頭檔案line.h中定義兩個表示起點和終點的成員變數m_pt1和m_pt2和m_pt3和m_pt4,其型別為cpoint類。定義成員函式drawline()根據兩點畫一條直線。

class cline : public cobject

;在實現原始檔line.cpp中編寫如下成員函式的實現**:

cline::cline(int pt1,int pt2,int pt3,int pt4)

void cline::drawline(cdc pdc)

一般使用陣列來儲存多條線段的資料,可將存放每條線段資料的變數的指標存到cobarray類的物件中。所以,在cmydrawdoc文件類中定義以下成員變數和成員函式,幷包含cline類定義的標頭檔案line.h。

#include"line.h"

#include

class cmylinedoc : public cdocument

;在實現原始檔mydrawdoc.cpp中編寫如下成員函式的實現**:

void cmylinedoc::addline(int pt1,int pt2,int pt3,int pt4)

cline* cmylinedoc::getline(int nindex)

int cmylinedoc::getnumlines()

當拖動滑鼠時,除了繪製線段,還要儲存當前線段的起點和終點座標。所以,在檢視類cmydrawview的滑鼠移動訊息處理函式onmousemove()中新增如下**:

void cmylineview::onmousemove(uint nflags, cpoint point)

if(m_up)

cview::onmousemove(nflags, point);

}為了在改變程式視窗大小後或重新開啟視窗時顯示視窗中原有的圖形,需要在ondraw()函式中新增**,重新繪製前面利用滑鼠所繪製的線段。

void cmylineview::ondraw(cdc* pdc)

}按照序列化的條件,在cline類的宣告標頭檔案line.h中新增函式seralize()的宣告和declare_serial巨集。

class cline : public cobject

;在實現原始檔line.cpp中的成員函式定義前新增implemnt_serial巨集。

implement_serial(cline,cobject,1)

編寫cline類的序列化函式serialize()的實現**,如下所示:

void cline::serialize(carchive &ar)

為所有線段資料的讀寫:

void cmylinedoc::serialize(carchive& ar)

else

}在workspace(工作區)中右擊文件派生類cmydrawdoc,在彈出的選單中選擇add virtual function命令,在隨之開啟的對話方塊中選中deletecontents項,然後單擊add and edit按鈕,新增如下**:

void cmylinedoc::deletecontents()

最後,為程式設計提示文件儲存功能

void cmylinedoc::addline(int pt1,int pt2,int pt3,int pt4)

MFC中畫直線和曲線

一 畫直線 要想在mfc中畫出有顏色的線條,首先就要設定dc的畫筆,我們可以按如下方法來設定畫筆 第一步 在view類中新增乙個colorref型別的資料成員m color 用來儲存畫筆顏色值 在建構函式中對其初始化,m color rgb 255,0,0 第二步 在wm lbuttondown和w...

MFC中如何畫帶實心箭頭的直線

工作中遇到話流程圖的專案,需要畫帶箭頭的直線,經過摸索,解決 思路如下 1 兩個點 p1,p2 確定乙個直線,以直線的乙個端點 假設p2 為原點,設定乙個角度 2 以p2為原點得到向量p2p1 p 向量p旋轉theta角得到向量p1,向量p旋轉 theta角得到向量p2 3 伸縮向量至制定長度,平移...

view類中畫線的4種方法,MFC畫直線

todo 在此新增訊息處理程式 和 或呼叫預設值 首先獲得裝置的表述表 hdc hdc hdc getdc m hwnd 移動到線條的起點 movetoex hdc,m ptorign.x,m ptorign.y,null 畫線 lineto hdc,point.x,point.y released...