用一下方法做了一个透明的编辑框
pDC->SetBkMode(TRANSPARENT);   
return (HBRUSH)GetStockObject(HOLLOW_BRUSH);
但是为什么单删除编辑框中的字符时,只看到光标后退,字符却没有删掉

解决方案 »

  1.   

    正常现象,字符其实已经删掉了,但你的透明实际上是以不画为代价的,所以那个字符就是看起来还在。
    估计ShowWindow(SW_HIDE);再ShowWindow(SW_SHOW);一下就好了,不过效率似乎不行。
      

  2.   

    EDIT控件加个刷新
    (刷新的时候顺便把对话框的背景画一下就好了)
      

  3.   

    刷新估计也没用,因为这种透明并不是真正的透明,这种透明是以不画为前提的,就算你Invalidate也只是调用一下绘图函数而已,但绘图函数却是什么事也没做,所以应该更新不了。如果你的编辑框是固定位置的,可以在一开始先把背景抓下来,重绘的时候,把背景刷上去。如果背景会变化,并且是处于桌面上的透明,估计只能ShowWindow(SW_HIDE)再ShowWindow(SW_SHOW)使得背景重绘一下才行;如果是在自己的对话框上的透明,那只要把对话框Invalidate一下就好了
      

  4.   

    重载PreTranslateMessage(),并加上一下,就可以了。
    if ((pMsg->hwnd == ::GetDlgItem(GetSafeHwnd(),编辑框ID)) && (pMsg->message == WM_KEYDOWN))
    {
    CRect tRect;
    CWnd* pWnd = CWnd::FromHandle(pMsg->hwnd);
    pWnd->GetClientRect(&tRect);
    pWnd->ClientToScreen(&tRect);
    ScreenToClient(&tRect);
    InvalidateRect(&tRect);
    }