时间控制的问题!送分阿:) 我记得以前vc版本好像有timer控件的,现在没有了。我想让程序在每一段时间都调用一个方法,请问这该怎么做多谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 SetTimer以后响应WM_TIMER消息在OnTimer函数中进行操作即可 呵呵,看来是我和别的搞混了:) 那么你说的SetTimer 是CDateTimeCtrl的成员方法吗? UINT SetTimer( UINT nIDEvent, UINT nElapse, void (CALLBACK EXPORT* lpfnTimer)(HWND, UINT, UINT, DWORD) );CWnd类的函数一般可以第一个设置计时器的id 第二个设置时间间隔 第三个一般填NULL调用以后会自动执行OnTimer中的内容 不过要记得不用的时候调用killtimer();:) 给你个例子吧:有一个button,和一个progress控件#define TIMERID 1000void CComputeDlg::OnStart() { MSG message; m_nTimer = SetTimer(TIMERID, 100, NULL); // 1/10 second ASSERT(m_nTimer != 0); GetDlgItem(IDC_START)->EnableWindow(FALSE); volatile int nTemp; for (m_nCount = 0; m_nCount < nMaxCount; m_nCount++) { for (nTemp = 0; nTemp < 10000; nTemp++) { // uses up CPU cycles } if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) { ::TranslateMessage(&message); ::DispatchMessage(&message); } } CDialog::OnOK();}void CComputeDlg::OnTimer(UINT nIDEvent) {//在这里处理你的WM_TIMER 消息,如果要结束可以调用KillTimer(TIMERID) CProgressCtrl* pBar = (CProgressCtrl*) GetDlgItem(IDC_PROGRESS1); pBar->SetPos(m_nCount * 100 / nMaxCount);} pMF->m_timer=SetTimer(1,2000,0); 怪事阿,为什么编译没有通过 提示error C2660: 'SetTimer' : function does not take 3 parameters 注意调用的地方 如果不是在CWnd类内部的话 调用的是API函数那时原型是UINT_PTR SetTimer( HWND hWnd, // handle to window UINT_PTR nIDEvent, // timer identifier UINT uElapse, // time-out value TIMERPROC lpTimerFunc // timer procedure); SetTimer以后响应WM_TIMER消息在OnTimer函数中进行操作即可 UINT_PTR SetTimer( HWND hWnd, // handle to window UINT_PTR nIDEvent, // timer identifier UINT uElapse, // time-out value TIMERPROC lpTimerFunc // timer procedure); CWnd* wnd=::AfxGetMainWnd(); pMF->m_timer=SetTimer(wnd->m_hWnd,1,2000,0); 我的是多文档工程,ontime的方法是在一个dlg类中实现的。结果发现没有反应,是哪儿错了? 实在感谢大侠了! 在需要变化的地方KillTimer然后再重新SetTimer 一个奇怪的字符串转换问题? 销毁窗口时一个蛋疼的现象,Debug出错,Release通过,但是打开VS第一次运行的话,Debug也可以通过,之后运行就会break。。。具体情况请进来看谢谢 如何让对话框的某个控件响应键盘消息,其他的不响应? 在C++中调用Lib库出问题,大家给看看,谢谢~ 怎么实现CEdit? 长沙的VC高手,有谁愿意当我的老师吗? 紧急求助:createprocess的问题。 请问各位高手!是否大多数的C++编程员都用SDK来编程!而不用MFC? 类似冰河“搜索主机”的功能怎么实现啊? 为何保存为空文件? vc开发数据库,如何做报表打印? 如何在VC里面调用VB的函数?
以后响应WM_TIMER消息
在OnTimer函数中进行操作即可
那么你说的SetTimer 是CDateTimeCtrl的成员方法吗?
一般可以第一个设置计时器的id 第二个设置时间间隔 第三个一般填NULL
调用以后会自动执行OnTimer中的内容
:)
#define TIMERID 1000
void CComputeDlg::OnStart()
{
MSG message; m_nTimer = SetTimer(TIMERID, 100, NULL); // 1/10 second
ASSERT(m_nTimer != 0);
GetDlgItem(IDC_START)->EnableWindow(FALSE);
volatile int nTemp;
for (m_nCount = 0; m_nCount < nMaxCount; m_nCount++) {
for (nTemp = 0; nTemp < 10000; nTemp++) {
// uses up CPU cycles
}
if (::PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) {
::TranslateMessage(&message);
::DispatchMessage(&message);
}
}
CDialog::OnOK();
}void CComputeDlg::OnTimer(UINT nIDEvent)
{//在这里处理你的WM_TIMER 消息,如果要结束可以调用KillTimer(TIMERID)
CProgressCtrl* pBar = (CProgressCtrl*) GetDlgItem(IDC_PROGRESS1);
pBar->SetPos(m_nCount * 100 / nMaxCount);
}
pMF->m_timer=SetTimer(1,2000,0);
怪事阿,为什么编译没有通过
提示error C2660: 'SetTimer' :
function does not take 3 parameters
那时原型是
UINT_PTR SetTimer(
HWND hWnd, // handle to window
UINT_PTR nIDEvent, // timer identifier
UINT uElapse, // time-out value
TIMERPROC lpTimerFunc // timer procedure
);
以后响应WM_TIMER消息
在OnTimer函数中进行操作即可
HWND hWnd, // handle to window
UINT_PTR nIDEvent, // timer identifier
UINT uElapse, // time-out value
TIMERPROC lpTimerFunc // timer procedure
);
pMF->m_timer=SetTimer(wnd->m_hWnd,1,2000,0); 我的是多文档工程,ontime的方法是在一个dlg类
中实现的。结果发现没有反应,是哪儿错了?
实在感谢大侠了!