我这个对话框有背景图片,我想让在上面的两个按钮透明,那么在重载的button类CMyButton类中该怎么做?
求解决……
按钮透明对话框
求解决……
按钮透明对话框
解决方案 »
- 一个父类和子类的问题
- YUV2的图像格式是彩色的还是灰色的?
- 希望大家给推荐一本学习directX编程方面的书,我是初学者,但希望能够从简单到最复杂的东西都有的书,谢谢。
- 请教:多线程调试问题!!
- 奇怪问题,要求置顶,win32 Dynamic-link library 连接 sybase 数据库的问题,详细请进http://community.csdn.net/Expert/TopicView3.asp
- 请问这样的SQL 语句如何写??
- 让人晕菜的FileOpen
- 请问关于内存DC的问题
- 这个函数是干什么的?
- VC++中,编译SDK程序错误!
- “fatal error C1083:”与““CString” : 未声明的标识符”
- 这种COLOR界面怎么做?
并且在按钮重绘时再将保存的图片显示出来的过程,下面给出一个简单的处理方法:
(加粗部分为添加的代码)
(1)重载CButton类:
class CMyButton : public CButton
(2)为CMyButton类添加成员变量:
CDC m_dcBk;
CBitmap m_bmpBk;
CBitmap* m_pbmpOldBk;
int m_drawCount;
(3)在类向导中重载函数:
1、void CMyButton::PreSubclassWindow()
{
// TODO: 在此添加专用代码和/或调用基类
ModifyStyle(0, BS_OWNERDRAW);//设置按钮类得自绘风格
CButton::PreSubclassWindow();
}
2、void CmyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: 添加您的代码以绘制指定项
CDC *pDC = this ->GetDC();//获取DC指针
CClientDC clDC(GetParent());//获取父窗口客户DC
CRect rect;//用于保存本Button在父窗口中的区域
CRect rect1;//用于保存父窗口的区域
GetClientRect(rect);
GetWindowRect(rect1);
GetParent()->ScreenToClient(rect1);
if (m_dcBk.m_hDC == NULL && m_drawCount >= 1)//注意:m_drawCount是我自己添加的变量
//因为每次初始化时DrawItem函数都会绘制两次,这点现在我也不是很明白,所以让本段代码在第
//二次之后(包含)再进行绘制操作
{
m_dcBk.CreateCompatibleDC(&clDC);
m_bmpBk.CreateCompatibleBitmap(&clDC, rect.Width(), rect.Height());//注意:这里的
//函数调用保存了按钮矩形区的图像,用于重绘时调用
m_pbmpOldBk = m_dcBk.SelectObject(&m_bmpBk);
m_dcBk.BitBlt(0, 0, rect.Width(), rect.Height(), &clDC, rect1.left, rect1.top, SRCCOPY);
} // if
else
{
m_drawCount++;
}
pDC->BitBlt(0, 0, rect.Width(), rect.Height(), &m_dcBk, 0, 0, SRCCOPY);
}//至此,背景图像的保存和重绘已经完成了
http://bbs.csdn.net/topics/390336507