mfc 在对话框中显示直角坐标系

散点图已经画好,需添加坐标。
void CMfc00Dlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
//绘制矩形框
CDC *pDC=GetDC();
CRect rect;
GetClientRect(&rect);
pDC->Rectangle(200,10,rect.right-10,rect.bottom-10);
CDialog::OnPaint();
}
}

1. 添加static静态文本框到对话框上, 并修改其ID为IDC_MYSTATIC

2. 在对话框的申明文件即CXXXDlg.h文件中定义变量:
CWnd *pWnd; //获取控件窗口类指针
CDC *pDC; //获取控件的CDC指针
3. 在其cpp实现文件中的OnInitDialog()函数中获取:
pWnd =
GetDlgItem(IDC_STATIC);

pDC = pWnd->GetDC();
4. 在OnPaint()中的代码如下:
void CXXXDlg::OnPaint()
{
CPaintDC dc(this); // device context for painting
CString str;
int i, j;
int x, y;
//强制更新绘图, 不可少, 否则绘图会出错
//使static控件区域无效
pWnd->Invalidate();
//更新窗口, 此时才真正向系统发送重绘消息, 没有这句你可以试下, 绝对出问题
pWnd->UpdateWindow();

pDC->Rectangle(0, 0, 380, 390); //画一个矩形框
CPen *pPenRed = new CPen(); //创建画笔对象
pPenRed ->CreatePen(PS_SOLID, 1, RGB(255, 0, 0)); //红色画笔
CPen *pPen = NULL;
//选中当前红色画笔,并保存以前的画笔
CGdiObject *pOldPen = pDC ->SelectObject(pPenRed);
pDC ->MoveTo(20, 20); //绘制坐标轴
pDC ->LineTo(20, 360); //竖起轴
pDC ->LineTo(360, 360); //水平轴
//写X轴刻度值
for(i = 0; i <= 10; i ++)
{
str.Format("%d", i);
pDC ->TextOut(17 + 30 * i, 365, str);
//绘制X轴刻度
pDC ->MoveTo(i * 30 + 20, 360);
pDC ->LineTo(i * 30 + 20, 355);
}

//写Y轴刻度值
for(i = 1; i <= 10; i ++)
{
str.Format("%d", i);
pDC ->TextOut(2, 360 - 30 * i - 5, str);
//绘制Y轴刻度
pDC ->MoveTo(25, 360 - 30 * i);
pDC ->LineTo(20, 360 - 30 * i);
}
//绘制X箭头
pDC ->MoveTo(350, 357);
pDC ->LineTo(360, 360);
pDC ->LineTo(350, 363);
//绘制Y箭头
pDC ->MoveTo(17, 30);
pDC ->LineTo(20, 20); //绘制左边箭头
pDC ->LineTo(23, 30); //绘制右边箭头

//恢复以前的画笔
pDC ->SelectObject(pOldPen);
delete pPenRed;
if(pPen != NULL)
delete pPen;
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2014-07-03
我是用的一个TeeChart 插件,然后插入各个坐标点还没有搞明白,不过应该不难,还在进行中。

直接用函数绘制坐标轴,我是真的不会。

mfc 在对话框中显示直角坐标系
1. 添加static静态文本框到对话框上, 并修改其ID为IDC_MYSTATIC 2. 在对话框的申明文件即CXXXDlg.h文件中定义变量:CWnd *pWnd; \/\/获取控件窗口类指针 CDC *pDC; \/\/获取控件的CDC指针 3. 在其cpp实现文件中的OnInitDialog()函数中获取:pWnd = GetDlgItem(IDC_STATIC);pDC = pWnd->Get...

MFC,基于对话框的,想在对话框中的某一区域画带刻度的坐标轴
void SetCoordinatesOffset(int nX,int nY);\/\/设置坐标 void SetCoordinates(int nX,int nY);\/\/设置坐标系长度 void SetCoordinatesLength(int nHLength,int nVLength);private:\/\/坐标系刻度垂直长度和水平长度 intm_nVLength;intm_nHLength;\/\/坐标偏移量,绝对坐标在客户区起始位置 intm_nXOffset;i...

MFC如何获取控件在对话框上的位置坐标
首先在对话框上并排放置两个同样大小的picture控件,将他们的标识分别设成IDC_LEFT和IDC_RIGHT,然后添加两个编辑框用于显示picture控件的大小,给这两个编辑框添加相应的数据成员m_row和m_colume。添加一个按钮用于连接picture控件中的点,为这个按钮添加成员函数OnMatch() 。void CControlDlg::OnMatch(){...

在MFC中用VS010在对话框程序上画直角坐标系
我写过在MFC对话框中绘制n次多项式函数图像(含直角坐标系)的程序,这样的效果

怎样用MFC的对话框中画坐标曲线图
单文档的绘图一般都在OnDraw()当中进行,基于对话框的是OnPaint()你只需要计算出合适的坐标就好了。利用CDC类下的LineTo MoveTo 绘制直线即可 对应的曲线也有相应的函数,这是静态的。我这里有一个动态绘制的Demo,以前参考过的 不知道符不符合楼主的要求。要的话可以给个邮箱 ...

MFC中,关于得到鼠标在对话框上的坐标值
GetCursorPos( &point );然后得到picture控件rect。CRect rect;::GetClientRect(m_ctrlPic.GetSafeHwnd(), &rect);然后把当前鼠标坐标转为相对于rect的坐标。::ScreenToClient(m_ctrlPic.GetSafeHwnd(), &point);然后判断该点坐标是否在rect内,在就显示 if(rect.PtInRect(point)){ CString strPos;str...

MFC picture控件画坐标系
是CS_PARENTDC, 画不好容易出界;解决方法:1. 直接在对话框的WM_PAINT画, 不用PICTURE;2.或者OVERRIDE一个PICTURE, 在它的WM_PAINT里画.3.更好的作法是OVERWRITE的一个CButton,4.最后的是OVERRIDE一个CWND, 用CS_CLASSDC;别气馁, 接着来, 你对WIDDOWS GUI还需多了解.

MFC对话框中,向对话框中添加水平和垂直的滚动条,拉动滚动条的浮标使得里...
记得你问过我问题,建议你在OnInitDialog里面判断屏幕分辨率,如果分辨率小于要求,再通过SetWindowStyle、MoveWindow之类的函数代码增加滚动条。对话框的滚动是要求自己控制的,文库例子中只是一半,另一半横向滚动意思相同。如果你这个是一个项目,给你建议:一个界面中不适合做太多控制,你可以将同类控制放在...

MFC中,对话框添加位图现实问题.
为对话框添加WM_SIZE消息,每当对话框大小发生改变时都会响应这个消息,你就在这个消息响应函数里面添加代码

一个关于关于MFC的问题:如何在对话框上画图
先定义BOOL m_bMove=false;void CDrawView::OnLButtonDown(UINT nFlags, CPoint point){ \/\/ TODO: Add your message handler code here and\/or call default m_ptOrigin=point;m_ptOld=point;m_bMove=TRUE;\/\/保存这个坐标点 CView::OnLButtonDown(nFlags, point);} void CDrawView::OnMouseMove...

相似回答