打造半透明对话框窗口的VC界面编程实例

版权申诉
0 下载量 38 浏览量 更新于2024-11-27 收藏 29KB RAR 举报
资源摘要信息:"本资源主要涉及到在Visual C++环境中创建半透明对话框窗口的界面编程实践。提供了一个名为PartTransDlg的程序源码,该源码作为一个示例(demo),演示了如何在Visual C++中实现对话框窗口的半透明效果。" 知识点详细说明: 1. **Visual C++**: Visual C++是微软公司推出的一款集成开发环境(IDE),属于Visual Studio产品系列的一部分。它广泛应用于Windows平台下的C++应用程序开发,提供了丰富的开发工具和库函数支持,极大地简化了C++语言的开发过程。 2. **界面编程**: 界面编程通常指的是创建和设计用户交互界面的编程活动。在C++中,界面编程涉及到使用各种图形库和框架,如WinAPI、MFC(Microsoft Foundation Classes)、wxWidgets等。通过这些工具和库,程序员可以设计和实现窗口、控件以及用户交互逻辑。 3. **对话框窗口**: 对话框是用户界面中的一个常用组件,通常用于显示信息、接收用户输入或进行选项设置。在C++中,对话框可以通过WinAPI中的Dialog Box函数创建,也可以通过MFC提供的CDialog类来实现。 4. **半透明效果**: 半透明效果允许用户看到窗口背后的其他内容,这在UI设计中可增加美观性,并能够提供更佳的用户体验。在Windows平台上实现半透明效果,通常可以通过设置窗口的扩展样式WS_EX_LAYERED来实现,并使用API函数SetLayeredWindowAttributes来调节窗口的透明度。 5. **程序源码**: 源码指的是程序的原始代码,它是程序员编写的,用以指示计算机如何执行特定任务的一系列指令和声明。源码通常需要通过编译器转换为可执行文件,计算机才能运行。 6. **压缩包文件列表解析**: - **PartTransDlg.aps**: 这是一个资源文件,通常包含一些资源标识符和相关联的资源(如图标、对话框模板等)。 - **PartTransDlg.clw**: 是ClassWizard生成的文件,ClassWizard是一个辅助工具,用于处理MFC项目的类和消息映射。 - **PartTransDlgDlg.cpp** 和 **PartTransDlgDlg.h**: 分别是对话框类的实现文件和头文件,其中包含了对话框类的成员函数、变量等定义。 - **PartTransDlg.cpp**: 主要包含对话框类以外的其他功能实现代码。 - **StdAfx.cpp** 和 **StdAfx.h**: 是预编译头文件,用于加速编译过程,通常包含了一些常见的#include声明。 - **PartTransDlg.dsp** 和 **PartTransDlg.dsw**: 分别是项目文件和工作区文件,它们保存了项目的配置信息,如源文件列表、链接器和编译器设置等。 - **PartTransDlg.h**: 包含了整个项目的配置信息和对话框类的声明。 7. **创建半透明对话框的技术细节**: - 在对话框的创建过程中,程序员需要在窗口创建消息(WM_CREATE)中处理窗口样式的设置。 - 使用WS_EX_LAYERED扩展样式标志来启用窗口的层叠特性。 - 调用SetLayeredWindowAttributes函数,通过指定一个alpha值来控制窗口的透明度。Alpha值为0表示完全透明,255表示完全不透明。 通过以上详细信息,我们可以了解到这个资源主要展示了如何在Visual C++开发环境中实现界面编程,并给出了一个实际的半透明对话框窗口的示例源码。通过分析和理解这些源码和相关文件,开发者可以学习到如何使用Visual C++和MFC来设计具有视觉吸引力的用户界面。

#include "prepare_ogm.hpp" namespace senior { namespace guardian { namespace prepare { std::string PrepareOgm::Name() { return "Prepare Ogm Element"; } void PrepareOgm::Initiate() {} void PrepareOgm::Process(data::DataFrame& his, data::DataFrame& cur) { if (cur.source_ogm_points_.is_invalid()) return; if (cur.source_visual_ogm_points_.is_valid()) { cur.source_ogm_points_.insert(cur.source_ogm_points_.end(), cur.source_visual_ogm_points_.begin(), cur.source_visual_ogm_points_.end()); } if (cur.source_higher_ogm_points_.is_valid()) { cur.source_ogm_points_.insert(cur.source_ogm_points_.end(), cur.source_higher_ogm_points_.begin(), cur.source_higher_ogm_points_.end()); } auto& predict_path = cur.monitor_data_.mutable_predict_path(); predict_path.GenerateBoundary(cur); cur.AABox2d_ = predict_path.vehicle_AABox2d_; // if (!his.monitor_data_.is_need_to_take_over()) { // LOG(INFO)<<"1"; cur.AABox2d_.SetWidth(cur.AABox2d_.width() + 1.0); cur.AABox2d_.SetLength(cur.AABox2d_.length() + 1.0); // } std::vector<math::Vec2d> corner_points_; cur.AABox2d_.GetAllCorners(&corner_points_); auto& polygon2d = predict_path.tractor_polygon2d_; math::Vec2d temp; VoxelGrid filter_; common::Time now = common::Time::Now(); for (auto& point : cur.source_ogm_points_) { temp.set_x(point.x()); temp.set_y(-point.y()); if (cur.AABox2d_.IsPointIn(temp)) { cur.AABB_ogm_points_.emplace_back(point); } } cur.guardian_diagnose_["Prepare_PrepareOgm_AABox_filter"] = std::to_string((common::Time::Now() - now).ToSecond() * 1000); now = common::Time::Now(); filter_.VoxelGrid_ApplyFilter( cur.AABB_ogm_points_, cur.ogm_points_, corner_points_, 0.1, 0.1, 0); cur.guardian_diagnose_["Prepare_PrepareOgm_VoxelGrid_ApplyFilter"] = std::to_string((common::Time::Now() - now).ToSecond() * 1000); cur.ogm_points_.set_stamp(cur.source_ogm_points_.stamp()); cur.ogm_points_.set_time(cur.source_ogm_points_.time()); cur.ogm_points_.set_delay_time(cur.source_ogm_points_.delay_time()); cur.ogm_points_.set_valid(); } } // namespace prepare } // namespace guardian } // namespace senior 改变为C语言程序

2023-06-13 上传