MFC : 在主窗口不透明的情况下, 建立一个半透明的子窗体带透明的TreeCtrl
来源:互联网 发布:电路仿真软件哪种好 编辑:程序博客网 时间:2024/05/16 15:17
前段时间和别人讨论问题, 他说要在一个不透明的主窗体上, 建立一个透明的子窗体, 在该子窗体上再建立透明的TreeCtrl.
先是将透明的TreeCtrl实现了, MFC : Transparent TreeCtrl from CTreeCtrl
在实现子窗口体透明时, 他说已经试验过设置窗体扩展风格 WS_EX_LAYERED的方法, 当主窗体不透明时, 子窗体无法实现透明.
所以当时就按照"取主窗体背景贴到子窗体背景的方法来模拟子窗体透明"来实验.
最终发现不行, 原因 : 当子窗体在主窗体中移动时, 取主窗体的背景时, 背景上有子窗体的图像..., 这样搞, 取到的背景就不是纯的主窗体背景.
今天想起这事, 决定自己做个实验, 看看当主窗体不透明时, 建立一个透明的子窗体, 看行不行.
实验结果是 : 可以 :( , 感到非常不爽.
我当时和别人讨论问题时听错了?
工程下载点: src_testTransparentTreeCtrl_2015_0722_1138.rar
这个效果是可以接受的, 类似于CAD, 当主窗体(当然是不透明的)出来后, 拖动一个控件到布局窗口, 只要是半透明就可以接受了.
一般的CAD, 拖放控件时, 都不是透明的, 如果做到半透明, 其实也是可以的, 看领导怎么要求.
一般的CAD控件拖放后的效果如下图(不透明):
实验过的效果图(主窗体不透明, 建立一个半透明的子窗体, 该子窗体中, 有一个透明的TreeCtrl)如下:
代码预览:
建立透明子窗体:
没特别的, 就是建立一个普通的MFC对话框
void CtestTreeCtrlDlg::OnBnClickedButtonCreateTransparentsubdlg(){ // TODO: Add your control notification handler code here CTransparentSubDlg Dlg; Dlg.DoModal();}透明子窗体实现:
#pragma once#include "mytreectrl.h"// CTransparentSubDlg dialogclass CTransparentSubDlg : public CDialogEx{DECLARE_DYNAMIC(CTransparentSubDlg)public:CTransparentSubDlg(CWnd* pParent = NULL); // standard constructorvirtual ~CTransparentSubDlg();// Dialog Dataenum { IDD = IDD_SUB_DIALOG };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV supportDECLARE_MESSAGE_MAP()public: virtual BOOL OnInitDialog();private: void TreeInit(); void ToggleTransparency(HWND hWnd);private: CMyTreeCtrl m_MyTreeCtrl;};
// TransparentSubDlg.cpp : implementation file//#include "stdafx.h"#include "testTreeCtrl.h"#include "TransparentSubDlg.h"#include "afxdialogex.h"// CTransparentSubDlg dialogIMPLEMENT_DYNAMIC(CTransparentSubDlg, CDialogEx)CTransparentSubDlg::CTransparentSubDlg(CWnd* pParent /*=NULL*/): CDialogEx(CTransparentSubDlg::IDD, pParent){}CTransparentSubDlg::~CTransparentSubDlg(){}void CTransparentSubDlg::DoDataExchange(CDataExchange* pDX){ CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_MY_TREE, m_MyTreeCtrl);}BEGIN_MESSAGE_MAP(CTransparentSubDlg, CDialogEx)END_MESSAGE_MAP()// CTransparentSubDlg message handlersBOOL CTransparentSubDlg::OnInitDialog(){ CDialogEx::OnInitDialog(); // TODO: Add extra initialization here ToggleTransparency(this->m_hWnd); TreeInit(); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE}void CTransparentSubDlg::TreeInit(){ HTREEITEM item = NULL; HTREEITEM itemSub = NULL; item = m_MyTreeCtrl.InsertItem(L"根节点[子对话框]", NULL); if (NULL != item) { itemSub = m_MyTreeCtrl.InsertItem(L"子节点1", item); itemSub = m_MyTreeCtrl.InsertItem(L"子节点2", item); m_MyTreeCtrl.Expand(item, TVE_EXPAND); }}void CTransparentSubDlg::ToggleTransparency(HWND hWnd){ ::SetWindowLong( hWnd, GWL_EXSTYLE, GetWindowLong(hWnd,GWL_EXSTYLE)^WS_EX_LAYERED); // When bAlpha is 0, the window is completely transparent. // When bAlpha is 255, the window is opaque. ::SetLayeredWindowAttributes(hWnd, RGB(0,0,0), 222, LWA_ALPHA);}
0 0
- MFC : 在主窗口不透明的情况下, 建立一个半透明的子窗体带透明的TreeCtrl
- 半透明: MFC实现父窗口不透明,子窗口半透明效果
- MFC下窗体半透明效果的实现
- .net窗体透明,控件不透明的方法
- iOS开发如何在一个透明视图上添加不透明的子控件
- iOS 在一个透明视图上添加不透明的子控件
- iOS开发如何在一个透明视图上添加不透明的子控件
- 如何在透明视图上显示不透明的子视图
- MFC实现父窗口不透明,子窗口半透明效果
- C#绘制半透明窗体,只让窗体背景半透明,而窗体里面的控件不透明
- 关于C#窗体的半透明,控件不透明的解决方案
- 透明视图上的子视图不透明
- 窗体透明,窗体上控件不透明的设置方法
- 关于Div半透明子元素不透明的问题
- 子窗口的透明
- swing 窗体透明和窗体透明窗体里的空间不透明
- html和css实现透明div上的div不透明,也可说父div透明,子div不透明
- 在IE下FLASH背景透明而在FF下不透明的解决方法
- Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面
- Java连接JDBC数据库
- 面向对象(二)(static,.final,抽象类,接口,内部类)
- Telnet协议详解 (转)
- BNUOJ28891 Choosing number(矩阵快速幂)
- MFC : 在主窗口不透明的情况下, 建立一个半透明的子窗体带透明的TreeCtrl
- SQL根据一个日期,返回1号至当日所有日期
- 安装和使用flume1.5传输数据(日志)到hadoop2.2
- POJ-1011-Sticks-DFS(深搜)+四次剪枝
- Android异步处理二:使用AsyncTask异步更新UI界面
- Java中从控制台读取输入的方法的总结
- 2048源码分享
- uva 11374 Airport Express (Dijkstra)
- Android异步处理三:Handler+Looper+MessageQueue深入详解