C++ MFC&x2B+;如何使编辑控件';背景是透明的吗?

C++ MFC&x2B+;如何使编辑控件';背景是透明的吗?,c++,visual-c++,mfc,controls,edit,C++,Visual C++,Mfc,Controls,Edit,我想使编辑控件的背景透明,并将文本的颜色更改为白色。我可以用这个函数实现这两个功能,唯一的问题是当您在编辑控件上键入时,文本会保持重叠,下面的链接就是一个例子。我认为问题在于NULL\u BRUSH,它使背景透明,因为如果我只更改文本颜色,效果很好,不幸的是,我需要两者。 我该怎么做 HBRUSH CDlg::OnCtlColor(CDC* pDc, CWnd* pWnd, UINT nCtlColor){ HBRUSH hbr = NULL; switch (nCtlColor) {

我想使编辑控件的背景透明,并将文本的颜色更改为白色。我可以用这个函数实现这两个功能,唯一的问题是当您在编辑控件上键入时,文本会保持重叠,下面的链接就是一个例子。我认为问题在于
NULL\u BRUSH
,它使背景透明,因为如果我只更改文本颜色,效果很好,不幸的是,我需要两者。 我该怎么做

HBRUSH  CDlg::OnCtlColor(CDC* pDc, CWnd* pWnd, UINT nCtlColor){

HBRUSH hbr = NULL;  

switch (nCtlColor) {
case CTLCOLOR_EDIT:
    if (pWnd->GetDlgCtrlID() == editControl){
        pDc->SetBkMode(TRANSPARENT);
        pDc->SetBkColor(TRANSPARENT);
        pDc->SetTextColor(RGB(255, 255, 255));
        hbr = (HBRUSH)GetStockObject(NULL_BRUSH);
    }

    break;
default:
    hbr = CDialogEx::OnCtlColor(pDc, pWnd, nCtlColor);
}

return hbr;
}

SetBkColor(透明)
无效。
SetBkColor
的参数应为
COLORREF
值。您需要设置颜色(我的颜色)。还可以创建一个永久笔刷,例如
static HBRUSH hbr=CreateSolidBrush(my_color)
,然后将该笔刷返回给编辑控件。创建透明编辑控件比较困难,看起来您不需要它。使透明编辑控件背景的是SetBkMode(transparent)和return NULL_笔刷的组合,因此可以肯定这是可行的,这不是问题。问题在于文本,它似乎一直被反复绘制。From:“如果应用程序处理此消息,它必须返回笔刷的句柄。系统使用笔刷绘制编辑控件的背景。”一个
NULL\u笔刷
导致绘制不起任何作用。你不应该感到惊讶,你的控件的背景没有被擦除,所有的输出都是在已经存在的基础上呈现的。这是我发现的唯一可以使用透明背景效果的方法,否则我只能改变它的颜色