透明窗体的又一实现
2010-07-01 20:43:16 来源:WEB开发网d.到这里我们要的功能就已经能够实现了,但是好的程序员绝对不应该忘记释放资源,你也一样,一定没有忘记在程序结束时释放资源,呵呵,我们可以写到析构函数中,我们也可放到OnClose()函数中,都一样,我采用了后一种:添加函数并添加释放资源的代码
void CTransWindowDlg::OnClose()
{
////////////////////////////////////
//段会锋添加的代码
//释放资源
CBitmap * bitmap = m_DC.SelectObject(m_oldBitmap);
m_DC.DeleteDC();
bitmap->DeleteObject();
////////////////////////////////////
CDialog::OnClose();
}
e.现在好了,运行一下吧,真爽,就这么几行代码搞定了一个漂亮的窗口。是不是很有成就感?呵呵。又看了几次真的美滋滋的。不好发现问题了,怎么程序运行的时候开始有一下闪烁呢?哦,是清空背景的时候画了一下,没关系,让我们干掉它。添加WM_EraseBkgnd事件的响应函数,把原来的注释掉直接返回True,再运行一下看看吧?怎么样,满意了吗? BOOL CTransWindowDlg::OnEraseBkgnd(CDC* pDC)
{
////////////////////////////////////
//段会锋编辑的代码
//防止开始绘制的一下闪烁
//return CDialog::OnEraseBkgnd(pDC);
return true;
////////////////////////////////////
}
f.好了,我已经非常满意了,要休息一下了,但我怎么关闭这个窗口呢?糟糕,非要我用Alt+F4不成?算了再多用一下功,写个双击事件好了:void CTransWindowDlg::OnLButtonDblClk(UINT nFlags, CPoint point)
{
///////////////////////////////////
//段会锋添加的代码,双击窗口关闭Windows
this->PostMessage(WM_CLOSE);
///////////////////////////////////
CDialog::OnLButtonDblClk(nFlags, point);
}
呵呵,本文旨在说明透明窗体的思路及函数用法,抛砖引玉,相信大家一定有好多更好的创意通过这个思路实现,比如,可以添加Resize功能呀,使掩码不完全透明甚至是渐隐呀等等,总之创意无限,等待着大家的发掘!
本文不完整之处是没有实现拖动,要添加请参阅前面朋友的相关文章,再此对所有把编程经验和心得拿出来与大家共享的朋友致意最崇高的敬意,并号召大家积极向前面的朋友学习!但愿我的努力能够为你提供点点帮助,那我就无比欣慰了,如有任何问题或疑问请 Email: duanoldfive@sohu.com,或者QQ:86685028)
本文配套源码
更多精彩
赞助商链接