如何清除CStatic的背景图片

lixianren2 2007-07-27 02:42:03
我创建了一个CStatic控件,用于显示bmp图片
大致程序如下:
HBITMAP hBitMap = (HBITMAP)LoadImage( AfxGetInstanceHandle(),
"pic.bmp", IMAGE_BITMAP, 0,0, LR_LOADFROMFILE );

// 显示背景
m_ctrlBmpStatic.ModifyStyle( SS_BLACKFRAME, SS_BITMAP | SS_CENTERIMAGE );
m_ctrlBmpStatic.SetBitmap( hBitMap );

在一定事件发生后,我需要清除图片显示,代码如下:
m_ctrlBmpStatic.SetBitmap( NULL );

费解情形是如果ModifyStyle时我不加SS_CENTERIMAGE样式,那么清除就成功了,但显示图片的时候图片显示在左上角,不好看。一旦我加了SS_CENTERIMAGE样式,图片就无法清除。

请问我如何能在保留SS_CENTERIMAGE样式的前提下清除图片显示?
...全文
508 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
BEYOND_Q 2007-07-28
  • 打赏
  • 举报
回复
the hBitmap is a member variable of this class
hBitMap = NULL;
void CBmpDlg::OnButton1()
{
// TODO: Add your control notification handler code here

if( !hBitMap ) hBitMap = (HBITMAP)LoadImage( AfxGetInstanceHandle(),
"pic.bmp", IMAGE_BITMAP, 0,0, LR_LOADFROMFILE );

if( !m_ctlbmpstatic.IsWindowVisible() ) m_ctlbmpstatic.ShowWindow(SW_SHOW);
// 显示背景
m_ctlbmpstatic.ModifyStyle( SS_BLACKFRAME, SS_BITMAP | SS_CENTERIMAGE );
m_ctlbmpstatic.SetBitmap( hBitMap );


}

void CBmpDlg::OnButton2()
{
// TODO: Add your control notification handler code here
if( m_ctlbmpstatic.IsWindowVisible() ) m_ctlbmpstatic.ShowWindow(SW_HIDE);
}
flypig917 2007-07-28
  • 打赏
  • 举报
回复
CStatic *static1=(CStatic*)GetDlgItem(IDC_STATIC);//控件ID
static1->SetBitmap( NULL);
Invalidate(TRUE);
flypig917 2007-07-28
  • 打赏
  • 举报
回复
使用FillRect函数
flypig917 2007-07-28
  • 打赏
  • 举报
回复
刷新全屏就行了!
hurryboylqs 2007-07-28
  • 打赏
  • 举报
回复
按照你自己说的:费解情形是如果ModifyStyle时我不加SS_CENTERIMAGE样式,那么清除就成功了
--------------
那你再把它修改成不具有SS_CENTERIMAGE样式,然后m_ctrlBmpStatic.SetBitmap( NULL );不可以了吗?
miaoshengwu 2007-07-27
  • 打赏
  • 举报
回复
把 hBitMap 定义成全局变量,
在一定事件后,
DeleteObject(hBitMap);
Invalidate(TRUE);
lixianren2 2007-07-27
  • 打赏
  • 举报
回复
没有人帮忙?不会很难的,高人帮我看看

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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