广西工学院课程设计用纸
((float)(m_FirstPoint.y)-(float)(m_SecondPoint.y))*flLength/flRlt; float fl1X = (tmpX-(float)(m_SecondPoint.x))*cos(-flAngle/2) (tmpY-(float)(m_SecondPoint.y))*sin(-flAngle/2) + (float)(m_SecondPoint.x); float fl1Y = (tmpY-(float)(m_SecondPoint.y))*cos(-flAngle/2) (tmpX-(float)(m_SecondPoint.x))*sin(-flAngle/2) + (float)(m_SecondPoint.y); float fl2X = (tmpX-(float)(m_SecondPoint.x))*cos(flAngle/2) (tmpY-(float)(m_SecondPoint.y))*sin(flAngle/2) + (float)(m_SecondPoint.x); float fl2Y = (tmpY-(float)(m_SecondPoint.y))*cos(flAngle/2) (tmpX-(float)(m_SecondPoint.x))*sin(flAngle/2) + (float)(m_SecondPoint.y); pDC->SelectObject(&hpen); pDC->MoveTo(m_FirstPoint); pDC->LineTo(m_SecondPoint); pDC->MoveTo(m_SecondPoint.x,m_SecondPoint.y); pDC->LineTo(fl1X,fl1Y); pDC->MoveTo(m_SecondPoint.x,m_SecondPoint.y); pDC->LineTo(fl2X,fl2Y); pDC->MoveTo(fl1X,fl1Y); pDC->LineTo(fl2X,fl2Y); } break; case 4: { pDC->SelectObject(&hpen); pDC->Ellipse(CRect(m_FirstPoint,m_SecondPoint)); pDC->SelectObject(pOldBrush); } break; case 5: { pDC->SelectObject(&hpen); pDC->Ellipse(CRect(m_FirstPoint,m_SecondPoint)); pDC->SelectObject(pOldBrush); } break; case 6: { pDC->SelectObject(&hpen); pDC->Rectangle(CRect(m_FirstPoint,m_SecondPoint));
第 页 共 页
- +
- +
广西工学院课程设计用纸
pDC->SelectObject(pOldBrush); } break; } }
void CGraph::Serialize(CArchive &ar) {//ó?CArchive??DD???t2ù×÷ //>>μ??3Dòoí<<μ??3Dòòa?àí? if(ar.IsStoring()) { ar<
任意曲线类 class CStroke : public CObject//è?òa?ú??μ?àà {
public: CStroke(UINT nPenWidth,COLORREF color);
protected: CStroke(); DECLARE_SERIAL(CStroke)
// Attributes protected: UINT m_nPenWidth; // one pen width applies to entire stroke COLORREF m_color; //颜色 public: CArray
// Operations public: BOOL DrawStroke(CDC* pDC);
第 页 共 页
广西工学院课程设计用纸
public: virtual void Serialize(CArchive& ar); };
实现文件CStroke.cpp
IMPLEMENT_SERIAL(CStroke, CObject, 2) CStroke::CStroke() { // This empty constructor should be used by serialization only }
CStroke::CStroke(UINT nPenWidth,COLORREF color) { m_nPenWidth = nPenWidth; m_color = color; }
void CStroke::Serialize(CArchive& ar) { if (ar.IsStoring()) { ar << (WORD)m_nPenWidth << m_color; m_pointArray.Serialize(ar); } else { WORD w; ar >> w >> m_color; m_nPenWidth = w; m_pointArray.Serialize(ar); } }
BOOL CStroke::DrawStroke(CDC* pDC) { CPen penStroke; if (!penStroke.CreatePen(PS_SOLID, m_nPenWidth, m_color)) return FALSE; CPen* pOldPen = pDC->SelectObject(&penStroke); pDC->MoveTo(m_pointArray[0]); for (int i=1; i < m_pointArray.GetSize(); i++) { pDC->LineTo(m_pointArray[i]); }
第 页 共 页
广西工学院课程设计用纸
}
pDC->SelectObject(pOldPen); return TRUE;
线形状和线宽设置对话框类 class CSettingDlg : public CDialog {
public: CSettingDlg(CWnd* pParent = NULL); //{{AFX_DATA(CSettingDlg) enum { IDD = IDD_DIALOG1 }; UINT m_nLineWidth; //线宽 int m_nLineStyle; //线形状 COLORREF m_color; //线的颜色 //}}AFX_DATA // Overrides // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CSettingDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); //}}AFX_VIRTUAL protected: // Generated message map functions //{{AFX_MSG(CSettingDlg) afx_msg void OnPaint(); //}}AFX_MSG DECLARE_MESSAGE_MAP() };
实现文件CSettingDlg.cpp
CSettingDlg::CSettingDlg(CWnd* pParent /*=NULL*/) : CDialog(CSettingDlg::IDD, pParent) { //{{AFX_DATA_INIT(CSettingDlg) m_nLineWidth = 0; m_nLineStyle = -1; //}}AFX_DATA_INIT }
void CSettingDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX);
第 页 共 页
// DDX/DDV support 广西工学院课程设计用纸
//{{AFX_DATA_MAP(CSettingDlg) DDX_Text(pDX, IDC_EDIT2, m_nLineWidth); DDX_Radio(pDX, IDC_RADIO1, m_nLineStyle); //}}AFX_DATA_MAP }
BEGIN_MESSAGE_MAP(CSettingDlg, CDialog) //{{AFX_MSG_MAP(CSettingDlg) ON_WM_PAINT() //}}AFX_MSG_MAP END_MESSAGE_MAP()
// CSettingDlg message handlers void CSettingDlg::OnPaint()
{//这里添加了代码 用于对话框的示例显示 CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here UpdateData(); CPen pen(m_nLineStyle,m_nLineWidth,m_color);//定义画笔 dc.SelectObject(&pen); CRect rect;//定义矩形区域 GetDlgItem(IDC_STATIC1)->GetWindowRect(&rect);//得到示例静态空间的矩形区域 ScreenToClient(&rect);///坐标转换 dc.MoveTo(rect.left+20,rect.top+rect.Height()/2); dc.LineTo(rect.right-20,rect.top+rect.Height()/2); // Do not call CDialog::OnPaint() for painting messages }
在CMainFrame中添加的代码 添加成员变量CToolBar m_newToolBar 一个新的绘图工具栏 在CMainFrame中的OnCreat()函数中添加的代码: CSplashWnd::ShowSplashScreen(this);//启动画面 Sleep(1000);//程序暂停
//------------------新建画图工具栏-----------------------------------//
if (!m_newToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_newToolBar.LoadToolBar(IDR_DRAW_TOOLBAR)) { TRACE0(\ return -1; // fail to create }
第 页 共 页
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库MFC绘图版 软件说明书(2)在线全文阅读。
相关推荐: