如何清除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样式的前提下清除图片显示?
...全文
541 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
  • 打赏
  • 举报
回复
没有人帮忙?不会很难的,高人帮我看看
打开链接下载源码: https://pan.quark.cn/s/e16cbe99d1d3 在Visual C++(VC++)的开发环境中,设置背景图片是一项普遍的需求,特别是在构建用户界面时,为了增强用户体验和视觉表现力,我们常常会为应用程序界面附加背景图像。 本篇将详尽阐释如何在VC++中达成这一功能,并提供若干实用的技巧。 你需要掌握VC++中的基础界面组件,例如窗口类(CWnd)及其衍生的类,比如对话框类(CDialog)。 在大多数情形下,背景图片的配置会关联到这些窗口或对话框对象。 1. **静态控件背景设定**: 若你的界面包含一个静态控件(CStatic),你可以通过覆盖`OnPaint`消息响应函数来设定背景图片。 创建一个定制的CStatic派生类,然后重写`OnPaint`方法,在其中绘制背景图像。 你可以选用GDI+库或者MFC的CDC类进行图像的绘制。 2. **对话框背景设定**: 对于对话框,你可以调整对话框资源,将背景色设定为透明,然后在`OnInitDialog`函数中载入并绘制背景图片。 通常,我们会借助位图刷(CBitmap和CBrush)来执行这一任务。 创建一个位图对象,载入图片,然后利用它来构建一个刷子,最终用这个刷子填充对话框的背景。 3. **定制窗口背景**: 若涉及定制窗口,你需要处理`WM_ERASEBKGND`消息,以避免系统默认的清除背景行为。 同样,你需要在`OnPaint`消息响应中绘制背景图片。 记得在绘制完成后调用`EndPaint`以完成绘制操作。 4. **借助资源文件**: 将背景图片作为资源文件(如.res文件)加入到工程中,这样可以便于在不同平台上使用,且不会因为路径问题导致无法找到图片。 在代码中,你可以通过 IDR_...

15,976

社区成员

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

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