当类向导损坏时,将计时器 (WM_TIMER) 处理程序添加到 Visual C++ 6.0?

Posted

技术标签:

【中文标题】当类向导损坏时,将计时器 (WM_TIMER) 处理程序添加到 Visual C++ 6.0?【英文标题】:Add a Timer (WM_TIMER) handler to a Visual C++ 6.0 when Class Wizard is broken? 【发布时间】:2013-01-20 19:37:37 【问题描述】:

我有一个 MFC Visual C++ 应用程序,它似乎无法在类向导中工作,但是,我有一个视图 (CServerView),我想向其中添加一个 WM_TIMER 事件处理程序。

我已经知道如何调用CWnd::SetTimerCWnd::KillTimer,但十多年来我没有做的是修改消息映射。我不确定我应该为我的 CView 子类修改的地图是 ServerView.cpp 文件的这一部分,还是 ServerView.h 中的某个部分:

BEGIN_MESSAGE_MAP(CServerView, CListView)
    //AFX_MSG_MAP(CServerView)
    ON_COMMAND(ID_DRIVER_START, OnDriverStart)
    ON_UPDATE_COMMAND_UI(ID_DRIVER_START, OnUpdateDriverStart)
        ...
    // Standard printing commands
END_MESSAGE_MAP()

这可能是一件微不足道的事情,但我面临的两个复杂问题是在线文档都是针对最近的 Visual Studio 版本的,而我在 Visual C++ 6.0 中坚持这样做

【问题讨论】:

【参考方案1】:

在你的头文件中:

afx_msg void OnTimer(UINT_PTR nIDEvent);

在您的 cpp 文件中:

BEGIN_MESSAGE_MAP(CMyView, CView)
    ON_WM_TIMER()
END_MESSAGE_MAP()

void CMyView::StartTimer

    m_nTimerID = SetTimer(2348,100,0);


void CMyView::OnTimer(UINT_PTR nIDEvent)

    if(nIDEvent==m_nTimerID)
    
    
    CView::OnTimer(nIDEvent);

【讨论】:

太棒了。我错过了标题中的部分,并且我错误地实现了我的 OnTimer()。【参考方案2】:

我认为它被称为 ON_TIMER 或 ON_WM_TIMER。检查已安装的包含定义 ON_COMMAND&Co 的位置,在那里你会找到它。或者,在 MS' 在线搜索 MSDN。 顺便说一句,这个东西的名字没有改变,所以最近版本的文档还可以。我强烈建议升级,VC6,又名 VS98,今年已经 15 岁了,MS 早就停止了对它的任何支持。

【讨论】:

我知道。我要升级了。但是今天,我无法将这个巨大的应用程序更改为新的 VC++ 版本。 :-)

以上是关于当类向导损坏时,将计时器 (WM_TIMER) 处理程序添加到 Visual C++ 6.0?的主要内容,如果未能解决你的问题,请参考以下文章

MFC显示系统时间

MFC 随机矩形

走进windows编程的世界-----消息处理函数

Windows定时器

WIN32 定时器消息

如何在win32里面设置一个计时器?