用了FireViewChange后为什么不能刷新窗口啊?大致代码如下:HRESULT CXXX::OnDraw(ATL_DRAWINFO& di)
{
  ...
//将结果显示到界面上
Function1();
}
void CXXX::Function1()
{
if (m_hThread != NULL)
m_hThread = CreateThread(NULL, 0, (unsigned long(_stdcall*)(void*))_ThreadProc, this,0, &nTID);}
UINT WINAPI CXXX::_ThreadProc(LPVOID pParam)
{
ATLASSERT(pParam);
CXXX* pxxx = reinterpret_cast<CXXX*> (pParam);
pxxx->Thread(); return 0;
}
void CXXX::Thread()
{ bool bExit = false;
while (bExit == false)
{
bExit = Draw();
}
}
bool CXXX::Draw()
{
...
//其他代码
FireViewChange();
Sleep(1000);
}
在CXXX::Draw()的FireViewChange()处设置断点,在CXXX::OnDraw(ATL_DRAWINFO& di)中设置断点,当执行到 CXXX::Draw()函数的FireViewChange(),为什么我用ActiveX控件测试容器的时候,就会调用CXXX::OnDraw(ATL_DRAWINFO& di),而我在用自己写的测试程序的时候却不会调用到CXXX::OnDraw(ATL_DRAWINFO& di)呢?用自己写的程序时,如果加上OnPaint会执行OnPaint,但就是不执行到CXXX::OnDraw(ATL_DRAWINFO& di)去,谁知道这是什么原因啊?应该怎么修改呢?

解决方案 »

  1.   

    回复人: wwwllg(wwwllg)设计有问题,重新来吧!!!______________________________________________请问设计有什么问题啊?
      

  2.   

    HRESULT CXXX::OnDraw(ATL_DRAWINFO& di)
    {
      ...
    //将结果显示到界面上
    Function1();
    }
    可以这样吗?
      

  3.   

    bool CXXX::Draw()
    {
    ...
    //其他代码
    FireViewChange();
    Sleep(1000);
    }
    你的程序估计只能跑一会。系统就跑不动了。机器越好死的越快。
      

  4.   

    bool CXXX::Draw()
    {
    ...
    //其他代码
    FireViewChange(); ->>>>>打掉
    Sleep(1000);
    }
      

  5.   

    HRESULT CXXX::OnDraw(ATL_DRAWINFO& di)
    {
      ...
    //将结果显示到界面上
    Function1();
    }这里的将结果显示在界面上的代码没有写出来,Fuction1是用来启动线程的函数,没错吧。。
    bool CXXX::Draw()
    {
    ...
    //其他代码
    FireViewChange(); ->>>>>打掉
    Sleep(1000);
    }这个是Draw,是自己定义的函数,不是OnDraw,现在是不能响应OnDraw这个不会死吧
      

  6.   

    你调试看看FireViewChange()函数看看m_bInPlaceActive是不是Active,
    我写了一个无窗口得ATL控件,在定时器里调用FireViewChange,那个变量是Inactive
    也像你所说不能刷新窗口inline HRESULT CComControlBase::FireViewChange()
    {
    if (m_bInPlaceActive)
    {
    // Active
    if (m_hWndCD != NULL)
    ::InvalidateRect(m_hWndCD, NULL, TRUE); // Window based
    else if (m_spInPlaceSite != NULL)
    m_spInPlaceSite->InvalidateRect(NULL, TRUE); // Windowless
    }
    else // Inactive
    SendOnViewChange(DVASPECT_CONTENT);
    return S_OK;
    }