release C++ MFC 触发刷新消息死机

错误情况1:

kernel32.dll!7c812fd3()

[下面的框架可能不正确和/或缺失,没有为 kernel32.dll 加载符号]
T5CAPP14.exe!CTH_PIMSBaseDoc::UpdateAllViewsEx(CView * pSender=0x00000000, long lHint=0, CObject * pHint=0x00000000) 行76 C++
T5CAPP14.exe!CTH_PIMSMngTreeView::OnSelchanged(tagNMHDR * pNMHDR=0x0012f76c, long * pResult=0x0012f458) 行639 C++
mfc90.dll!78669559()

内部代码:

void CTH_PIMSBaseDoc::UpdateAllViewsEx(CView* pSender, LPARAM lHint ,
CObject* pHint )
{
this->UpdateAllViews(pSender,lHint,pHint);
bModified = FALSE;
}

4个回答

CView * pSender=0x00000000, long lHint=0, CObject * pHint=0x00000000

这三个参数值可能没传正确

bearweman1
bearweman1 调用是在DOC里面
2 年多之前 回复
bearweman1
bearweman1 如果pSender为NULL,说明该函数始终文档类的成员函数中被调用, 此时就要更新与该文档类相关联的所有View类。 如果pSender不为NULL,说明该函数是在某一个View类的成员函数中被调用的
2 年多之前 回复

CTH_PIMSMngTreeView::OnSelchanged函数中你的代码写了些什么?

VisualEleven Eleven Ds Rxr 2017.03.27 18:02
采纳
CTH_PIMSMngTreeView::OnSelchanged函数中你的代码写了些什么?

void CTH_PIMSMngTreeView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult)
{
CPIMSTransactCheck oTransCheck(_T("CTH_PIMSMngTreeView::OnSelchanged"));

if(m_bRefreshing) return;

m_bRefreshing = TRUE;

CLEAR_COMMAND_UI_STATE

CWaitCursor tempWait;
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
// TODO: Add your control notification handler code here

// 改变文档的当前的对象
CTH_PIMSTreeViewCursor CurrentTreeItem(pNMTreeView->itemNew.hItem,this);
CTH_PIMSTreeItemData * pItemData = CurrentTreeItem.GetTreeItemData();

// 获得当前节点的引用对象标识
CTH_ObjectRef CurObjRef;
CurObjRef = pItemData->GetData();

CT5AppDoc * pPIMSMngDoc = (CT5AppDoc *)this->GetDocument();

//判断当前选择的对象是否是离线文档对象
if (!isEnableFileBrowser(CurrentTreeItem)) {
    //隐藏离线浏览停靠栏
    GetMainFrame()->BrowserOfflineFile(pPIMSMngDoc, this, FALSE, FALSE);
} else {
    //更新离线浏览停靠栏的显示内容
    //  注意:如果离线浏览停靠栏没有处于显示状态,则不强制显示

// GetMainFrame()->BrowserOfflineFile(pPIMSMngDoc, this, TRUE, FALSE);
//等待树控件完成选择节点的切换后,再响应此消息
PostMessage(TCM_UPDATE_T5BROWSER_WHEN_SWITCHFRAME, 0, 0);
}

pPIMSMngDoc->SetCurrentObj(CurObjRef);
// 重置当前的历史记录号,表示使用最新的版本
pPIMSMngDoc->ResetCurrentHistoryNum();

// 获得当前节点的目标元素对象

IOb_ObjectPtr  pTargetElementPtr;
pTargetElementPtr = pPIMSMngDoc->GetTargetElement(CurObjRef);

IOb_EleLinkFolderPtr pEleLinkFolderPtr = NULL;
pEleLinkFolderPtr = pTargetElementPtr;

// 如果不是链接分类对象,则从数据库中读取
if(pEleLinkFolderPtr == NULL)
{
    pTargetElementPtr->RetrieveMainPropertys();
    if(pTargetElementPtr->GetLastResult() != 0 )
    {
        T5MessageBox((TCHAR *)pTargetElementPtr->GetLastErrMsg(),MB_OK|MB_ICONWARNING);
        m_bRefreshing = FALSE;
        m_LastViewCursor = CurrentTreeItem;
        *pResult = 0;
        return ;
    }
    pTargetElementPtr->GetOwnerInfo()->Retrieve();

    //add by cw 20090819 
    //更新当前的项目组快速切换信息
    UpdateProjectGroupInfo();
}

// 通知文档的所有视图文档已经发生变化
pPIMSMngDoc->UpdateAllViewsEx(NULL);

this->UpdateTreeItem(m_LastViewCursor);

m_LastViewCursor = CurrentTreeItem;

//[ add by luoxb 2010-10-19
// 根据右键上下文菜单应显示的内容更新Ribbon菜单上的对应功能列表,包括"新建","扩展功能"
UpdateRibbonFromContextMenu();
//] end add 2010-10-19

//[ add by luoxb 2010-12-12
UpdateOpContext(CurrentTreeItem);
//] end add 2010-12-12

GetApp()->OnIdle(0);

TRACE0("CTH_PIMSMngTreeView::OnSelchanged\n");
*pResult = 0;
m_bRefreshing = FALSE;

}

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!