现在的代码如下
在Dialog 的OnInitDialog中:CRect rect(5,5,200,30);
CLientDC dc(this);
dc.SetBkMode(TRANSPARENT);
dc.DrawText("user",&rect,DT_LEFT);运行确看不到写的字?文字的下面是一幅pictrue控件。还有其它方法实现我的效果么?

解决方案 »

  1.   

    CLientDC dc(this->GetDlgItem(IDC_PIC));
    应该这样子吧
      

  2.   

    如果一定要在控件上画的话,应该子类化些控件,处理WM_PAINT消息,而不是得到控件的DC直接画
      

  3.   

    而且要在OnCtlcolor中
    if(pWnd->m_hWnd==GetDlgItem(IDC_PIC)->m_hWnd)
    {
    CRect rect(5,5,200,30);CDC *dc=GetDlgItem(IDC_PIC)->GetDC();
    dc->SetBkMode(TRANSPARENT);
    dc->DrawText("user",&rect,DT_LEFT);//用OnCtlcolor函数提供的pDC也可以
    }
      

  4.   

    krh2001(边城浪子) 说得对!
    子类化控件,响应WM_PAINT消息,实现在pictrue控件添加透明文字
      

  5.   


    to: fanqing(火影忍者+26%) 
    你的办法不行哦!to :krh2001(边城浪子)我在paint里写好像也不行
    能说说具体的代码么
      

  6.   

    我都试过了.
    是对话框中的OnCtlcolor
    实在不行留email我发给你
      

  7.   

    而且要在OnCtlcolor中
    if(pWnd->m_hWnd==GetDlgItem(IDC_PIC)->m_hWnd)
    {
    CRect rect(5,5,200,30);CDC *dc=GetDlgItem(IDC_PIC)->GetDC();
    dc->SetBkMode(TRANSPARENT);
    dc->DrawText("user",&rect,DT_LEFT);
    --------------------
    OnCtlColor(
    CDC* pDC,
    CWnd* pWnd,
    UINT nCtlColor ); 
    This method is called by the framework when a child control is about to be drawn. Most controls send this message to their parent, usually a dialog box, to prepare the pDC for drawing the control using the correct colors.}正解!在构建IDC_PIC(图片控件ID)这个时,对其画.
      

  8.   

    控件如果是从CWin派生的.
    或者先继承控件类,在类OnEraseBkgnd消息中画你要画的东东如加一张图片
    代码如下:
    BOOL CListBoxdzq::OnEraseBkgnd(CDC* pDC)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    CBitmap bitmap;
    bitmap.LoadBitmap(IDB_BITMAP1);
    BITMAP bmp;
    bitmap.GetBitmap(&bmp);
    CDC dcCompatible;
    dcCompatible.CreateCompatibleDC(pDC);
    dcCompatible.SelectObject(&bitmap);
    CRect rect;
    GetClientRect(&rect);
    pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);
    return TRUE;
    }
    再在你要加这个控件上
    public CXXX m_xx;
             m_xx.Create(WS_CHILD|WS_VISIBLE|LBS_STANDARD|WS_HSCROLL, 
    CRect(10,10,200,200), this, 1);
      

  9.   

    因为你还没有理解窗口重绘
    OnInitDialog中通过dc绘制的内容在接收到WM_PAINT消息时会失去
    建议阅读MSDN关于WM_PAINT消息的部分
      

  10.   

    又fa le,不知道这次你收到了吗
      

  11.   

    收到了,
    但是如果你把pic控件与bmp图片关联后,运行程序就只能看到图片,而看不到写的字
      

  12.   

    // My.cpp : implementation file
    //#include "stdafx.h"
    #include "fan.h"
    #include "My.h"#ifdef _DEBUG
    #define new DEBUG_NEW
    #undef THIS_FILE
    static char THIS_FILE[] = __FILE__;
    #endif/////////////////////////////////////////////////////////////////////////////
    // MyMy::My()
    {
    }My::~My()
    {
    }
    BEGIN_MESSAGE_MAP(My, CStatic)
    //{{AFX_MSG_MAP(My)
    ON_WM_ERASEBKGND()
    //}}AFX_MSG_MAP
    END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////
    // My message handlersBOOL My::OnEraseBkgnd(CDC* pDC) 
    {
    CBitmap bm;
    bm.LoadBitmap(IDB_BITMAP1);
    CRect rect;
    GetWindowRect(&rect);
    BITMAP bm1;
    CDC menbm;
    menbm.CreateCompatibleDC(pDC);
    menbm.SelectObject(&bm);
    pDC->BitBlt(0,0,rect.Width(),rect.Height(),&menbm,1,1,SRCCOPY);
    pDC->SetBkMode(1);
    pDC->TextOut(1,1,"fanqing");
    return true;
    }
      

  13.   

    别关联了,我看了一下,这里别人的代码中,都是通过BitBlt画上去的.
    楼主你也变一下观念吧.
      

  14.   

    找不到函数OnEraseBkgnd
    我从CStatic派生一个CMyStatic.添加OnEraseBkgnd函数,
    再在对话框里加一个CMyStatic变量,然后Create,再show,这样不行的。
    to fanqing(火影忍者+26%) 可不可以将你用OnEraseBkgnd方法实现的例子发给我一下
    http://community.csdn.net/Expert/topic/3797/3797140.xml?temp=3.513736E-02我得E_MAIL
    [email protected]
      

  15.   

    画个透明字干嘛搞这么复杂?? 我都说了。响应WM_PAINT, 实现最简单,也最正规的做法,下面是我的实现:CMyPicture从CStatic派生。 只要写这个消息的处理函数如下,就能实现楼主的效果:void CMyPicture::OnPaint() 
    {
    //    这个不能要
    // CPaintDC dc(this); // device context for painting
    CWnd::Default();   // 让控件画它自己的东西

    // TODO: Add your message handler code here
    // 接下来就轮到我了画了 :) CClientDC  dc(this);
    // 一个大点的字体,看得清楚点:)
    CFont font;
    font.CreatePointFont(300, "宋体", &dc);
    CFont* pof = dc.SelectObject(&font); // 文字颜色
    dc.SetTextColor(RGB(255,0,0));
    // 透明
    dc.SetBkMode(TRANSPARENT);
    // 绘文字
    dc.TextOut(10,10,"͸Ã÷ÎÄ×Ö"); dc.SelectObject(pof);}
      

  16.   

    谢谢各位的参与!
    特别感谢fanqing(火影忍者+26%