只修改了一个函数做测试OnCximageRotatel---向左旋转,
现在贴主要代码如下:void CXDoc::OnCximageRotatel()
{
// TODO: Add your command handler code here
m_MenuCommand=ID_CXIMAGE_ROTATEL;
m_hThread=(HANDLE)_beginthread(RunCxImageThread,0,this);
}
void /*unsigned long _stdcall*/ RunCxImageThread(void *lpParam)
{
CXDoc *pDoc = (CXDoc *)lpParam;
if (pDoc==NULL) return;
if (pDoc->m_mainImage==NULL){
pDoc->m_hThread=0;
return;
} //prepare for elaboration
pDoc->m_mainImage->SetProgress(0);
pDoc->m_mainImage->SetEscape(0); //pDoc->SubmitUndo(); // auxilary thread for progress bar
pDoc->m_hProgress = (HANDLE)_beginthread(RunProgressThread,0,pDoc); pDoc->Stopwatch(0); bool status = true; switch (pDoc->m_MenuCommand)
{
case ID_CXIMAGE_ROTATEL:
status = pDoc->m_mainImage->RotateLeft();
if (status) pDoc->RegionRotateLeft();
break;
}
pDoc->Stopwatch(1); pDoc->m_mainImage->SetProgress(100); if (!status){
CString s = pDoc->m_mainImage->GetLastError();
AfxMessageBox(s);
} pDoc->m_hThread=0; _endthread();}
//////////////////////////////////////////////////////////////////////////////
void /*unsigned long _stdcall*/ RunProgressThread(void *lpParam)
{
CXDoc *pDoc = (CXDoc *)lpParam;
POSITION pos;
CView *pView;
while(pDoc->m_hThread){
Sleep(333);
if(!pDoc->m_mainImage) break;
if(pDoc->m_mainImage->GetEscape()) break;
long n=pDoc->m_mainImage->GetProgress();
pos = pDoc->GetFirstViewPosition();
pView = pDoc->GetNextView(pos);
if (pView) SendMessage(pView->m_hWnd, WM_USER_PROGRESS,n,0);
}
pos = pDoc->GetFirstViewPosition();
pView = pDoc->GetNextView(pos);
if (pView) 
    SendMessage(pView->m_hWnd, WM_USER_PROGRESS,100,0);
Sleep(111);
pos = pDoc->GetFirstViewPosition();
pView = pDoc->GetNextView(pos);
if (pView)
{
SendMessage(pView->m_hWnd, WM_USER_NEWIMAGE,0,0);
}
pDoc->m_hProgress = 0;

_endthread();
return;
}
看CxImage 自带的Demo  SendMessage(pView->m_hWnd, WM_USER_NEWIMAGE,0,0);发出后,视类的onUpdate()马上收到消息,但改了以后执行完线程后,断点进入不了视类的onUpdate(),也就不能更新视类,请求帮忙单文档线程CxImage

解决方案 »

  1.   

    请确认你的SendMessage/PostMessage()的第一个参数HWND是否有效?
      

  2.   

    楼上解答貌似是问题所在
    SendMessage(pView->m_hWnd, WM_USER_NEWIMAGE,0,0);
    你查下WM_USER_NEWIMAGE这个消息对应的是哪个函数的代码,仔细研究下他的代码,或贴出来看看
      

  3.   

    3、4楼说的对,我也找出来了,是有一个自定义消息WM_USER_NEWIMAGE没有处理,分数给3楼了