如何创建自定义组件并将其添加到基于对话框的应用程序 (MFC)?
Posted
技术标签:
【中文标题】如何创建自定义组件并将其添加到基于对话框的应用程序 (MFC)?【英文标题】:How to create and add a custom made component to a Dialog based app (MFC)? 【发布时间】:2010-04-16 19:50:26 【问题描述】:我想制作一个可用于其他应用程序的定制组件(折线图)。
我不知道两件事:
我应该在哪里使用(在组件类中!)绘图方法,如 FillRect
还是折线?在我应该在 MESSAGE MAP 中定义和映射它的 OnPaint 处理程序中?会
从应用程序对话框的 OnPaint 处理程序调用它(OnPaint 处理程序)
或者从哪里来?
组件制作完成后如何连接到测试应用程序,这将
例如是基于对话框的?我应该在哪里实例化该组件?从一个
MyAppDialog.cpp 的 OnCreate 方法?
几天前我开始在 MFC 中编码,对此我感到很困惑。
提前致谢,
干杯。
【问题讨论】:
【参考方案1】:绘制控件的处理方式与它不是控件时的处理方式完全相同。鉴于您使用的是 MFC,这(至少通常)意味着您在 View 类'OnDraw
中进行绘图(MFC 通常在内部处理 OnPaint,因此您很少接触它)。
在宿主应用程序中插入生成的 ActiveX 控件与插入任何其他 ActiveX 控件一样。假设您在 Visual Studio 中进行开发,您通常会通过打开对话框、在对话框内单击鼠标右键并在弹出的菜单中单击“插入 ActiveX 控件...”来完成此操作。从列表中选择您的控件,它将为控件和代码生成一个包装类,以根据需要创建该类的对象。从对话框代码的角度来看,它就在那里,您可以像使用任何其他控件一样使用它。
【讨论】:
问题是我正在使用基于对话框的应用程序,但其中没有OnDraw
方法,因为没有 myAppView 和 myAppDocument classes
。我什至不知道我应该在我的组件类中继承哪个类。顺便说一句,我不是要制作 ActiveX 控件,而只是制作一个 Cpp 文件,稍后将使用它。也许这里有些事情我完全错了,如果我错了,我很抱歉。感谢您为帮助我所做的努力!
如果您想在对话框中进行自己的绘图,您真的想在控件中进行。【参考方案2】:
要在MFC中创建新组件,必须从窗口类(CWND)创建一个类,
之后,您可以为组件和方法使用 MessageMap,还可以覆盖 CWND::OnDraw 方法来绘制您想要的东西。 在此之前,我建议您查看设备上下文
http://msdn.microsoft.com/en-us/library/azz5wt61(VS.80).aspx
祝你好运朋友。
【讨论】:
以上是关于如何创建自定义组件并将其添加到基于对话框的应用程序 (MFC)?的主要内容,如果未能解决你的问题,请参考以下文章
基于mui.popover的支持多选的弹出列表组件改造以及mui.prompt添加自定义内容