怎样把控件变为透明(!!高分相送!!)picture control或 static control的背景变为透明
解决方案 »
- error LNK2001: 无法解析的外部符号
- mfc中用markup解析xml xml.FindChildElem("abc id="1""); 有没有合理的方法
- 大家好,问一个关于CFile路径的问题
- 急!超急(VC)
- 怎样在我程序在搜索数据库时弹出提示说正在搜索请稍等?
- 怎样在自己的程序结束之前先结束所有正在运行的程序?
- 线程结束了,可是发送的消息怎么收不到?
- 请问mfc的前途?
- 在框架类中调用视图类中的OnChar(OnChar(UINT nChar, UINT nRepCnt, UINT nFlags))?
- 怎样把大写数字(如一千二百二十、一千二百二十)转换成小写数字(1220、1221)?
- 几个基本的问题,谢谢解答。
- 如何将access中取出的时间转化成oracle中认识的形式?
VERIFY(m_HollowBrush.CreateStockObject(HOLLOW_BRUSH));(3)HBRUSH CMyDialog::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
switch(nCtlColor) {
case CTLCOLOR_STATIC:
pDC->SetBkMode(TRANSPARENT);
return HBRUSH(m_HollowBrush);
..
}
{
别无它法,你只能自已实现这个类了。
}
else /*你的背景是单一色*/
{
可以采用类似楼上的做法。
}
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);用向导添加OnCtlColor消息处理函数,然后插入如下代码:
// TODO: Change any attributes of the DC here
if(nCtlColor==CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT);
hbr=(HBRUSH)::GetStockObject(NULL_BRUSH);
}// TODO: Return a different brush if the default is not desired
return hbr;
}
{
CPaintDC dc(this);
CRect rcclient;
GetClientRect(&rcclient); CDC memdc;
memdc.CreateCompatibleDC(&dc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc, rcclient.Width(), rcclient.Height());
memdc.SelectObject( &bitmap ); CWnd::DefWindowProc(WM_PAINT, (WPARAM)memdc.m_hDC , 0); CDC maskdc;
maskdc.CreateCompatibleDC(&dc);
CBitmap maskbitmap;
maskbitmap.CreateBitmap(rcclient.Width(), rcclient.Height(), 1, 1, NULL);
maskdc.SelectObject( &maskbitmap );
maskdc.BitBlt( 0, 0, rcclient.Width(), rcclient.Height(), &memdc,
rcclient.left, rcclient.top, SRCCOPY); CBrush brush;
brush.CreatePatternBrush(&m_bitmap);
dc.FillRect(rcclient, &brush);
memdc.SetBkColor(RGB(0,0,0));
memdc.SetTextColor(RGB(255,255,255));
memdc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(),
&maskdc, rcclient.left, rcclient.top, SRCAND); dc.SetBkColor(RGB(255,255,255));
dc.SetTextColor(RGB(0,0,0));
dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(),
&maskdc, rcclient.left, rcclient.top, SRCAND);
dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(), rcclient.Height(),
&memdc, rcclient.left, rcclient.top,SRCPAINT);
brush.DeleteObject();
}
3.3 处理tvn_itemexpanding void CMyTreeCtrl::OnItemexpanding(NMHDR* pNMHDR, LRESULT* pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
SetRedraw(FALSE);
*pResult = 0;
}
{
......
//声明一个CTpEdit的成员变量
private:
CTpEdit m_tpedit;
};//在OnInitDialog中Subclass对话框模板中的Edit控件
BOOL CTESTDLG::OnInitDialog()
{
CDialog::OnInitDialog();
m_tpedit.SubclassDlgItem(IDC_EDIT,this);
return TRUE;
}//在OnCtlColor中设置背景的透明,要改变Edit控件字体的颜色也在这里HBRUSH CTESTDLG::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);if((nCtlColor == CTLCOLOR_EDIT) && (pWnd->GetDlgCtrlID()==IDC_EDIT))
{
pDC->SetBkMode(TRANSPARENT); //设置背景透明,这样,输出字符的时候就
//是所谓的空心字,而不是有白的底色
pDC->SetTextColor(RGB(255,0,0)); //改变字体的颜色
return HBRUSH(GetStockObject(HOLLOW_BRUSH));
}return hbr;
}//CTpEdit对象class CTpEdit : public CEdit
{
public:
//m_mousedown用来记录鼠标左键是否按下
BOOL m_mousedown;
protected:
//响应如下的消息
//{{AFX_MSG(CTpEdit)
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
afx_msg void OnMouseMove(UINT nFlags, CPoint point);
afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
afx_msg UINT OnGetDlgCode();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};//CTpEdit的消息响应函数如下
//画背景图
BOOL CTpEdit::OnEraseBkgnd(CDC* pDC)
{
//得到Edit控件的外框,即背景区域
RECT updatarect;
GetClientRect(&updatarect);
//画背景,我画的是一个黄色的矩形
CBrush newBrush;
newBrush.CreateSolidBrush(RGB(255,255,200));
CBrush * oldBrush = pDC->SelectObject(&newBrush);
pDC->Rectangle(&updatarect);
pDC->SelectObject(oldBrush);
return TRUE;
}//强迫Edit控件擦除背景,重写字符
UINT CTpEdit::OnGetDlgCode()
{ RedrawWindow(NULL, NULL,RDW_INVALIDATE | RDW_ERASE );
return CEdit::OnGetDlgCode();
}
//记录鼠标左键是否按下
void CTpEdit::OnLButtonDown(UINT nFlags, CPoint point)
{
m_mousedown = TRUE;
SetCapture();
CEdit::OnLButtonDown(nFlags, point);
}void CTpEdit::OnLButtonUp(UINT nFlags, CPoint point)
{
if(m_mousedown)
ReleaseCapture();
m_mousedown = FALSE;
CEdit::OnLButtonUp(nFlags, point);
}//如果左键按下并且拖动鼠标就要刷新显示
void CTpEdit::OnMouseMove(UINT nFlags, CPoint point)
{
if(m_mousedown)
RedrawWindow(NULL, NULL,RDW_INVALIDATE | RDW_ERASE );
CEdit::OnMouseMove(nFlags, point);
}
//初始化成员变量
CTpEdit::CTpEdit()
{
m_mousedown=FALSE;
}
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
if(nCtlColor==CTLCOLOR_STATIC)
{
pDC->SetBkMode(TRANSPARENT);
hbr=(HBRUSH)::GetStockObject(NULL_BRUSH);
}// TODO: Return a different brush if the default is not desired
return hbr;
}