我为主对话框定义了一个需要弹出的子对话框的类在类中的settimer()不起作用阿,消息函数我都定义了这是为什么?你们遇见过吗?

解决方案 »

  1.   

    OnTimer(UINT nIDEvent) 必须属于弹出对话框的类。如果想在子对话框类中调用主对话框类的WM-TIMER,用:parent->SetTimer();
      

  2.   

    那我定义自己的SetTimer();为什么不行啊?
      

  3.   

    不能自己定义。自己定义就只是一个函数,而没有带消息驱动。必须通过VC6的ClassWizard或者VC7的属性栏里添加
      

  4.   

    你在子对话框类中定义OnTimer函数了吗?
      

  5.   

    BOOL Expands::OnInitDialog() 
    {
    CDialog::OnInitDialog();


    // TODO: Add extra initialization here
    SetTimer(1,1000,0);
    return TRUE;  // return TRUE unless you set the focus to a control
                  // EXCEPTION: OCX Property Pages should return FALSE
    }
    void Expands::OnTimer(UINT nIDEvent) 
    {
    if(nIDEvent==1)
    {
    CClientDC dc(GetDlgItem(IDC_EGRAPH));
        CBrush MyBrush(RGB(124,221,26));
        CPen   MyPen(PS_INSIDEFRAME,1,RGB(0,0,0));

    dc.SelectObject(&MyBrush);
        dc.SelectObject(&MyPen);
        int x,y;
    dc.Rectangle(0,0,751,651);
    CPen   MyPenL;
    LOGPEN lp;
    lp.lopnColor=RGB(154,154,154);
        lp.lopnStyle=PS_SOLID;
    lp.lopnWidth.x=1;
    MyPenL.CreatePenIndirect(&lp);
    dc.SelectObject(&MyPenL);
    for(x=5;x<750;x+=5)
    {
    dc.MoveTo(x,0);
        dc.LineTo(x,650);
    }
    for(y=5;y<650;y+=5)
    {
    dc.MoveTo(0,y);
        dc.LineTo(750,y);
    }
    }
    CDialog::OnTimer(nIDEvent);
    }
    Expands是我生成对话框的所属的类,CDialog
    这段代码仔程序中是没有反应的,并不能画图。
    画图代码不会有问题,在新对话框的void Expands::OnPaint() 函数中也是这段代码,能显示所期待的图,只不过背景是黑色。而定时器里面的图无非把黑色改成了绿色而已。
      

  6.   

    itmaster(爱逖马斯特) ( ) ,如果我犯低级错误,就自打屁股100下,呵呵。
      

  7.   

    可以试一下用另外一种SetTimer的方法,就是第三个参数用自定义的函数。这个可能行。
    我试试先。
      

  8.   

    我在子窗口的类里定义Timer和OnTimer函数,没有出现任何问题啊。
    如果不是在窗口类里定义的,好像是不可以的,就算用API的方法定义,还是要父窗口的句柄的。Timer就是联系到窗口的。
    用SetParent的方法会比较好吧。
      

  9.   

    你的子窗口得类是什么阿?我是在我的子dialog对话框类中定义的阿
      

  10.   

    我也试过你的代码了,不过把
    CClientDC dc(GetDlgItem(IDC_EGRAPH));
    改为CClientDC dc(this);
    结果,可以显示啊,绿色的,很多小格子,而且1秒中闪一下,应该是画图成功才会闪的。没有问题啊!!!
      

  11.   

    真是奇怪,按照你的方法,还是不行啊。
    我想不是CClientDC dc(GetDlgItem(IDC_EGRAPH))的问题了
    过会儿我把主对话框的settimer响应函数去掉。我担心是不是这个问题你可以在主对话框中也添加settimer函数试试看。
      

  12.   

    我这里运行很好,IDC_EGRAPH我用的一个Group Box
      

  13.   

    发代码给我好吗?
    邮箱[email protected]
    我想看看我到底那里出了问题。
      

  14.   

    奇怪,为什么我自己在其他地方试的,子窗口也能响应—WM_TIMER函数。但是我这个出问题的PROJECT就是不响应!