activex控件的问题....online(有请诸位高手)

kane_yj 2003-04-04 08:44:46
本人需要作一个类似于VB中画线的简单控件,在开发过程中遇到一些问题,请打下帮忙:

1.一般做的控件在容器中的编辑状态都会显示一个矩形的边框,他是怎样产生的,是那个接口的方法,怎样能改变它的形态,如在VB中的那个划线控件

2.在容器中的编辑状态(例如VB),控件只能接收WM_SETCURSOR消息,怎样使它能接受mouse消息(如果解决1,也能接受这些消息)

3.就VB的form编辑容器,他在加载控件的生命周期中(特指编辑状态),他调用控件对象接口方法的过程是怎样的?


谢谢!
...全文
36 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
kane_yj 2003-04-08
  • 打赏
  • 举报
回复
1,应该和容器无关的,我也这样想过,用vc作了一个容器(缺省状态),在VB中使用,在它的上面用line控件,同样显示不出矩形的边框,所以,应该和容器无关
yongdu 2003-04-08
  • 打赏
  • 举报
回复
先声明我没用过VB.所以对vb的东西我不知道。

1.我想你所说的矩形的边框是指控件外的那个标识控件大小及位置的边框吧,那个框是由容器自己所画的,在控件选中激活等不同状态显示不同的边框,线段没边框是由于容器没画而以,所以你想自已控制是不可能的,因为容器已经是这样的了。除非是你自已写的容器。

2.编辑状态是不能接收鼠标的那些消息,因为外部窗口没有将消息传给它并让它处理。我想最好的方法还是将其激活吧。

3.vb的容器,我不知道。反正是会创建这个控件,调用一大把的接口(如你上面所述,这是一个复杂的过程),建立容器与对象联系,建立事件连接等。
kane_yj 2003-04-08
  • 打赏
  • 举报
回复
up
kane_yj 2003-04-08
  • 打赏
  • 举报
回复
up................
kane_yj 2003-04-08
  • 打赏
  • 举报
回复
up
kane_yj 2003-04-07
  • 打赏
  • 举报
回复
up
fly_pig 2003-04-07
  • 打赏
  • 举报
回复
up
winphoenix 2003-04-06
  • 打赏
  • 举报
回复
帮忙up
cjw1881 2003-04-06
  • 打赏
  • 举报
回复
进来学习,友情UP
ysqu 2003-04-06
  • 打赏
  • 举报
回复
http://www.ccidnet.com/tech/guide/2000/12/12/58_1441.html
fly_pig 2003-04-06
  • 打赏
  • 举报
回复
up
coyer 2003-04-04
  • 打赏
  • 举报
回复
1 再ctrl类中,控件所有的绘图操作也是放在OnDraw中的,像画线,就在这里修改好了。默认的代码中,会添加一行画矩形的代码,OnDraw函数和你编写的其他程序的OnDraw是一样的。当普通程序看待就可以了。不用管其他的细节,把你的绘图函数全在这里调用就可以。

2 控件是可以产生事件的,也可以接收和发送事件的,建议看看控件的制作等实例的书。这个一下子说不好。《Visual C++实践与提高-ActiveX篇》这本书很烂,我买了,如果要配套光盘,可以给你发一些例子,请联系我。yy435@sina.com

3 vb的form编辑容器,当你将一个控件从控制板上拖动到容器中时,它就已经生成一个控件的实例,并且已经初始化了。包括控件中的Inistance等函数,都已经执行过了。如果你想问DisPatch等COM指针的问题,这个我也说不清楚了。不好意思,那本《COM本质论》,我也只看懂了一点点。
E17 2003-04-04
  • 打赏
  • 举报
回复
1.COleControl::OnCreate里面做的 OnDraw里面画的
2 鼠标消息 都得的到的啊。。什么lbuttondown,mousemove..都有的啊
3。不清楚了。。。
kane_yj 2003-04-04
  • 打赏
  • 举报
回复
有很多我是从MSDN 的 card和ATLCLT.h中了解的
kane_yj 2003-04-04
  • 打赏
  • 举报
回复
to coyer(网中一虫):
1.你可能没明白我的意思,你说的OnDraw中那个矩形我是知道的,在编辑或者运行状态可以控制;我指的是VB中画线控件与其他控件在拖到form时是有本质不同的,其他控件是由用户选择的矩形范围制定控件大小的,而画线控件只是一条线段范围;我想知道它是怎样实现的,感觉好像是已经做到了容器里面,一般是不好控制的。

2.请注意我说的是编辑状态,就像VB的画线控件一样,在编辑状态就可以控制线段的长短,如果在运行态,mouse消息当然可以得到,但就失去了这个控件的意义。

3.我这几天一直在看这方面的书籍老潘的《com技术与应用》看了几遍,我自己跟踪了一下,大体VB form编辑容器调用一般性控件的是这样的:最先是IOleObject::SetClientSite->IViewObject::SetAdvise->IViewObjectEx::GetViewStatus->IOleObject::GetMiscStatus->IPersistStreamInit::InitNew->IOleObject::GetExtent->IOleObject::DoVerb->IOleInPlaceSite::OnInPlaceActivate->.....IOleInPlaceObject::SetObjectRects->..........->IOleObject::Close->IOleObject::SetClientSite......

当然,我所了解的还有很多不对的地方,希望大家帮忙

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧