基于对话框的MFC,画坐标轴
看到你提出的问题"基于对话框的MFC,画坐标轴",能把回答者的源码发我一份吗,我也是要做这方面的但是新手看不明白,跪求源码啊...
看到你提出的问题"基于对话框的MFC,画坐标轴",能把回答者的源码发我一份吗,我也是要做这方面的但是新手看不明白,跪求源码啊
展开
1个回答
展开全部
void CStartMonitorDlg::OnPaint()
{
CPaintDC dc(this);
//////////////////////////////////////////////////////////////////////////
//*******画坐标图*******
//////////////////////////////////////////////////////////////////////////
//CRect rect;
GetDlgItem(IDC_DIAMETER)->GetClientRect(rect);
rect.Width();
rect.Height();
//用rect.Width()替代nxLength,rect.Height()替代nyLength
int nxLength=400;
int nyLength=300;
int nxDivisionNumber = 7;
int nyDivisionNumber = 6;
int nMeshLength;
CString str;
int i;
CWnd *pWnd = GetDlgItem(IDC_DIAMETER_TIME_CURVE);
CDC* pDC = pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
pDC->Rectangle(0,0,nxLength,nyLength);
CPen* pPenRed = new CPen; //创建画笔对象
pPenRed->CreatePen(PS_SOLID, 1, RGB(255,0,0)); //红色画笔
CPen* pPenGreen = new CPen; //创建画笔对象
pPenGreen->CreatePen(PS_SOLID, 1, RGB(0,255,0));//绿色画笔
CPen* pPenBlue = new CPen; //创建画笔对象
pPenBlue->CreatePen(PS_DOT, 1, RGB(0,0,255)); //蓝色画笔
CPen* pPenBlack = new CPen; //创建画笔对象
pPenBlack->CreatePen(PS_SOLID, 1, RGB(0,0,0)); //黑色画笔
//选中黑色画笔,并保存当前画笔
CGdiObject* pOldPen = pDC->SelectObject(pPenBlack);
pDC->MoveTo(30,10); //绘制坐标轴
pDC->LineTo(30,nyLength-30); //垂直轴
pDC->LineTo(nxLength-10,nyLength-30); //水平轴
//横坐标箭头
pDC->MoveTo(nxLength-10-10,nyLength-30-3);
pDC->LineTo(nxLength-10,nyLength-30);
pDC->LineTo(nxLength-10-10,nyLength-30+3);
pDC->LineTo(nxLength-10-10,nyLength-30-3);
//纵坐标箭头
pDC->MoveTo(27,20);
pDC->LineTo(30,10);
pDC->LineTo(33,20);
pDC->LineTo(27,20);
//横坐标数字
nMeshLength = (nxLength-40)/(nxDivisionNumber+1);
for (i=0; i<nxDivisionNumber+1; i++){
str.Format("%d",i);
pDC->TextOut(27+i*nMeshLength, nyLength-27, str);
}
//横坐标标识
str.Format("时间");
pDC->TextOut(nxLength-33,nyLength-27,str);
//纵坐标数字
nMeshLength = (nyLength-40)/(nyDivisionNumber+1);
for (i=0; i<nyDivisionNumber+1; i++){
str.Format("%d",i*25);
pDC->TextOut(3, nyLength-40-i*nMeshLength, str);
}
//纵坐标标识
str.Format("直径");
pDC->TextOut(1,3,str);
//网格线
pDC->SelectObject(pPenBlue);
nMeshLength = (nxLength-40)/(nxDivisionNumber+1);
for (i=1; i<nxDivisionNumber+2; i++){
pDC->MoveTo(30+i*nMeshLength,nyLength-30);
pDC->LineTo(30+i*nMeshLength,10);
}
nMeshLength = (nyLength-40)/(nyDivisionNumber+1);
for (i=1; i<nyDivisionNumber+2; i++){
pDC->MoveTo(30,nyLength-30-i*nMeshLength);
pDC->LineTo(nxLength-10,nyLength-30-i*nMeshLength);
}
//恢复以前的画笔
pDC->SelectObject(pOldPen);
delete pPenRed;
delete pPenGreen;
delete pPenBlue;
delete pPenBlack;
}
你试试看
{
CPaintDC dc(this);
//////////////////////////////////////////////////////////////////////////
//*******画坐标图*******
//////////////////////////////////////////////////////////////////////////
//CRect rect;
GetDlgItem(IDC_DIAMETER)->GetClientRect(rect);
rect.Width();
rect.Height();
//用rect.Width()替代nxLength,rect.Height()替代nyLength
int nxLength=400;
int nyLength=300;
int nxDivisionNumber = 7;
int nyDivisionNumber = 6;
int nMeshLength;
CString str;
int i;
CWnd *pWnd = GetDlgItem(IDC_DIAMETER_TIME_CURVE);
CDC* pDC = pWnd->GetDC();
pWnd->Invalidate();
pWnd->UpdateWindow();
pDC->Rectangle(0,0,nxLength,nyLength);
CPen* pPenRed = new CPen; //创建画笔对象
pPenRed->CreatePen(PS_SOLID, 1, RGB(255,0,0)); //红色画笔
CPen* pPenGreen = new CPen; //创建画笔对象
pPenGreen->CreatePen(PS_SOLID, 1, RGB(0,255,0));//绿色画笔
CPen* pPenBlue = new CPen; //创建画笔对象
pPenBlue->CreatePen(PS_DOT, 1, RGB(0,0,255)); //蓝色画笔
CPen* pPenBlack = new CPen; //创建画笔对象
pPenBlack->CreatePen(PS_SOLID, 1, RGB(0,0,0)); //黑色画笔
//选中黑色画笔,并保存当前画笔
CGdiObject* pOldPen = pDC->SelectObject(pPenBlack);
pDC->MoveTo(30,10); //绘制坐标轴
pDC->LineTo(30,nyLength-30); //垂直轴
pDC->LineTo(nxLength-10,nyLength-30); //水平轴
//横坐标箭头
pDC->MoveTo(nxLength-10-10,nyLength-30-3);
pDC->LineTo(nxLength-10,nyLength-30);
pDC->LineTo(nxLength-10-10,nyLength-30+3);
pDC->LineTo(nxLength-10-10,nyLength-30-3);
//纵坐标箭头
pDC->MoveTo(27,20);
pDC->LineTo(30,10);
pDC->LineTo(33,20);
pDC->LineTo(27,20);
//横坐标数字
nMeshLength = (nxLength-40)/(nxDivisionNumber+1);
for (i=0; i<nxDivisionNumber+1; i++){
str.Format("%d",i);
pDC->TextOut(27+i*nMeshLength, nyLength-27, str);
}
//横坐标标识
str.Format("时间");
pDC->TextOut(nxLength-33,nyLength-27,str);
//纵坐标数字
nMeshLength = (nyLength-40)/(nyDivisionNumber+1);
for (i=0; i<nyDivisionNumber+1; i++){
str.Format("%d",i*25);
pDC->TextOut(3, nyLength-40-i*nMeshLength, str);
}
//纵坐标标识
str.Format("直径");
pDC->TextOut(1,3,str);
//网格线
pDC->SelectObject(pPenBlue);
nMeshLength = (nxLength-40)/(nxDivisionNumber+1);
for (i=1; i<nxDivisionNumber+2; i++){
pDC->MoveTo(30+i*nMeshLength,nyLength-30);
pDC->LineTo(30+i*nMeshLength,10);
}
nMeshLength = (nyLength-40)/(nyDivisionNumber+1);
for (i=1; i<nyDivisionNumber+2; i++){
pDC->MoveTo(30,nyLength-30-i*nMeshLength);
pDC->LineTo(nxLength-10,nyLength-30-i*nMeshLength);
}
//恢复以前的画笔
pDC->SelectObject(pOldPen);
delete pPenRed;
delete pPenGreen;
delete pPenBlue;
delete pPenBlack;
}
你试试看
追问
这个是基于对话框的么,能把代码整个发给我么,这一段我不知道怎么处理,实在感谢。
追答
1. 添加static静态文本框到对话框上, 并修改其ID为IDC_MYSTATIC
2. 在对话框的申明文件即CXXXDlg.h文件中定义变量:
CWnd *pWnd; //获取控件窗口类指针
3. 在其cpp实现文件中的OnInitDialog()函数中获取:
pWnd = GetDlgItem(IDC_MYSTATIC);
4. 在OnPaint()中的代码就是我之前给你的代码
来自:求助得到的回答
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询