上篇文章写到一种创建右键菜单的方法,写一个右键菜单窗体类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,还需进一步分析。