刚开始学VC,问一个问题大家不要见笑哦!
我在书上看到一个例子,在单文档窗口显示一句话,颜色会渐变。书中写道“先安装一个定时器”,我想请问,定时器要怎么装?需要加控件还是怎么样?
我照着书上介绍的方法,添加代码,可是编译的时候有俩错误:
MenuView.obj : error LNK2001: unresolved external symbol "public: virtual class CScrollBar * __thiscall CMenuView::GetScrollBarCtrl(int)const " (?GetScrollBarCtrl@CMenuView@@UBEPAVCScrollBar@@H@Z)
Debug/Menu.exe : fatal error LNK1120: 1 unresolved externals
不知道是啥意思,应该怎么解决。

解决方案 »

  1.   

    GetScrollBarCtrl()这个函数声明的地方在那里啊?你删掉了吗?有问题啊
    安装一个定时器  SetTimer(1,100,NULL); 就定义一个定时器了
      

  2.   

    // In Cxxx.h
    afx_msg void OnTimer (UINT nTimerID)
    // In Cxxx.cpp BEGIN_MESSAGE_MAP (Cxxx, Cyyy)
        ON_WM_TIMER ()
    END_MESSAGE_MAP ()void Cxxx::OnTimer (UINT nTimerID)
    {
        // Your code
    }建议你找本好书看看
    别看 垃圾书 :)
      

  3.   

    哦 
    忘了 还要有
    SetTimer (... )在 OnCreate 里面就行。
      

  4.   

    用WM_TIMER来设置定时器先请看SetTimer这个API函数的原型 UINT_PTR SetTimer(
      HWND hWnd,              // 窗口句柄
      UINT_PTR nIDEvent,      // 定时器ID,多个定时器时,可以通过该ID判断是哪个定时器
      UINT uElapse,           // 时间间隔,单位为毫秒
      TIMERPROC lpTimerFunc   // 回调函数
    );例如 
    SetTimer(m_hWnd,1,1000,NULL); //一个1秒触发一次的定时器
    在MFC程序中SetTimer被封装在CWnd类中,调用就不用指定窗口句柄了,例如:UINT SetTimer(1,100,NULL); 
    函数反回值就是第一个参数值1,表示此定时器的ID号。第二个参数表示要等待100毫秒时间再重新处理一次。第三个参数在这种方法中一般用NULL。
    注意:设置第二个参数时要注意,如果设置的等待时间比处理时间短,程序就会出问题了。1.2 调用回调函数此方法首先写一个如下格式的回调函数void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime);
    然后再用SetTimer(1,100,TimerProc)函数来建一个定时器,第三个参数就是回调函数地址。二、多个定时器的实现与应用我们在安装定时器时都为其指定了ID,使用多个定时器时,该ID就发挥作用了。
    不使用MFC时,当接收到WM_TIMER消息,WPARAM wParam中的值便是该定时器的ID
    使用MFC时就更简单了,我们为其增加WM_TIME的消息处理函数OnTimer即可,请看如下例子 
    void CTimerTestDlg::OnTimer(UINT nIDEvent) 
    {
     switch (nIDEvent)
     {
     case 24:  ///处理ID为24的定时器
      Draw1();
      break;
     case 25:  ///处理ID为25的定时器
      Draw2();
      break;
     }
     CDialog::OnTimer(nIDEvent);
    }
    当你用回调函数时,我们可以根据nTimerid的值来判断是哪个定时器,例如: 
    void CALLBACK TimerProc(HWND hWnd,UINT nMsg,UINT nTimerid,DWORD dwTime)
    {
       switch(nTimerid)
       {
       case 1:  ///处理ID为1的定时器
             Do1();
             break;
       case 2:  ///处理ID为2的定时器
             Do2();
             break;
       }
    }
    三、取消定时器不再使用定时器后,我们应该调用KillTimer来取消定时,KillTimer的原型如下BOOL KillTimer(
      HWND hWnd,          // 窗口句柄
      UINT_PTR uIDEvent   // ID
    );
    在MFC程序中我们可以直接调用KillTimer(int nIDEvent)来取消定时器。
      

  5.   

    添加WM_TIMER的消息句柄,然后就自动添加了OnTimer函数,你只需要加入你的处理代码,即可。
    然后在程序中需要的地方,用SetTimer设立计数器。
      

  6.   

    第一次来这个社区,感到这里人气真得很旺,大家都很热心!
    我的第一个VC程序终于运行出来了,这要感谢大家的帮助。
    我以前一直都用VB,包括ASP,VB.NET,VBA。感觉VC和VB就是不一样,主要是VC自动帮你生成的东西太多了,刚开始根本搞不清楚应该往哪里加东西,应该怎么加,连不要用的东西,你都不能简单的删除了事,VC真是挺复杂的。