|
利用mfc编写activex控件(3) 
custom:
下面我们介绍如何定义用户自定义事件
我们想完成以下功能,如果用户鼠标在圆或者椭圆内做的点击操作则触发一个事件。 1.击classwiard中activex events属性页 2.点击add event…按钮 3.在exteranl name里面填写ClickIn 4.结束 现在我们就定义好了这个事件。关键是我们要考虑如何触发这个事件。也就是当我们在圆或者椭圆内单击鼠标左键的时候要触发这个事件。这里我们可以想到要添加一个lbuttondown消息。 1.Classwizrd中确定选择CSampleCtrl类 2.添加消息WM_LBUTTONDOWN 3.结束 在类CsampleCtrl添加一个成员函数BOOL CSample3Ctrl::InCircle(CPoint& point) 函数内容如下: CRect rc; GetClientRect(rc); // Determine radii double a = (rc.right - rc.left) / 2; double b = (rc.bottom - rc.top) / 2; // Determine x, y double x = point.x - (rc.left + rc.right) / 2; double y = point.y - (rc.top + rc.bottom) / 2; // Apply ellipse formula return ((x * x) / (a * a) + (y * y) / (b * b) <= 1); 然后编译LBUTTONDOWN的响应函数 void CCirc3Ctrl::OnLButtonDblClk(UINT nFlags, CPoint point) { // FLASH the color of the control if within the ellipse. if (InCircle(point)) { FireClickIn(); } COleControl::OnLButtonDblClk(nFlags, point); } 到这里我们就完成ClickIn事件的编写和响应过程,让我们来测试一下。
|