| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2868 人关注过本帖
标题:新手求助:如何在对话框中创建直角坐标系
只看楼主 加入收藏
yanzixiaohui
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-12-8
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:8 
新手求助:如何在对话框中创建直角坐标系
新手求助:如何在对话框中创建直角坐标系,详细的步骤,本人是新手。
搜索更多相关主题的帖子: 对话框 如何 
2011-06-30 08:48
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
收藏
得分:5 
用GDI画就可以。
2011-06-30 09:02
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
收藏
得分:15 
程序代码:
/*
* 绘制坐标轴(x,y) MM_TEXT
*/
void CSpaceDlg::DrawAXis(CDC& dc)
{
    CRect rectClient;
    GetClientRect(rectClient);

    // 坐标轴长度
    INT nXLength = rectClient.Width() - 20;
    INT nYLength = rectClient.Height() - 20;
    INT nxUnit = 10;                                // 单位
    INT nyUnitHeidht = 5;

    /* 绘制横轴    */
    dc.MoveTo(0, 0);
    dc.LineTo(nXLength, 0);
    
    /* 绘制X箭头 */
    dc.MoveTo(nXLength, 0);
    dc.LineTo(nXLength - 5, - 5);
    dc.MoveTo(nXLength, 0);
    dc.LineTo(nXLength - 5, 5);
    
    /* 绘制X轴刻度 */
    for (int i = 0; i < nXLength / nxUnit; ++i)
    {
        dc.MoveTo(i * nxUnit, 0);
        dc.LineTo(i * nxUnit, -nyUnitHeidht);
    }

    /* 绘制纵轴 */
    dc.MoveTo(0, 0);
    dc.LineTo(0, -nYLength);

    /* 绘制Y箭头 */
    dc.MoveTo(0, -nYLength);
    dc.LineTo(-5, -nYLength + 5);
    dc.MoveTo(0, -nYLength);
    dc.LineTo(5, -nYLength + 5);

    /* 绘制Y轴刻度 */
    for (i = 0; i < nYLength / nxUnit; ++i)
    {
        dc.MoveTo(0, -i * nxUnit);
        dc.LineTo(nyUnitHeidht, -i * nxUnit);
    }
}
2011-06-30 13:24
yanzixiaohui
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-12-8
收藏
得分:0 
回复 3楼 zhoufeng1988
能不能说点具体点,这段代码写到哪?
2011-06-30 15:31
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
收藏
得分:0 
这是一个画坐标系的函数,放在OnPaint消息响应里。
注意在使用的时候,用SetViewportOrg设置坐标原点。
2011-07-01 09:17
yanzixiaohui
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2010-12-8
收藏
得分:0 
回复 5楼 zhoufeng1988
void CMy222Dlg::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
    {
        CDialog::OnPaint();
    }
}
这是原始的OnPaint,怎么改呢?
2011-07-01 09:27
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
收藏
得分:0 
程序代码:
void CSpaceDlg::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);
    }
    else
    {
        CRect rect;
        GetClientRect(&rect);
        CPaintDC dc(this);
        
        /*--------------------------------------*/
        /* 绘制坐标系 */
        /*--------------------------------------*/
        // 设置坐标系原点
        POINT pntOrg = {15, rect.Height() - 15};
        dc.SetViewportOrg(pntOrg);
        
        DrawAXis(dc);
        
        CDialog::OnPaint();
    }
}

图片附件: 游客没有浏览图片的权限,请 登录注册
2011-07-01 13:27
喜鹊王子
Rank: 1
等 级:新手上路
帖 子:105
专家分:0
注 册:2012-12-25
收藏
得分:0 
回复 3楼 zhoufeng1988
这样画的话,只要窗口被覆盖或者调整大小,画的这些线就会立马消失吧?

路漫漫其修远兮,吾将上下而求索。
2013-01-17 13:24
三顾毛庐
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-12-3
收藏
得分:0 
2013-12-03 22:37
快速回复:新手求助:如何在对话框中创建直角坐标系
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020264 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved