如何使Edit控件背景透明if(pWnd->GetDlgCtrlID()==IDC_EDIT_TEST)
{
pDC->SetBkMode(TRANSPARENT);  
hbr=(HBRUSH)::GetStockObject(NULL_BRUSH);
}这样后它的背景是黑色的了。

解决方案 »

  1.   

    继承CEdit,
    重载CtlColor
    retrun (HBRUSH)GetStockObject(NULL_BRUSH);
      

  2.   

    HBRUSH CMainForm::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    if(pWnd->GetDlgCtrlID()==IDC_EDIT_TEST)
    {
    pDC->SetBkMode(TRANSPARENT);  
    hbr=(HBRUSH)::GetStockObject(WHITE_BRUSH);
    }
    return hbr;
    }继承CEdit什么意思??不太明白,上面就是我对这部分的代码
      

  3.   

    你需要继承CEdit,生成你自己的类,如CYourEdit
      

  4.   

    我的意思从CEdit派生出自己的类
      

  5.   

    哦!那么这个edit控件如何和这个CYourEdit链接上啊??
      

  6.   

    通过什么语句可以使得自己的类和这个Edit控件连上呢??
      

  7.   

    hbr=(HBRUSH)::GetStockObject(NULL_BRUSH);
    我已经连上了,但是这个NULL_BRUSH还是黑色的
      

  8.   

    不会啊,你是重载的是CtlColor么
      

  9.   

    是啊!!就hbr=(HBRUSH)::GetStockObject(NULL_BRUSH);一条语句就还是黑色的效果
      

  10.   

    HBRUSH CMyEdit::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
    {
    HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
    /*pDC->SetBkMode(TRANSPARENT); */ 
    hbr=(HBRUSH)::GetStockObject(NULL_BRUSH);

    return hbr;
    }
      

  11.   

    应该这样
    HBRUSH CYourEdit::CtlColor(CDC* pDC, UINT /*nCtlColor*/)
    {
    pDC->SetBkMode(TRANSPARENT); //设置背景透明 return (HBRUSH)m_brushBkg.GetSafeHandle();
    }
      

  12.   

    错了
    return (HBRUSH)m_brushBkg.GetSafeHandle();
    -〉
    return =(HBRUSH)GetStockObject(NULL_BRUSH);
      

  13.   

    哦!没看明白。
    return (HBRUSH)m_brushBkg.GetSafeHandle();//brushBkg是CBrush的吧? 
    -〉//这个箭头什么意思
    return =(HBRUSH)GetStockObject(NULL_BRUSH);CtlColor而不是OnCtlColor?
      

  14.   

    不好意思,刚才打错了,我重新说一边
    重载CtlColor,
    它对应的消息映射是=WM_CTLCOLOR
    手动添的话是ON_WM_CTLCOLOR_REFLECT()
    对应的消息函数是afx_msg HBRUSH CtlColor(CDC* /*pDC*/, UINT /*nCtlColor*/);
    函数实现部分
    HBRUSH CMyEdit::CtlColor(CDC* pDC, UINT /*nCtlColor*/)
    {
    pDC->SetBkMode(TRANSPARENT); //设置背景透明 return (HBRUSH)GetStockObject(NULL_BRUSH);
    }
      

  15.   

    晕了,还是黑色的。我用myEdit.SubclassDlgItem(IDC_EDIT_TEST,this);来链接控件和这个类对不??
      

  16.   

    你是用对话框做的吧,
    直接用这个类声明一个变量作editbox的控制变量
      

  17.   

    定义成员变量HBRUSH m_brMine;在OnCtlColor()函数中添加
    if(pWnd->GetDlgCtrlID()==IDC_EDIT_TEST) 

    pDC->SetTextColor(RGB(0,0,255)); 
    pDC->SetBkMode(TRANSPARENT);
    m_brMine   =   ::CreateSolidBrush(RGB(212,208,200));  
             //与对话框的背景色一致,透明显示 
             return   m_brMine;}