程序要求:
创建一个包含有“代码操作”菜单的应用程序,在“代码操作”菜单中包含有“显示ASCII”、“显示256色”等功能,其中选择“显示ASCII”选项时,在编辑框中显示0~255的ASCII字符,当选择“显示256色”时,在窗口中出现一个填充的矩形框,而且矩形框的填充色从0~255动态依次变化,变化间隔为0.5秒。
         请高手指教!!

解决方案 »

  1.   

    建立一个SDI,添加菜单项,在OnDraw的时候判断是输出字符还是填充矩形。
    输出字符用TextOut
    for (int i = 0; i < 16; i ++)
    for (int j = 0; j < 16 ; j ++)
    {
    char ch = j + i * 16;
    pDC->TextOut(j * 20 + 10, i * 20 + 10, &ch, 1);
    }
    填充矩形要设定一个定时器,累加填充颜色,并且刷新窗口。
    pDC->FillRect(CRect(30,50,100,200), &CBrush(COLORREF(cr)));  //cr就是累加的颜色值
      

  2.   

    TO:pomelowu(羽战士) 
    我写的程序如下:
    int cr;   //定义的全局变量
    void CMainFrame::OnRect()  //菜单单击事件
    {
    bAscii1 = false;
    bRect1 = true;
    Invalidate();
    SetTimer(0,500,NULL);
    }void CMainFrame::OnTimer(UINT nIDEvent)   //计数器
    {
    if(cr<256)
    cr+=1;
    Invalidate();

    CFrameWnd::OnTimer(nIDEvent);
    }void CHomeworkView::OnDraw(CDC* pDC)
    {
    CHomeworkDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc); if(bRect1)
    {
    pDC->FillRect(CRect(30+cr,50,100,200), &CBrush(COLORREF(cr)));
    }
    }
    这样做根本改变不了颜色,请问为什么??
      

  3.   

    将定时器时间改长点试试,也许是pDC->FillRect(CRect(30+cr,50,100,200), &CBrush(COLORREF(cr)));
    执行时间超过0.5秒了。或者跟踪一下。
      

  4.   

    to: sankt(黄景天) 
    [email protected]
    多谢!!
      

  5.   

    错在你不了解OnTimer,或者说这个消息:WM_TIMERThe WM_TIMER message is a low-priority message. The GetMessage and PeekMessage functions post this message only when no other higher-priority messages are in the thread's message queue. 因此,你的程序在执行WM_PAINT消息时是不会执行OnTimer的。
      

  6.   

    你把Timer的间隔时间加大了,只是治标不治本。(你加大时间间隔,实质是让所有其它更高级的消息处理完再执行OnTimer)。