再谈CStatic控件中的图片显示

slmine 2000-06-10 03:34:00
上次贴出CStatic控件中的图片显示的帖子后,谢谢有高手回复。但我在实验后仍未成功。我认为可能是需要首先将CStatic控件设置成能显示BITMAP属性。以下是我的一段源代码:
m_picture.Create("",WS_CHILD and WS_VISIBLE and SS_CENTER and SS_BITMAP,CRect(50,50,60,60),this,IDC_STATIC1);
bitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1),IMAGE_BITMAP,0,0,LR_VGACOLOR);
m_picture.SetBitmap(bitmap);

其中,m_picture为CStatic控件名,IDB_BITMAP1为图片名。但我在编译时,系统提示出错。我想请高手帮我检查一下。
...全文
1029 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
qianying 2001-07-10
  • 打赏
  • 举报
回复
.
ad 2000-06-13
  • 打赏
  • 举报
回复
我是这样做的:
void CDevSelector::OnSelchangeDeviceList()
{
OnPaint(); //把这一行放在你的按下按钮的响应代码中
}

void CDevSelector::OnPaint()
{
CPaintDC dc(this);

//IDC_DEVICE_LIST是list控件,只要改变其中的选项,就重新显示示意图
CComboBox *box = (CComboBox *)GetDlgItem(IDC_DEVICE_LIST);
m_nIndex = box->GetCurSel();
CWnd *st = GetDlgItem(IDC_STATIC_SAMPLE);
CDC *pDC = st->GetDC();
RECT r;
st->GetClientRect(&r);
st->InvalidateRect(NULL);
st->UpdateWindow();
if(m_nIndex != CB_ERR && DevIDBX(m_nIndex)){
CDC *pMemDC = new CDC;
CBitmap *bmp;
bmp = new CBitmap;
bmp->LoadBitmap(DevIDBX(m_nIndex));
pMemDC->CreateCompatibleDC(pDC);
pMemDC->SelectObject(bmp);
int x=(r.right-32)/2,y=(r.bottom-32)/2;
pDC->BitBlt(x,y,32,32,pMemDC,0,0,SRCCOPY);
bmp->DeleteObject();
pDC->SelectStockObject(NULL_BRUSH);
pDC->SelectStockObject(BLACK_PEN);
pDC->Rectangle(x,y,x+32,y+32);
delete bmp;
delete pMemDC;
}
else{
pDC->SelectStockObject(NULL_PEN);
pDC->SelectStockObject(WHITE_BRUSH);
pDC->Rectangle(&r);
}
st->ReleaseDC(pDC);
}

dzl 2000-06-12
  • 打赏
  • 举报
回复
slmine:
你误解我的意思了,其实这个问题很简单。你只要通过AppWizard生成一个SDI程序框架,在CxxxView类中加入成员CStatic m_picture,再在CxxxView的OnCreate函数中加入我上面列出的代码就行了。其中::LoadBitmap是Win32 API。
dzl 2000-06-12
  • 打赏
  • 举报
回复

CStatic* m_picture=(CStatic *)GetDlgItem(IDC_STATIC1);
HBITMAP bitmap;
bitmap=(HBITMAP)::LoadBitmap(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1));
m_picture->ModifyStyle(0,SS_BITMAP and SS_CENTERIMAGE);
m_picture->SetBitmap(bitmap);
slmine 2000-06-12
  • 打赏
  • 举报
回复
各位:
也许是我没有表达清楚,我再重申一下。我设计了一个基于对话框的程序,在对话框中有一个CStatic的控件和一些按钮。现在,要实现的功能是点击按钮,在CStatic控件中显示一张图片。
代码如下:
m_picture.Create("",WS_CHILD and WS_VISIBLE and SS_CENTER and SS_BITMAP,CRect(50,50,60,60),this,IDC_STATIC1);
bitmap=(HBITMAP)::LoadImage(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDB_BITMAP1),IMAGE_BITMAP,0,0,LR_VGACOLOR);
m_picture.SetBitmap(bitmap);
其中m_picture是CStatic控件的名称,IDB_BITMAP1是图片名称。
现在,问题是编译代码时没有报错。但试运行时,点击按钮就出错。
还有,WS_CHILD and WS_VISIBLE...这种格式好象编译不通过。
bigjim 2000-06-12
  • 打赏
  • 举报
回复
HINSTANCE hInst = AfxGetInstanceHandle();
((CStatic *)GetDlgItem(IDC_STATIC1))->SetBitmap(
::LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP1)));
这段代码肯定是可以的。
ad 2000-06-11
  • 打赏
  • 举报
回复
控件在view或对话框中是一样的。
如果图片在资源内而不是外部文件,这样做就可以了:
CBitmap bitmap;
m_picture.Create("",WS_CHILD and WS_VISIBLE and SS_CENTERIMAGE and SS_BITMAP,
CRect(0,0,180,160),this,IDC_STATIC1);
bitmap.LoadBitmap(IDB_BITMAP1);
m_picture.SetBitmap(bitmap.Detach());
slmine 2000-06-11
  • 打赏
  • 举报
回复
dzl:
你好,你的回答我已收到。但我现在讨论的是CStatic控件的图片显示,并不是CView类。m_picture是一个CStatic控件的名称。如果你的意思是将m_picture申明为CView类的成员的话,请问具体如何操作?
谢谢。
dzl 2000-06-10
  • 打赏
  • 举报
回复
请注意,我使用的是::LoadBitmap而不是::LoadImage,另本段代码已在VC6上运行通过,我是在CView类的OnCreate中加入本段代码的,m_pictrue是CView类的成员。
slmine 2000-06-10
  • 打赏
  • 举报
回复
谢谢以上两位高手的参与。经本人的测试,发现以下问题请大家帮忙分析一下。首先,我在编译时查出使用“and”是语法错误。另外,dzl朋友的回帖中的LoadBitmap函数不能只使用两个参数。
请大家再想想办法。谢谢。
dzl 2000-06-10
  • 打赏
  • 举报
回复
改成如下代码后运行通过:
HBITMAP bitmap;
m_picture.Create("",WS_CHILD and WS_VISIBLE and SS_CENTERIMAGE and SS_BITMAP,
CRect(0,0,180,160),this,IDC_STATIC1);
bitmap=(HBITMAP)::LoadBitmap(AfxGetInstanceHandle(),(LPSTR)IDB_BITMAP1);
m_picture.SetBitmap(bitmap);
seaskyfox 2000-06-10
  • 打赏
  • 举报
回复
试试这个:
HBITMAP hBmp=(HBITMAP)::CreateMappedBitmap(AfxGetApp()->m_hInstance,IDB_MYBMP,0,NULL,0);
m_hBMP=(HBITMAP)::CopyImage(hBmp,IMAGE_BITMAP,0,0,LR_COPYRETURNORG and LR_COPYDELETEORG);
CStatic *pSet;
pSet=(CStatic*)GetDlgItem(IDC_STATIC1);
pSet->SetBitmap(m_hBMP);

16,471

社区成员

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

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

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