如何将图片截成圆形显示? 问两个问题:1 有没有什么方法可以将一张JPG图片做成圆形显示?2 一个静态文本框CStatic类,在显示的时候如何显示出边框?如果可以,那是否可以设置这个边框的颜色?还有能不能将这个做成圆形显示?高手求救!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以使用mask,把不要的部分设成透明色 我在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); 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,有四种可选的边框颜色 To:dazedase(什么也不懂,什么也不会,所以我是菜星)(▲▲▲▲▲→★)) 你的方法好像不行啊,出来的还是矩形,能不能帮我看看是不是我的代码有问题class CTestClass : public CStaticvoid 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} 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);} To:dazedase(什么也不懂,什么也不会,所以我是菜星)(▲▲▲▲▲→★)) 按你的方法改了后只出现很小的一块,大概只有四分之一的部分显示了,这是为什么?而且,如果改成下面的代码,就什么都不显示了,是为什么?dc.BitBlt(0,0,rect.Width(),rect.Height(),&cdc,m_bit.bmWidth,m_bit.bmHeight,SRCCOPY); //(椭)圆区域要和位图所在矩形区域相切,否则就会错位//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);} 这样是可以显示,但能否有方法能使图片填充满整个Static区域?而不是仅仅显示图片的大小? 填充满整个Static区域:void CTestClass::OnPaint() {CPaintDC dc(this); // device context for paintingCRect 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] 窗口变化 再求思路 VC6.0环境下 如何利用teechart读取 之前保存的数据画出线 反流氓软件工作室!火热加盟!25818922 vc中项目执行问题,紧急!! VC调试中遇到一个问题,请教!!! 请问如何手工天加最小化后的图标(内详) SetWindowsHookEx在win98下为什么不正常 在安装钩子时出错,Getlasterror返回:没有模块句柄,无法设置非本机连接 象Yahoo,Sohu的搜索引擎是怎么做的!!欢迎讨论 有关毕业设计 ocx中的界面怎么实现xp风格?
CRect rect;
GetDlgItem(IDC_STATIC)->GetWindowRect(&rect);
rgn.CreateEllipticRgn(rect.left,rect.top,rect.right,rect.bottom);
GetDlgItem(IDC_STATIC)->SetWindowRgn(rgn,true);
{
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,有四种可选的边框颜色
你的方法好像不行啊,出来的还是矩形,能不能帮我看看是不是我的代码有问题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
}
{
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);
}
按你的方法改了后只出现很小的一块,大概只有四分之一的部分显示了,这是为什么?而且,如果改成下面的代码,就什么都不显示了,是为什么?
dc.BitBlt(0,0,rect.Width(),rect.Height(),&cdc,m_bit.bmWidth,m_bit.bmHeight,SRCCOPY);
//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);
}
{
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]