我想在窗口的焦点被别的窗口替代(这个窗口最小化或打开别的窗口)是执行KillTimer(1);
在这个窗口重新得到焦点时执行SetTimer(2,60,NULL);请各位高手教教我该怎么做。

解决方案 »

  1.   

    WM_SETFOCUS
    WM_KILLFOCUS的响应函数中处理
      

  2.   

    void CDlg19Dlg::OnKillFocus(CWnd* pNewWnd) 
    {
    CDialog::OnKillFocus(pNewWnd);
        
    if(0 == m_timer)
    m_timer = SetTimer(2,600,NULL);

    }void CDlg19Dlg::OnSetFocus(CWnd* pOldWnd) 
    {
    CDialog::OnSetFocus(pOldWnd);
    if(0 != m_timer)
    {
    KillTimer(m_timer);
    m_timer = 0 ;
    }
    }
      

  3.   

    我在CDialog下编的。在ClassWizard中只有WM_KILLFOCUS而没有WM_SETFOCUS。还有用这两个函数当焦点被窗口上的其他控件得到是会不会也一样执行呢?
      

  4.   

    UINT m_timer = 0 ;//最好弄成类成员
    void CDlg19Dlg::OnTimer(UINT nIDEvent) 
    {
    static int i = 0;
    i++ ; CString str;
    str.Format("%d \n",i);
    TRACE(str);

    CDialog::OnTimer(nIDEvent);
    }void CDlg19Dlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized) 
    {
    CDialog::OnActivate(nState, pWndOther, bMinimized);
    if(WA_ACTIVE == nState || WA_CLICKACTIVE == nState)
    {
    if(0 == m_timer)
    {
    m_timer = SetTimer(2,600,NULL);
    int i;
    i++;
    }
    }
    else if(WA_INACTIVE == nState)
    {
    if(0 != m_timer)
    {
    KillTimer(m_timer);
    m_timer = 0 ;
    }
    }

    }技术上可行
    符合你的要求吗?
    如果不明白,你可以
    (1),给我发短消息(请附帖子的地址).
    (2),根据http://www.vcshare.net上的联系方式与我联系,推荐QQ.
    (3),如果问题简单,请在http://www.vcshare.net/bbs上发帖.
        如果问题比较复杂,请把代码压成*.rar当附件发在我的论坛上发帖.
        同时在www.csdn.net上发帖,并给出在我的论坛的链接.
    ---------------
    压代码前,请先删除debug,release文件夹,及*.opt,*.ncb,*.plg,*.aps.
      

  5.   

    估计你的那个WM_SETFOCUS被过虑掉了,你把它设置中CWND,这样就会有WM_SETFOCUS这个消息了
      

  6.   

    在问一下。这个函数要在什么地方加呢?是不是直接加就行了呢?ClassWizard里没有啊。