无窗口ATL使用定时器
在一个无窗口的ATL中如何使用定时器呀,在网上搜索了一遍看到有人回调函数,如CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)
这个回调函数里窗口句柄hwnd又从何而来呢,还有没有窗口怎么用消息触发这个函数呢
[解决办法]
不用管hwnd,你在这个回调里面做你想做的
[解决办法]
可以自己创建一条线程来做定时管理器,需要用定时器的地方,把自己的时间间隔和回调函数放在线程的等待队列中,线程发现时间到了就回调你的函数
[解决办法]
可以考虑用timeSetEvent
[解决办法]
UINT UIThread(VOID *contxt)
{
XXX *pXXX = (XXX*)contxt;
MSG msg;
WNDCLASSEX wc;
memset(&wc,0,sizeof(WNDCLASSEX));
wc.cbSize = sizeof(wc);
wc.lpfnWndProc = (WNDPROC)UIWindowProc;
wc.hInstance = AfxGetInstanceHandle();
wc.lpszClassName = UPSWINDOWCLASS;
if(::RegisterClassEx(&wc) == NULL)
AfxMessageBox("RegisterClassEx error.");
if((pXXX->m_hWnd = ::CreateWindow(UPSWINDOWCLASS,NULL,WS_POPUP
[解决办法]
WS_CHILD,0,0,0,0,pXXX->m_hParentWnd,
NULL,wc.hInstance,NULL)) == NULL)
{
AfxMessageBox("CreateWindow error.");
return 0;
}
while(::GetMessage(&msg,NULL,0,0))
{
::TranslateMessage(&msg);
::DispatchMessage(&msg);
}
return 0;
}//pXXX->m_hParentWnd看你需不需要父窗口
LRESULT CALLBACK CSmartUPS::SmartWindowProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
HWND hPWnd = UPScontxt->m_hParentWnd;
int ret = 0;
EnterCriticalSection(&UPScontxt->m_csUIDel);
switch(message)
{
case WM_CREATE:
break;
case WM_TIMER:
break;
default:
break;
}
}
AfxBeginThread(UIThread,this);