程序要实现的功能很简单:
1、有窗口界面能接受用户操作。
2、有定时器定期执行任务,把执行结果输出在窗口界面上。现在我的做法是:
建立Dialog资源,希望定时器是在Dialog上执行:
DialogBox(hInst, (LPCTSTR)ID_HTML, hWnd, (DLGPROC)About);
SetTimer(hWnd, 1, 1000, (TIMERPROC)TimerProc);
VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime)   
{
MessageBox(hwnd, "33", "消息", MB_OK);
}
但结果是,定时器时在主窗口上执行(就是说打开Dialog时不执行MessageBox,关闭Dialog后才在主窗口上执行)。下面的办法哪个能解决问题?1、获得DialogBox建立的Dialog窗口句柄,SetTimer时传入Dialog句柄。问题是如何获得Dialog句柄?2、能不能用CreateWindow代替DialogBox建立的Dialog窗口,这样能获得Dialog句柄。如何操作?3、把操作控件移到主窗体上。请问如何在主窗体上建立一个按钮?

解决方案 »

  1.   

    在对话框的消息处理函数中调用SetTimer就行了。
      

  2.   

    希望定时器是在Dialog上执行。
    自己创建对话框资源后,从CDialog派生自己的对话框类,用非模式进行创建,它具有自己的消息循环。不要用DialogBox
      

  3.   

    这个办法试了,可行。剩下的问题是,消息处理函数中调用SetTimer,就得从Dialog发送一次消息(入点击某个按钮),有没有办法自动启动定时器?
      

  4.   

    用FindWindows,我这样写:
    HWND hHtml = FindWindow(NULL, "link");
    SetTimer(hHtml, 1, 1000, (TIMERPROC)TimerProc);
    不行,定时器还是要关闭Dialog后才执行定时器回调里的MessageBox。
      

  5.   

    http://topic.csdn.net/u/20090714/00/9aead6b9-b269-4094-8315-27284ee3ef05.html