首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

55分,求解ocx里的诡异有关问题

2013-01-28 
55分,求解ocx里的诡异问题mfc activexocx的事件问题需求:当在宿主程序里双击 ocx的时候,弹出一个messagebo

55分,求解ocx里的诡异问题

mfc activex  ocx的事件问题

需求:当在宿主程序里双击 ocx的时候,弹出一个messagebox,提示:双击;

单击的时候,提示:单击。 需求说清楚了,就这2个需求。


于是我用类向导添加了2个事件,一个是dbclick,一个是click.





以下是CtestCtrl里的消息宏,CtestCtrl是COleControl的派生类.



// 消息映射

BEGIN_MESSAGE_MAP(CtestCtrl, COleControl)
ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
ON_WM_LBUTTONDBLCLK()
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()



// 事件映射

BEGIN_EVENT_MAP(CtestCtrl, COleControl)
EVENT_STOCK_DBLCLICK()//这两个是与mfc不同, activex里特有的
EVENT_STOCK_CLICK()
END_EVENT_MAP()




afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);


// CtestCtrl 消息处理程序

//双击
void CtestCtrl::OnLButtonDblClk(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
::MessageBox(NULL,_T("双击"),NULL,NULL);
COleControl::OnLButtonDblClk(nFlags, point);
}


//单击

void CtestCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
::MessageBox(NULL,_T("单击"),NULL,NULL);
COleControl::OnLButtonDown(nFlags, point);
}



idl部分内容为:

[ uuid(66E1FC80-09D3-4EC2-A074-DE36B6735087),
  helpstring("test Control 的事件接口") ]
dispinterface _DtestEvents
{
properties:
//  事件接口没有任何属性

methods:
[id(DISPID_DBLCLICK)] void DblClick(void);
[id(DISPID_CLICK)] void Click(void);
};

遇到的,需要解决的问题:


当点击ocx这个控件后,发现点击 对话框的那个"X", 竟然也会执行
void CtestCtrl::OnLButtonDown(UINT nFlags, CPoint point)里的代码。

这是怎么回事,由于测试比较简单,看帖子的网友们也可以验证一下,是不是如此.





[解决办法]
ocx中也可以有对话框,另外ocx不一定有窗口。我是说让你看看你的CtestCtrl和你所谓的“对话框的那个"X"”这句话中那个对话框是什么关系。我说的对话框也是ocx中的吧,是一种猜测。别人只能给你建议和提示,具体怎么解决,需要自己去搞。

热点排行