在picture control 里贴图的问题

大头猫 2011-06-07 11:53:32
先贴代码::~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int nSel;
nSel=m_choose_picture.GetCurSel();
CString s;
m_choose_picture.GetText(nSel,s);

// TODO: 在此添加控件通知处理程序代码

CString path;
path+=".\\图片.\\";
path+=s;
if(m_bmp.m_hObject!=NULL)
{
m_bmp.DeleteObject();
}

HBITMAP hbmp=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),path,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE);

if(hbmp==NULL)
{
AfxMessageBox(TEXT("找不到位图"));
}
m_bmp.Attach(hbmp);

DIBSECTION ds;
BITMAPINFOHEADER &bminfo=ds.dsBmih;

m_bmp.GetObject(sizeof(ds),&ds);

int cx=bminfo.biWidth;
int cy=bminfo.biHeight;

CRect rect;

GetDlgItem(IDC_PIC)->GetWindowRect(&rect);

ScreenToClient(&rect);

GetDlgItem(IDC_PIC)->MoveWindow(rect.left,rect.top,cx,cy,true);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我设置在listbox表里点击捕捉到图片的名字~~~~~~~~~~~~~
问题是,显示的图片是按照图片的大小,根本不关picture control的大小有关
我想问的是:怎么才能使load进去的图片,填充picture control 的大小,即小的拉伸,大的缩小
我学过用StretchBlt来用过,不过都是操作加载进程序的位图。希望有搞过的兄弟告诉我一下。。
...全文
380 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
大头猫 2011-06-08
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 zz_lgy 的回复:]
引用 2 楼 gao5214637 的回复:

我的问题是在顶楼那些代码里,不让picture control 调成与图片大小一致,而是让图片调成与picture control的大小一致。急求~~~~



m_bmp.GetObject(sizeof(ds),&ds);

int cx=bminfo.biWidth;
int cy=bminfo.biHeight;
……
[/Quote]
这个我知道,我是问有办法不要让控件大小调成与图片大小一致,而是让图片拉伸或缩小成控件的大小
大头猫 2011-06-08
  • 打赏
  • 举报
回复
部长,俺要入党啊。。求推荐下
_free 2011-06-08
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 gao5214637 的回复:]

我的问题是在顶楼那些代码里,不让picture control 调成与图片大小一致,而是让图片调成与picture control的大小一致。急求~~~~
[/Quote]


m_bmp.GetObject(sizeof(ds),&ds);

int cx=bminfo.biWidth;
int cy=bminfo.biHeight;

CRect rect;

GetDlgItem(IDC_PIC)->GetWindowRect(&rect);

ScreenToClient(&rect);

GetDlgItem(IDC_PIC)->MoveWindow(rect.left,rect.top,cx,cy,true);

在这,你已经把控件的大小调整为图片的大小了

Eleven 2011-06-08
  • 打赏
  • 举报
回复
void CXXXDlg::OnPaint() 
{
CDialog::OnPaint();

CStatic* pStatic = (CStatic*)GetDlgItem(IDC_STATIC1);
ASSERT(pStatic);
CPaintDC dc(pStatic);
CRect rc;
pStatic->GetClientRect(&rc);

HBITMAP hbmp = (HBITMAP)::LoadImage(NULL, _T("F:\\11.bmp"), IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE | LR_DEFAULTCOLOR | LR_LOADFROMFILE);
ASSERT(hbmp);

CBitmap bmp;
bmp.Attach(hbmp);
BITMAP bm;
bmp.GetBitmap(&bm);

CDC memDC;
memDC.CreateCompatibleDC(&dc);
ASSERT(memDC.GetSafeHdc());

CBitmap* pOldbmp = (CBitmap*)memDC.SelectObject(&bmp);
dc.StretchBlt(0, 0, rc.Width(), rc.Height(), &memDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);

memDC.SelectObject(pOldbmp);
bmp.DeleteObject();
memDC.DeleteDC();
}

你的代码太长了,没细看
大头猫 2011-06-08
  • 打赏
  • 举报
回复
我的问题是在顶楼那些代码里,不让picture control 调成与图片大小一致,而是让图片调成与picture control的大小一致。急求~~~~
大头猫 2011-06-08
  • 打赏
  • 举报
回复
对了,在OnPaint中的画图代码为!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CPaintDC dc(GetDlgItem(IDC_PIC));
CRect rcclient;
GetDlgItem(IDC_PIC)->GetClientRect(&rcclient);

CDC memdc;

memdc.CreateCompatibleDC(&dc);

CBitmap bitmap;

bitmap.CreateCompatibleBitmap(&dc,rcclient.Width(),rcclient.Height());

memdc.SelectObject(&bitmap);


CWnd::DefWindowProc(WM_PAINT,(WPARAM)memdc.m_hDC,0);
CDC maskdc;

maskdc.CreateCompatibleDC(&dc);
CBitmap maskbitmap;

maskbitmap.CreateBitmap(rcclient.Width(),rcclient.Height(),1,1,NULL);

maskdc.SelectObject(&maskbitmap);
maskdc.BitBlt(0,0,rcclient.Width(),rcclient.Height(),&memdc,rcclient.left,rcclient.top,SRCCOPY);

CBrush brush;

brush.CreatePatternBrush(&m_bmp);

dc.FillRect(rcclient,&brush);

dc.BitBlt(rcclient.left,rcclient.top,rcclient.Width(),rcclient.Height(),&memdc,rcclient.left,rcclient.top,SRCPAINT);

brush.DeleteObject();
}
}

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧