| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1389 人关注过本帖
标题:关于五角星缩小再变回来,缩小,这样循环,怎么办
只看楼主 加入收藏
tauke_wang
Rank: 2
等 级:论坛游民
帖 子:32
专家分:11
注 册:2011-9-22
结帖率:100%
收藏
 问题点数:0 回复次数:5 
关于五角星缩小再变回来,缩小,这样循环,怎么办
我在写程序时,通过改变五角星的半径让五角星缩小,再变大,请问如何控制半径的变化,让五角星可以一直缩小,变大,再缩小,再变大???????????
搜索更多相关主题的帖子: 五角星 怎么办 
2011-11-24 14:31
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:0 
不就是图形的缩放么??
StretchBlt可以实现,不过会失真

用GDI+或者OpenGL吧 不过我不会
2011-11-24 17:28
coolpoolliu
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-12-1
收藏
得分:0 
这是mfc基于对话框程的部分节选,关键内容都在,主要是使用一个timer改变半径,不断重绘
BOOL Cjm10Dlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    // 将“关于...”菜单项添加到系统菜单中。

    // IDM_ABOUTBOX 必须在系统命令范围内。
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        BOOL bNameValid;
        CString strAboutMenu;
        bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
        ASSERT(bNameValid);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }

    // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
    //  执行此操作
    SetIcon(m_hIcon, TRUE);            // 设置大图标
    SetIcon(m_hIcon, FALSE);        // 设置小图标

    // TODO: 在此添加额外的初始化代码
    int t;
    t=SetTimer(1,500,NULL);
    if (t==0)
    {
     MessageBox(L"Cannot install timer!");//,MB_OK|MB_ICONSTOP);
    }
    m_dlg.m_red=0;
    m_radius=50;
    m_direction=1;
    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}
void Cjm10Dlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // 用于绘制的设备上下文

        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

        // 使图标在工作区矩形中居中
        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;

        // 绘制图标
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CPaintDC dc(this);
        CPen MyNewPen;
        //MyNewPen.CreatePen(PS_SOLID,10,RGB(255,0,0));
        switch(m_dlg.m_red)
        {
        case 0:MyNewPen.CreatePen(PS_SOLID,10,RGB(255,0,0));
            break;
        case 1:MyNewPen.CreatePen(PS_SOLID,10,RGB(0,255,0));
            break;
        case 2:MyNewPen.CreatePen(PS_SOLID,10,RGB(0,0,255));
            break;
        default:MessageBox(L"Error!");
        }
        CPen *pOPen;
        pOPen=dc.SelectObject(&MyNewPen);
        CRect MyRectangle(20,10,20+m_radius*2,10+m_radius*2);
        dc.Ellipse(&MyRectangle);
        dc.SelectObject(pOPen);
        //OnClickedButtonDraw();
        CDialogEx::OnPaint();
    }
}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
void Cjm10Dlg::OnClickedButtonDraw()
{
    // TODO: 在此添加控件通知处理程序代码
    m_dlg.DoModal();
}


void CAboutDlg::OnDestroy()
{
    CDialogEx::OnDestroy();
    KillTimer(1);
    // TODO: 在此处添加消息处理程序代码
}






void Cjm10Dlg::OnTimer(UINT_PTR nIDEvent)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    m_radius=m_radius+m_direction;
    if(m_radius>=100)
    {
     m_direction=-1;
    }
    if(m_radius<=10)
    {
     m_direction=1;
    }
    Invalidate();
    CDialogEx::OnTimer(nIDEvent);
}
2011-12-01 10:26
tauke_wang
Rank: 2
等 级:论坛游民
帖 子:32
专家分:11
注 册:2011-9-22
收藏
得分:0 
回复 3楼 coolpoolliu
用win32编程,而不用mfc如何实现???
2011-12-05 11:38
wangyf
Rank: 2
等 级:论坛游民
帖 子:40
专家分:45
注 册:2009-6-27
收藏
得分:0 
自己写一个winproc的wm_timer消息咯。。。
2012-01-02 19:35
tauke_wang
Rank: 2
等 级:论坛游民
帖 子:32
专家分:11
注 册:2011-9-22
收藏
得分:0 
回复 5楼 wangyf
请问如何操作
2012-01-04 18:58
快速回复:关于五角星缩小再变回来,缩小,这样循环,怎么办
数据加载中...
 
   



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

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