问两个问题:1 有没有什么方法可以将一张JPG图片做成圆形显示?
2 一个静态文本框CStatic类,在显示的时候如何显示出边框?如果可以,那是否可以设置这个边框的颜色?还有能不能将这个做成圆形显示?高手求救!!!

解决方案 »

  1.   

    你可以使用mask,把不要的部分设成透明色
      

  2.   

    我在OnInitDialog()中加了下面的代码,并没有显示出椭圆型,哪位知道是为什么吗?CRgn rgn;
    CRect rect;
    GetDlgItem(IDC_STATIC)->GetWindowRect(&rect);
    rgn.CreateEllipticRgn(rect.left,rect.top,rect.right,rect.bottom);
    GetDlgItem(IDC_STATIC)->SetWindowRgn(rgn,true);
      

  3.   

    void CClipDrawDlg::OnPaint() 
    {
    CPaintDC dc(this);
    CRect rc(10,10,200,200); CRgn itemRegion;
    itemRegion.CreateEllipticRgn(rc.left,rc.top,rc.right,rc.bottom);
    dc.SelectClipRgn(&itemRegion);//<--**********DC裁减**********
    itemRegion.DeleteObject(); //**********************************
    //以下进行你的绘图操作
    BITMAP   bmp;   
    m_bitmap->GetBitmap(&bmp);   
    CDC cdc; 
    cdc.CreateCompatibleDC(&dc);
    CBitmap* pOldbm;
    pOldbm=cdc.SelectObject(m_bitmap); 
        dc.BitBlt(0,0,bmp.bmWidth,bmp.bmHeight,&cdc,0,0,SRCCOPY);
    cdc.SelectObject(pOldbm); CDialog::OnPaint();
    }CStatic类可以通过设置属性来决定是否具有边框,若想改变边框的颜色,除了自绘,还可以使用Picture控件,设置成Frame Type,有四种可选的边框颜色
      

  4.   

    To:dazedase(什么也不懂,什么也不会,所以我是菜星)(▲▲▲▲▲→★)) 
    你的方法好像不行啊,出来的还是矩形,能不能帮我看看是不是我的代码有问题class CTestClass : public CStatic
    void CTestClass::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting CRect rect;
    GetWindowRect(&rect);
    CRgn rgn;
    rgn.CreateEllipticRgn(rect.left,rect.top,rect.right,rect.bottom);
    dc.SelectClipRgn(&rgn,RGN_XOR);
    rgn.DeleteObject(); CBitmap cmap;
    cmap.LoadBitmap(IDB_BITMAP2);
             BITMAP m_bit;
    cmap.GetBitmap(&m_bit);
    CDC cdc;
    cdc.CreateCompatibleDC(&dc);
    CBitmap *oldmap = cdc.SelectObject(&cmap);
    dc.BitBlt(0,0,m_bit.bmWidth,m_bit.bmHeight,&cdc,0,0,SRCCOPY);
    cdc.SelectObject(oldmap);
    }class CNewtDlg : public CDialog
    {
      ......
     public:
         CTestClass t_static;
    }
    BOOL CNewtDlg::OnInitDialog()
    {
    CDialog::OnInitDialog();
             ........//这中间MFC生成的代码省略不贴出来了
    // TODO: Add extra initialization here CRect t_rect;
    GetClientRect(&t_rect);
             t_rect.DeflateRect(150,100,150,100); 
             t_static.Create(NULL,WS_CHILD|WS_VISIBLE|SS_BITMAP|SS_NOTIFY,t_rect,this);
    t_static.ShowWindow(SW_SHOW); return TRUE;  // return TRUE  unless you set the focus to a control
    }
      

  5.   

    void CTestClass::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting CRect rect;
    GetClientRect(&rect);//<-----******
    CRgn rgn;
    rgn.CreateEllipticRgn(rect.left,rect.top,rect.right,rect.bottom);
    dc.SelectClipRgn(&rgn);//<-----******
    rgn.DeleteObject(); CBitmap cmap;
    cmap.LoadBitmap(IDB_BITMAP2);
             BITMAP m_bit;
    cmap.GetBitmap(&m_bit);
    CDC cdc;
    cdc.CreateCompatibleDC(&dc);
    CBitmap *oldmap = cdc.SelectObject(&cmap);
    dc.BitBlt(0,0,m_bit.bmWidth,m_bit.bmHeight,&cdc,0,0,SRCCOPY);
    cdc.SelectObject(oldmap);
    }
      

  6.   

    To:dazedase(什么也不懂,什么也不会,所以我是菜星)(▲▲▲▲▲→★)) 
    按你的方法改了后只出现很小的一块,大概只有四分之一的部分显示了,这是为什么?而且,如果改成下面的代码,就什么都不显示了,是为什么?
    dc.BitBlt(0,0,rect.Width(),rect.Height(),&cdc,m_bit.bmWidth,m_bit.bmHeight,SRCCOPY);
      

  7.   

    //(椭)圆区域要和位图所在矩形区域相切,否则就会错位
    //Try thisvoid CTestClass::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting
    CBitmap cmap;
    cmap.LoadBitmap(IDB_BITMAP2);
             BITMAP m_bit;
    cmap.GetBitmap(&m_bit); CRect rect(0,0,m_bit.bmWidth,m_bit.bmHeight);//<-----******
    CRgn rgn;
    rgn.CreateEllipticRgn(rect.left,rect.top,rect.right,rect.bottom);
    dc.SelectClipRgn(&rgn);//<-----******
    rgn.DeleteObject(); CDC cdc;
    cdc.CreateCompatibleDC(&dc);
    CBitmap *oldmap = cdc.SelectObject(&cmap);
    dc.BitBlt(0,0,m_bit.bmWidth,m_bit.bmHeight,&cdc,0,0,SRCCOPY);
    cdc.SelectObject(oldmap);
    }
      

  8.   

    这样是可以显示,但能否有方法能使图片填充满整个Static区域?而不是仅仅显示图片的大小?
      

  9.   

    填充满整个Static区域:void CTestClass::OnPaint() 
    {
    CPaintDC dc(this); // device context for painting
    CRect rect;
    GetDlgItem(IDC_YOURSTATIC)->GetWindowRect(&rect);//<-----******
    CRgn rgn;
    rgn.CreateEllipticRgn(rect.left,rect.top,rect.right,rect.bottom);
    dc.SelectClipRgn(&rgn);//<-----******
    rgn.DeleteObject();CBitmap cmap;
    cmap.LoadBitmap(IDB_BITMAP2);BITMAP bm;
    cmap.GetBitmap(&bm);
    CDC cdc;
    cdc.CreateCompatibleDC(&dc);
    CBitmap *oldmap = cdc.SelectObject(&cmap);
    dc.StretchBlt(rect.left,rect.top,rect.Width(),rect.Height(),&cdc,0,0,bm.bmWidth,bm.bmHeight,SRCCOPY);
    cdc.SelectObject(oldmap);
    }//[You should try out it by yourself]