用了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)去,谁知道这是什么原因啊?应该怎么修改呢?
{
...
//将结果显示到界面上
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)去,谁知道这是什么原因啊?应该怎么修改呢?
{
...
//将结果显示到界面上
Function1();
}
可以这样吗?
{
...
//其他代码
FireViewChange();
Sleep(1000);
}
你的程序估计只能跑一会。系统就跑不动了。机器越好死的越快。
{
...
//其他代码
FireViewChange(); ->>>>>打掉
Sleep(1000);
}
{
...
//将结果显示到界面上
Function1();
}这里的将结果显示在界面上的代码没有写出来,Fuction1是用来启动线程的函数,没错吧。。
bool CXXX::Draw()
{
...
//其他代码
FireViewChange(); ->>>>>打掉
Sleep(1000);
}这个是Draw,是自己定义的函数,不是OnDraw,现在是不能响应OnDraw这个不会死吧
我写了一个无窗口得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;
}