我要让ontimer实现的功能就是作为定时器,每100毫秒就让offset这个值增加5 
代码如下:求哪位大哥给与帮助撒!!!

SetTimer(1,1000,NULL);   
void CAboutDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
offset+=5;
CDialogEx::OnTimer(nIDEvent);
//RedrawWindow();}c++,ontimer

解决方案 »

  1.   

    你的SetTimer函数,是在CAboutDlg类内启动的吗?
      

  2.   

    我是在void CDialog::OnPaint()中启动的
      

  3.   

    你要在CAboutDlg中启动,放在OnInitDialog()中,如果没有就重载一个
      

  4.   

    别在OnPaint里启动定时器,在对应的对话框里启动定时器,响应WM_TIMER消息
      

  5.   

    定时器只需启动一次就行了,待不用的时候KillTimer(X)就行了。放到OnPaint()函数里面岂不是要狂刷定时器?
    另外,很少在CAboutDlg类中使用Timer(),因为较少在此类中干活。
      

  6.   

    我试了下,可是通过类向导无法创造OnInitDialog()函数,也没找到可以让SetTimer成功运行的地方
      

  7.   

    放到初始化函数里面啊,onpaint函数会被调用好几次
      

  8.   

    我已经把SetTimer函数放进了OnInitDialog里,为什么没有效果?
    BOOL CAboutDlg::OnInitDialog()
    {
    CDialogEx::OnInitDialog(); // TODO:  在此添加额外的初始化
    SetTimer(1,100,NULL); return TRUE;  // return TRUE unless you set the focus to a control
    // 异常: OCX 属性页应返回 FALSE
    }
      

  9.   

    大神呢,CAboutDlg需要设置什么定时器啊。有效果吗?
    CAboutDlg是关于界面。也就显示个版本信息而已啊
      

  10.   

    在下面类似下面的地方添加定时器的消息说明 ON_WM_TIMER()BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
    ON_WM_TIMER()
    END_MESSAGE_MAP()
      

  11.   


    class CAboutDlg : public CDialog
    {
    public:
    CAboutDlg();

    // 对话框数据
    enum { IDD = IDD_ABOUTBOX };
    UINT m_Timer;
    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持// 实现
    protected:
    DECLARE_MESSAGE_MAP()public:
    virtual BOOL OnInitDialog();
    afx_msg void OnTimer(UINT_PTR nIDEvent);
    afx_msg void OnBnClickedOk();
    };CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
    {
    }void CAboutDlg::DoDataExchange(CDataExchange* pDX)
    {
    CDialog::DoDataExchange(pDX);
    }BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
    ON_WM_TIMER()
    ON_BN_CLICKED(IDOK, &CAboutDlg::OnBnClickedOk)
    END_MESSAGE_MAP()int iInum = 0;
    void CAboutDlg::OnTimer(UINT_PTR nIDEvent)
    {
    //响应消息
    CString strPrint = _T("");
    strPrint.Format(_T("%03.3d"), iInum++);
    CClientDC dc(this);
    dc.TextOut(0,0, strPrint);
    CDialog::OnTimer(nIDEvent);
    }BOOL CAboutDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();
    //启动计时器
    m_Timer = SetTimer(1, 1000, 0);
    return TRUE; 
    }void CAboutDlg::OnBnClickedOk()
    {
    //关闭计时器
    KillTimer(m_Timer);
    OnOK();
    }
      

  12.   

    在虚函数里面 输入init就会出现在消息里面输入wm_timer就有settimer
      

  13.   

    谢谢各位大哥了,我已经搞定了
    BOOL CSimulationoscilloscopeDlg::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: 在此添加额外的初始化代码
    SetTimer(1,100,NULL);
    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
    }void CSimulationoscilloscopeDlg::OnTimer(UINT_PTR nIDEvent)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值 offset+=5;
    CDialogEx::OnTimer(nIDEvent);
    RedrawWindow();
    }