求助:关于如何抓背景图的问题~~~在线等啊··· 是这样的,对话框界面上贴了一张图片,上面还有一些静态文本,我想在想要做的是如何抓去这些静态文本后面的背景图,并且在把这个背景在给这些静态文本,目前还是菜鸟,希望大牛帮着解决下,有代码或者例子的更好啊。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你把static text设置为透明不行吗? ……如果楼主只是不想看到字底下的那块灰颜色的话,那么lz想得太复杂了╮(╯_╰)╭……同ls把静态文本背景设置为透明吧…… 重载oncolor函数 设置透明 返回空画刷 就可以了HBRUSH CPage2::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) { HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); pDC->SetBkMode(TRANSPARENT);// 透明模式 if (nCtlColor==CTLCOLOR_STATIC) { return (HBRUSH)GetStockObject(NULL_BRUSH);//返回空画刷 } return hbr;}重载后直接粘贴进去 运行 就看到效果了 如果是slider滑块的话就比较麻烦 可以看看这个http://blog.csdn.net/liang888113/archive/2011/06/09/6535201.aspx 这种重载的话,如果我改变CTLCOLOR_STATIC的内容,就会重叠,若刷新他所在区域的话会有少量的闪烁现象 把你的背景图片存在了内存dcBmpMem中吧?!根据你静态控件的Crect rect;创建rect这么大小的内存位图CreateCompatibleBitmap();将背景图片的dcBmpMem中的这个位置的内容 BitBlt到自己定义的另一个内存CDC dcStaticMem中现在 dcStaticMem 这个里面就是你要的 静态控件下面的背景图片不知道我理解的是不是对的 也许你在问的时候 把你要实现的功能说出来 大家也可以提出更合理的解决方法 嗯,这个就是我想要的,但是我不知道程序该怎么写;在初始化Dlg中,我是这么贴图的:m_xStart = 50;m_yStart = 50;GetClientRect(&m_rect);m_bmpBK.LoadBitmap(IDB_BITMAP2);m_bmpBK.GetBitmap(&m_bmpInfoBK);CDC* pDC = GetDC();m_dcMem.CreateCompatibleDC(pDC);m_dcTmp.CreateCompatibleDC(pDC);m_bmpMem.CreateCompatibleBitmap(pDC,m_rect.Width(),m_rect.Height());m_dcMem.SelectObject(&m_bmpMem);ReleaseDC(pDC);BYTE *pBitsBK = new BYTE[m_bmpInfoBK.bmWidthBytes * m_bmpInfoBK.bmHeight]; m_bmpBK.GetBitmapBits(m_bmpInfoBK.bmWidthBytes * m_bmpInfoBK.bmHeight, pBitsBK); delete []pBitsBK;在OnPaint中还有些:void CMyTry_TietuDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CPaintDC dc(this); m_dcTmp.SelectObject(&m_bmpBK); m_dcMem.BitBlt(0,0,m_rect.Width(),m_rect.Height(), &m_dcTmp,0,0,SRCCOPY); dc.BitBlt(0,0,m_rect.Width(),m_rect.Height(), &m_dcMem,0,0,SRCCOPY); CDialog::OnPaint(); }}然后我的Static控件名称叫做IDC_STATIC12。现在我就是想要去IDC_STATIC12这个空间背后的背景图,然后充当Static的背景,看起来是透明的,但是实际上是不相同的 【Win32】两个关于ListCtrl的问题,紧急求助。 一个简单的问题: 单文档的最大化 高分请教:内存泄漏问题 一个基于对话框的程序如何在启动时设置为最小化 如何响应动态生成树的 OnSelchanged 事件(在线等) 如何制作安装包。 一个很深的问题,高手帮忙分析一下: CPropertySheet 中HELP按钮的ID_HELP报错? 为何classwizard 里没有我添加的类????? 怎样将图象存入SQL SERVER库中,又怎样将此字段取出显示?请指教1 关于热键的问题 MediaPlayer核心的播放器,休眠唤醒后断点播放失败 这种情况怎么实现?
如果楼主只是不想看到字底下的那块灰颜色的话,
那么lz想得太复杂了╮(╯_╰)╭……同ls把静态文本背景设置为透明吧……
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor); pDC->SetBkMode(TRANSPARENT);// 透明模式
if (nCtlColor==CTLCOLOR_STATIC)
{
return (HBRUSH)GetStockObject(NULL_BRUSH);//返回空画刷
}
return hbr;
}重载后直接粘贴进去 运行 就看到效果了 如果是slider滑块的话就比较麻烦 可以看看这个
http://blog.csdn.net/liang888113/archive/2011/06/09/6535201.aspx
这种重载的话,如果我改变CTLCOLOR_STATIC的内容,就会重叠,若刷新他所在区域的话会有少量的闪烁现象
把你的背景图片存在了内存dcBmpMem中吧?!根据你静态控件的Crect rect;创建rect这么大小的内存位图
CreateCompatibleBitmap();将背景图片的dcBmpMem中的这个位置的内容 BitBlt到自己定义的另一个内存CDC dcStaticMem中现在 dcStaticMem 这个里面就是你要的 静态控件下面的背景图片不知道我理解的是不是对的 也许你在问的时候 把你要实现的功能说出来 大家也可以提出更合理的解决方法
在初始化Dlg中,我是这么贴图的:
m_xStart = 50;
m_yStart = 50;
GetClientRect(&m_rect);
m_bmpBK.LoadBitmap(IDB_BITMAP2);
m_bmpBK.GetBitmap(&m_bmpInfoBK);
CDC* pDC = GetDC();
m_dcMem.CreateCompatibleDC(pDC);
m_dcTmp.CreateCompatibleDC(pDC);
m_bmpMem.CreateCompatibleBitmap(pDC,m_rect.Width(),m_rect.Height());
m_dcMem.SelectObject(&m_bmpMem);
ReleaseDC(pDC);BYTE *pBitsBK = new BYTE[m_bmpInfoBK.bmWidthBytes * m_bmpInfoBK.bmHeight];
m_bmpBK.GetBitmapBits(m_bmpInfoBK.bmWidthBytes * m_bmpInfoBK.bmHeight,
pBitsBK);
delete []pBitsBK;
在OnPaint中还有些:
void CMyTry_TietuDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC dc(this);
m_dcTmp.SelectObject(&m_bmpBK);
m_dcMem.BitBlt(0,0,m_rect.Width(),m_rect.Height(),
&m_dcTmp,0,0,SRCCOPY);
dc.BitBlt(0,0,m_rect.Width(),m_rect.Height(),
&m_dcMem,0,0,SRCCOPY);
CDialog::OnPaint();
}
}然后我的Static控件名称叫做IDC_STATIC12。
现在我就是想要去IDC_STATIC12这个空间背后的背景图,然后充当Static的背景,看起来是透明的,但是实际上是不相同的