关于窗口焦点的问题。 我想在窗口的焦点被别的窗口替代(这个窗口最小化或打开别的窗口)是执行KillTimer(1);在这个窗口重新得到焦点时执行SetTimer(2,60,NULL);请各位高手教教我该怎么做。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 WM_SETFOCUSWM_KILLFOCUS的响应函数中处理 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 ; }} 我在CDialog下编的。在ClassWizard中只有WM_KILLFOCUS而没有WM_SETFOCUS。还有用这两个函数当焦点被窗口上的其他控件得到是会不会也一样执行呢? 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. 估计你的那个WM_SETFOCUS被过虑掉了,你把它设置中CWND,这样就会有WM_SETFOCUS这个消息了 在问一下。这个函数要在什么地方加呢?是不是直接加就行了呢?ClassWizard里没有啊。 如何在button上显示一个bmp中的原形 send VC 资源文件如何汉化? 求解一个编辑框问题 如何用ClassWizard创建一个派生自CBitmap的新类? 关于窗口过程的问题,纳闷啊~~~ 请问大家 天格科技 音频算法工程师的薪资待遇怎样的? 有一个debug版的动态联结库文件,能得到原码吗? (高分)怎么禁止系统给程序加载钩子动态库?(急用,请高手帮忙!) 关于CFileFind的用法 请问.H文件和.LIB文件有何不同。 关于2004版qq密码框的问题,请高人指点,或有兴趣的朋友一块讨论
WM_KILLFOCUS的响应函数中处理
{
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 ;
}
}
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.