项目过程中,有c++控件,层级问题的解决

首先要明白,同类的层级是可以通过z-index来控制;但非同类之间的层级的关系:

c++控件>div;

但是在使用过程中,如何合理控制各个之间的关系呢?

我曾经碰到过一个问题;是控件放在弹出框中;但2个弹出框同时打开时,并相互移动,将一个弹出框放在另一个弹出框之上,问题就来了。上面的弹出框能遮挡住下面的弹出框的头部,也就是只能遮挡住头部的div,不能遮挡内容的控件。为什么会有这种情况呢;原来我们的弹出框是可以根据弹出顺序,有个层级顺序,但控件之间的的层级也是根据弹出顺序有关,不同的时,先弹出的层级更高。这就导致了下图的现象


那么这样的问题,该怎么解决呢?

方法:咱们先引入一个iframe.因为,irame的层级高于c++控件;即iframe>c++控件;控件>div;但div 是可以遮挡iframe的。即咱们通过iframe包装下控件,就ok了。

碰到的第二个问题,页面主要是c++控件,但偶尔需要弹出框。控件会一直遮挡弹出框。怎么办?

解决方法:

在执行弹出框时,对控件进行visibility:hidden;(记住不能使用display:none的show和hide的方式;因为当你弹出框关闭时,会二次加载控件,肯定是不行的)

并通过回调函数的形式写弹出框,即对js进程进行阻塞进程,只用当确定按钮点击后,再对c++控件进行visibility:visible

MFC(Microsoft Foundation Classes),是微软为Windows应用程序开发提供的套件,其可以利用其内置的数据可视化功能来创建次列表。这里是一个简单的C++代码示例,展示了如何使用MFC的CMFCListCtrl控件来创建一个基本的层级结构: ```cpp #include "stdafx.h" #include "afxcontrolbars.h" // 假设有一个自定义的树形节点类 class TreeNode { public: CString text; std::vector<TreeNode*> children; // 孩子节点 }; class CMyApp : public CWinAppEx { protected: CMFCListCtrl m_TreeCtrl; // 层级列表控件 public: afx_msg void OnInitialUpdate(); afx_msg void OnTreeSelChanged(NMHDR* pNMHDR, LRESULT* pResult); DECLARE_MESSAGE_MAP() }; BEGIN_MESSAGE_MAP(CMyApp, CWinAppEx) ON_WM_INITUPDATE() END_MESSAGE_MAP() void CMyApp::OnInitialUpdate() { CWinAppEx::OnInitialUpdate(); // 初始化层级列表控件 m_TreeCtrl.Create(NULL, IDW_TREEVIEW, WS_CHILD | WS_VISIBLE | CBS_OWNERDRAWVARIABLE, CRect(0, 0, 200, 300), this, AFX_IDW_CONTROLBAR); // 添加根节点 TreeNode root; root.text = "Root Node"; // ... (添加更多的子节点) // 将根节点添加到列表视图 m_TreeCtrl.AddItem(root.text, TVI_ROOT); // ... (递归地将所有子节点添加到相应的父节点下) } void CMyApp::OnTreeSelChanged(NMHDR* pNMHDR, LRESULT* pResult) { // 当选择改变时,处理事件,例如获取选的节点并显示详细信息 TV_HITTESTINFO hitTestInfo; *pResult = m_TreeCtrl.GetLBText(m_TreeCtrl.GetCurSel(), &hitTestInfo.szText); TreeNode* selectedNode = GetSelectedTreeNode(hitTestInfo); // 检查并返回选的节点 // ... (根据selectedNode处理后续操作) } TreeNode* CMyApp::GetSelectedTreeNode(TV_HITTESTINFO& info) const { // 实现获取指定位置的节点的函数,这里仅做简化演示 for (const auto& child : m_TreeCtrl.GetItems()) { if (child.tvhItem == info.hItem) return static_cast<TreeNode*>(child.lParam); } return nullptr; } ``` 这只是一个基础的示例,实际应用可能需要处理更复杂的树结构以及用户交互逻辑。记得在项目包含所需的MFC头文件,并链接正确的库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值