透明COM容器控件原理
来源:互联网 发布:淘宝上的息肌丸靠谱吗 编辑:程序博客网 时间:2024/06/07 17:43
以上是一个背景透明的COM容器控件,实现拖拽单个文件,进行循环播放歌曲的效果
FLASH透明窗体就是一种透明容器控件,网络上找不到相关的示例和代码,我这里是通过获取主窗口DC,然后传递给控件,在控件的OnDraw里,实现透明叠加的结果,所以没啥技术含量,但是可以达到实际效果就行了。
主程序关键代码
IUnknown* pUnKnwn=0; pUnKnwn = m_AxWindow.GetControlUnknown();hr= pUnKnwn->QueryInterface(IID_Ixplay,(void **)&m_pIxplay);if (!m_pIxplay){ ::MessageBox(NULL,_T("m_pIxplay==NULL @CMainDlg::OnInitDialog"),_T("Faild"),MB_OK);return true;}if (!m_pMemDC){CPaintDC dc(this); m_pMemDC = new CDC();m_pMemDC->CreateCompatibleDC(&dc);m_memBitmap.DeleteObject();m_memBitmap.CreateCompatibleBitmap(&dc,m_AxRct.Width(), m_AxRct.Height() );//rt.Width(), rt.Height()m_OldBitmap = m_pMemDC->SelectObject(&m_memBitmap);VARIANT varHDC;varHDC.vt = VT_I4 ;///指明数据类型varHDC.lVal = (LONG)m_pMemDC->m_hDC;m_pIxplay->SetAxMemDC(varHDC);}m_pIxplay->LoadFile(_T("J:/mp3/励志歌曲/春天里.mp3"));m_pIxplay->ChangePlayState(0);
控件中OnDraw关键代码
if (m_plyState == Cxplay::PLAYING){::BitBlt(hdc,0,0, nWidth, nHeight, m_hAxDC, 0, 0, SRCCOPY);CUtil::CreateMaskDC(hdc, 0, 0, nImgWidth, nImgHeight, m_hPauseBg, nImgWidth, nImgHeight);}else if (m_plyState == Cxplay::PAUSE || m_plyState == Cxplay::STOP){::BitBlt(hdc,0,0, nWidth, nHeight, m_hAxDC, 0, 0, SRCCOPY);CUtil::CreateMaskDC(hdc, 0, 0, nImgWidth, nImgHeight, m_hPlayBg, nImgWidth, nImgHeight);}
DEMO下载:xPlayer.rar
- 透明COM容器控件原理
- COM原理及应用----ActiveX控件
- 控件透明
- 容器透明(如PictureBox)
- 容器控件
- COM原理
- COM原理
- COM原理
- com原理
- 【整理】控件透明
- 透明的CEdit控件
- 透明的CEdit控件
- 控件透明背景
- 透明控件的新发现!
- Windows Mobile 透明控件
- 设置控件透明属性:
- CE 控件透明
- 透明控件的制作
- 使用IO::Socket::INET模块实现socket编程
- Facebook unveils Presto engine for querying 250 PB data warehouse
- LCIS最长上升公共子序列(HDU 1423)
- Deep Learning(Logistic Regression)学习之MNIST C++实现
- 网卡如何和上层进行交互的
- 透明COM容器控件原理
- Content provider 中getPathSegments用途
- Delphi 数据类型列表
- POJ 1833 排列
- IT人的工作经验
- 类-Classes
- 始于脚下
- hdu 1160 FatMouse's Speed
- VIM代码块对齐