MFC对话框绘图教程:如何创建绘图区域

版权申诉
5星 · 超过95%的资源 1 下载量 183 浏览量 更新于2024-10-08 收藏 3.46MB RAR 举报
资源摘要信息:"MFC对话框绘图实现" 知识点一:MFC(Microsoft Foundation Classes)基础 MFC是一个用于简化Windows应用程序开发的C++库。它提供了一套用于封装Windows API的类,使得开发者能够更加便捷地进行Windows应用程序的开发。MFC支持多种应用程序类型的创建,包括但不限于对话框应用程序、单文档界面(SDI)应用程序、多文档界面(MDI)应用程序等。 知识点二:对话框(Dialog)基本概念 对话框是MFC应用程序中的一种界面元素,用于提供用户与程序交互的界面。在MFC中,对话框分为模态对话框和非模态对话框。模态对话框在显示时会阻塞其他窗口的消息处理,而非模态对话框则允许用户同时与多个窗口交互。对话框通常用于收集用户输入、显示信息或进行简单配置。 知识点三:创建对话框应用程序 创建一个基于对话框的MFC应用程序通常需要以下步骤: 1. 使用Visual Studio的MFC应用程序向导创建新项目。 2. 在向导中选择对话框为基础的应用程序类型。 3. 设计对话框界面,添加所需的控件。 4. 编写代码响应控件的事件,实现具体功能。 知识点四:绘图区域的创建和图形绘制 在对话框应用程序中创建绘图区域,通常会涉及到以下几个关键步骤: 1. 在对话框模板中定义一个静态文本控件或用户控件作为绘图区域。 2. 设置该控件的样式为“客户区绘图”(Owner draw)或“透明绘制”(Transparent)。 3. 重写对话框类的某些函数,如OnPaint(),来实现绘图逻辑。 4. 使用GDI(图形设备接口)或GDI+提供的绘图函数进行图形绘制。 GDI函数包括如MoveTo(), LineTo()用于绘制线条,而函数如Rectangle(), Ellipse()则用于绘制矩形和椭圆等形状。 GDI+函数则提供更为丰富的图形绘制和图像处理功能。 5. 处理用户输入事件,如鼠标点击事件,以允许用户交互式地绘制图形。 知识点五:MFC中的消息映射机制 MFC应用程序中,消息映射机制用于将窗口过程的消息映射到类成员函数。消息包括窗口创建、销毁、按键、鼠标移动等多种类型。在对话框类中,开发者通常重写PreTranslateMessage()、OnInitDialog()、OnPaint()等函数来处理特定类型的消息。这些函数通过消息映射宏(如BEGIN_MESSAGE_MAP、ON_COMMAND等)与消息关联,从而响应用户操作。 知识点六:MFC对话框应用的扩展性 MFC对话框应用程序不仅限于静态的用户界面和交互方式,还可以通过继承和扩展MFC类来增加新的功能和更复杂的用户界面逻辑。例如,可以通过添加定时器控件来实现动画效果,或者通过添加网络功能来实现网络通信等。 在本次提供的文件信息中,标题"CreateView.rar_MFC CreateView_MFC对话框绘图"和描述"创建一个基于对话框的MFC工程,在这工程中创建一个绘图区域,并可以绘制图形",强调了创建基于MFC的对话框应用程序并实现绘图功能这一核心任务。开发者可以通过学习以上知识点,掌握MFC对话框编程的精髓,实现丰富的用户交互和图形界面功能。

SELECT DISTINCT c.ID AS id, c.NAME AS contName, c.CONTRACT_NO AS contractNo, c.INSTANCE_ID AS instanceId, c.UNDERTAKE_DEPT_ID AS remindDeptId, c.UNDERTAKE_DEPT_NAME AS sendDeptName, c.CREATE_USER_ID, c.CREATE_USER_NAME AS contractOpteraterName, c.PLAN_STATE AS planState, c.PLAN_STATE_NAME AS planStateName, aw.INSTANCE_ID AS inId, aw.CREATE_TIME AS sendTime FROM ( SELECT c.* FROM ( SELECT c.* FROM ( SELECT c.ORIGINAL_CONTRACT_ID, MAX(CREATE_TIME) CREATE_TIME FROM CONTRACT_DRAFT.C_CONTRACT_INFO c WHERE c.ORIGINAL_CONTRACT_ID IS NOT NULL AND c.ORIGINAL_CONTRACT_ID != '' GROUP BY c.ORIGINAL_CONTRACT_ID ) t LEFT JOIN CONTRACT_DRAFT.C_CONTRACT_INFO c ON t.ORIGINAL_CONTRACT_ID = c.ORIGINAL_CONTRACT_ID AND t.CREATE_TIME = c.CREATE_TIME UNION ALL SELECT c.* FROM CONTRACT_DRAFT.C_CONTRACT_INFO c WHERE ( c.ORIGINAL_CONTRACT_ID IS NULL OR c.ORIGINAL_CONTRACT_ID = '' ) AND c.ID NOT IN ( SELECT c.ORIGINAL_CONTRACT_ID FROM CONTRACT_DRAFT.C_CONTRACT_INFO c WHERE c.ORIGINAL_CONTRACT_ID IS NOT NULL AND c.ORIGINAL_CONTRACT_ID != '')) c WHERE c.deleted_flag = 0 AND c.BELONG = 1 AND sysdate > c.end_date AND c.plan_state IN (4100, 4110, 4120, 4200, 4210, 4220, 5100, 5110, 5120) ) c INNER JOIN (SELECT INSTANCE_ID,create_time,state FROM CONTRACT_DRAFT.C_ACTIVITY_WORKITEMS WHERE state = 'Waiting') aw ON c.INSTANCE_ID = aw.INSTANCE_ID LEFT JOIN (SELECT deleted_flag,CONT_ID FROM CONTRACT_DRAFT.C_GET_PAY_PLAN WHERE deleted_flag = 0 ) g ON c.ID = g.CONT_ID LEFT JOIN CONTRACT_DRAFT.C_OUR_ENTITY_INFO oe ON c.OUR_ENTITY_ID = oe.ID AND oe.DELETED_FLAG = 0 ORDER BY aw.CREATE_TIME DESC 优化

2023-07-08 上传

import FreeCAD import FreeCADGui from PySide import QtGui, QtCore Gui.activateWorkbench("PartWorkbench") FreeCAD.newDocument() class SphereDialog(QtGui.QDialog): def __init__(self): super().__init__() self.setWindowTitle("Create Sphere") self.create_widgets() def create_widgets(self): layout = QtGui.QVBoxLayout() # Radius widget radius_label = QtGui.QLabel("Radius:") self.radius_spinbox = QtGui.QDoubleSpinBox() self.radius_spinbox.setMinimum(0.1) self.radius_spinbox.setMaximum(1000.0) self.radius_spinbox.setValue(10.0) layout.addWidget(radius_label) layout.addWidget(self.radius_spinbox) # Opacity widget opacity_label = QtGui.QLabel("Opacity:") self.opacity_slider = QtGui.QSlider(QtCore.Qt.Horizontal) self.opacity_slider.setMinimum(0) self.opacity_slider.setMaximum(100) self.opacity_slider.setValue(50) layout.addWidget(opacity_label) layout.addWidget(self.opacity_slider) # Create button create_button = QtGui.QPushButton("Create") create_button.clicked.connect(self.create_sphere) layout.addWidget(create_button) self.setLayout(layout) def create_sphere(self): # Get sphere parameters radius = self.radius_spinbox.value() opacity = float(self.opacity_slider.value() / 100) # Create sphere sphere = FreeCAD.ActiveDocument.addObject("Part::Sphere", "Sphere") sphere.Radius = radius sphere.ViewObject.Transparency = int(round(opacity * 100)) # Show in 3D view sphere.ViewObject.Visibility = True FreeCADGui.SendMsgToActiveView("ViewFit") FreeCADGui.Selection.clearSelection() FreeCADGui.Selection.addSelection(sphere) FreeCADGui.SendMsgToActiveView("ViewFit") # Close dialog self.close() dialog = SphereDialog() dialog.show()代码中执行没有球体出现,请修改代码

2023-05-30 上传