EVC中CStatic的问题(SetbitmapCStatic * pSat = (CStatic*)GetDlgItem(IDC_STATI)

时间:2022-08-28 05:48:18
VC6下的代码:
  CStatic* pSat = (CStatic*)GetDlgItem(IDC_STATIC111);
  pSat->ModifyStyle(0,SS_BITMAP|SS_CENTERIMAGE);
  HBITMAP hBitmap = ::LoadBitmap(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_BITMAP1));
  pSat->SetBitmap(hBitmap);
图片IDB_BITMAP1可以被加载到CStatic(IDC_STATIC111)上显示

EVC4下的代码:
  CStatic* pSat = (CStatic*)GetDlgItem(IDC_STATIC111);
  pSat->ModifyStyle(0,SS_BITMAP|SS_CENTERIMAGE);
  HBITMAP hBitmap = ::LoadBitmap(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_BITMAP1));
  pSat->SetBitmap(hBitmap);// 这里CStatic上不显示图片IDB_BITMAP1
  pSat->SetBitmap(hBitmap);// 这里CStatic上显示图片!!!!!!

请问:有人能解释这个问题吗?我是无意中发现SetBitmap函数执行两次以上是可以的。
这样写有问题吗?不行的话,怎么写比较好?


   

7 个解决方案

#1


帮顶下。

MARK,我也学习下。

#2


楼主:
 CStatic* pSat = (CStatic*)GetDlgItem(IDC_STATIC111); 
  pSat->ModifyStyle(0,SS_BITMAP|SS_CENTERIMAGE); 
  HBITMAP hBitmap = ::LoadBitmap(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_BITMAP1)); 
  pSat->SetBitmap(hBitmap);//这里CStatic上不显示图片IDB_BITMAP1 
  pSat->SetBitmap(hBitmap);//这里CStatic上显示图片!!!!!! 
这些代码执行之后
这个pSat你delete了吧?然后pSat = NULL;
如果这样,你先注释掉delete,内存泄露先不管它。
然后用一样pSat->SetBitmap(hBitmap);
试试能不能够显示图片。

#3


如果可以显示。
delete pSat放到析构函数中去。

#4


to 楼上:
没有执行delete;上面是专门测试功能的,就没考虑内存泄露。
就在资源里加了一个Static,导入一个bmp图像,加了一个button;上述代码放在了对button的响应里。
VC的开发过程完全一样

#5


呵呵,测试时最好一次只测试一个地方的东西,以前我也犯过这方面的错误,建议用官方的东西测试,如下:
Example
CStatic myStatic;

// Create a child bitmap static control.
myStatic.Create(_T("my static"), 
  WS_CHILD|WS_VISIBLE|SS_BITMAP|SS_CENTERIMAGE, CRect(10,10,150,50), 
  pParentWnd);

// Set the bitmap of the static control to be the 
// system check-mark bitmap.
myStatic.SetBitmap( ::LoadBitmap(NULL, MAKEINTRESOURCE(OBM_CHECK)) );
Requirements 

  Windows CE versions: 1.0 and later  
  Header file: Declared in Afxwin.h

#6


由于我使用的时候,就是要把图片加载到现有的CStatic上,至少要完成上述的这些功能....
希望高人指点呀!SetBitmap除第一次无效为,以后每次赋值均有效(曾经做了一个图片循环进行测试)
搞不明白为什么呀?

#7


不知道,帮顶

#1


帮顶下。

MARK,我也学习下。

#2


楼主:
 CStatic* pSat = (CStatic*)GetDlgItem(IDC_STATIC111); 
  pSat->ModifyStyle(0,SS_BITMAP|SS_CENTERIMAGE); 
  HBITMAP hBitmap = ::LoadBitmap(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDB_BITMAP1)); 
  pSat->SetBitmap(hBitmap);//这里CStatic上不显示图片IDB_BITMAP1 
  pSat->SetBitmap(hBitmap);//这里CStatic上显示图片!!!!!! 
这些代码执行之后
这个pSat你delete了吧?然后pSat = NULL;
如果这样,你先注释掉delete,内存泄露先不管它。
然后用一样pSat->SetBitmap(hBitmap);
试试能不能够显示图片。

#3


如果可以显示。
delete pSat放到析构函数中去。

#4


to 楼上:
没有执行delete;上面是专门测试功能的,就没考虑内存泄露。
就在资源里加了一个Static,导入一个bmp图像,加了一个button;上述代码放在了对button的响应里。
VC的开发过程完全一样

#5


呵呵,测试时最好一次只测试一个地方的东西,以前我也犯过这方面的错误,建议用官方的东西测试,如下:
Example
CStatic myStatic;

// Create a child bitmap static control.
myStatic.Create(_T("my static"), 
  WS_CHILD|WS_VISIBLE|SS_BITMAP|SS_CENTERIMAGE, CRect(10,10,150,50), 
  pParentWnd);

// Set the bitmap of the static control to be the 
// system check-mark bitmap.
myStatic.SetBitmap( ::LoadBitmap(NULL, MAKEINTRESOURCE(OBM_CHECK)) );
Requirements 

  Windows CE versions: 1.0 and later  
  Header file: Declared in Afxwin.h

#6


由于我使用的时候,就是要把图片加载到现有的CStatic上,至少要完成上述的这些功能....
希望高人指点呀!SetBitmap除第一次无效为,以后每次赋值均有效(曾经做了一个图片循环进行测试)
搞不明白为什么呀?

#7


不知道,帮顶