首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

无窗口ATL运用定时器

2014-06-18 
无窗口ATL使用定时器在一个无窗口的ATL中如何使用定时器呀,在网上搜索了一遍看到有人回调函数,如CALLBACK

无窗口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);

上面是第一种方法
第二种:
http://dev.yesky.com/146/2413646.shtml

热点排行