试试这个:
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);
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);
解决方案 »
- 哪位帮我看看为什么出错
- 能否让类名不在资源视图中出现
- 怎样使应用程序处于激活状态
- 关于CWebBrowser2的旷世难道,高手请进
- 事关国家和民族安全问题,明白的人一定得回答!
- 我用dlg.DoModal()创建一个对话框来等待我的主程序完成操作,但dlg放在主程序中,就一直要等这个等待对话框关闭才执行下面的操作?
- 如果我在w2k里装了MSDN,我在98里可以使用吗?
- Visual C++程序员在上海的行情真的不好吗?一个郁闷中的C++ Fans
- 《Essential c++》从那可以下载?
- 救命的问题,我的CFormView上的控件CCombobox,Clist为何不能操作了?
- go(F5)可以执行,但用debug的exe或发行的exe就宕机,一般是什么原因???
- 串口通讯的问题!!!
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);
请大家再想想办法。谢谢。
你好,你的回答我已收到。但我现在讨论的是CStatic控件的图片显示,并不是CView类。m_picture是一个CStatic控件的名称。如果你的意思是将m_picture申明为CView类的成员的话,请问具体如何操作?
谢谢。
如果图片在资源内而不是外部文件,这样做就可以了:
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());
((CStatic *)GetDlgItem(IDC_STATIC1))->SetBitmap(
::LoadBitmap(hInst,MAKEINTRESOURCE(IDB_BITMAP1)));
这段代码肯定是可以的。
你误解我的意思了,其实这个问题很简单。你只要通过AppWizard生成一个SDI程序框架,在CxxxView类中加入成员CStatic m_picture,再在CxxxView的OnCreate函数中加入我上面列出的代码就行了。其中::LoadBitmap是Win32 API。
也许是我没有表达清楚,我再重申一下。我设计了一个基于对话框的程序,在对话框中有一个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...这种格式好象编译不通过。
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);
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);
}