duilib 右键菜单引发了异常: 读取访问权限冲突。 this-> 是 0xFFFFFFFFFFFFFFC7
kelvin 发布于 2024-10-22

上篇文章写到一种创建右键菜单的方法,写一个右键菜单窗体类CTreenodeMenuWnd,在Treenode中增加一个添加回调函数的函数,在树节点的点击事件中回调打开菜单,在

void CTreenodeMenuWnd::Notify(TNotifyUI& msg)
{
	if (msg.sType == "itemclick")
	{
		
		//响应菜单事件
		::MessageBox(NULL, "hello", "hello", MB_OK);

	}
}

弹出对话框,关闭后就报了读取访问权限冲突。 this-> 是 0xFFFFFFFFFFFFFFC7,在UIList.cpp的以下代码中的Select执行后

void CListContainerElementUI::DoEvent(TEventUI& event)
{
   
    if( event.Type == UIEVENT_BUTTONDOWN || event.Type == UIEVENT_RBUTTONDOWN )
    {
        if( IsEnabled() ) {
            m_pManager->SendNotify(this, DUI_MSGTYPE_ITEMCLICK);
            Select();
            Invalidate();
        }
        return;
    }

查看了CWindowWnd类的 m_hWnd在对话框弹出前后的值变了,应该是Messagebox弹出的对话框的响应事件在主界面或者CTreenodeMenuWnd菜单界面里捕获处理,导致改变了m_hWnd,还需进一步分析。

kelvin
关注 私信
文章
98
关注
0
粉丝
0