VC6中背景图片伸缩问题

liweisdut 2010-08-10 10:12:33
我的用VC6开发的应用程序,带有背景图片,窗口一开始最大化。当点击还原按钮时,背景图片没有缩小,再点最大化按钮时,背景图片变成2个,前一个是还原时的小图片,后一个是最大化后的大图片,很难看!!!怎么才能让背景图片随窗体的大小伸缩呢?我添加背景图片时已经使用StretchBlt()了,为什么不伸缩呢?请问大家有没有解决办法?
...全文
229 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
城南的星星 2010-08-12
  • 打赏
  • 举报
回复
响应WM_SIZE消息啊
Eleven 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 liweisdut 的回复:]
怎么才能使我的按钮也随窗口大小更新位置呢?
[/Quote]
MoveWindow/SetWindowPos
liweisdut 2010-08-10
  • 打赏
  • 举报
回复
怎么才能使我的按钮也随窗口大小更新位置呢?
liweisdut 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xxd_qd 的回复:]
响应WM_SIZE消息,并在里面加一句:Invalidate();
[/Quote]
可以,谢谢啦
xxd_qd 2010-08-10
  • 打赏
  • 举报
回复
你的问题在于放缩窗口时Windows不会把你整个客户区都设为无效(为了提高效率),所以你再怎么改OnPaint都没用,你必须自己响应WM_SIZE,并手工把整个客户区无效化,这样你的OnPaint代码才有用。

顺便说一句,OnPaint里面不能调用基类的OnPaint,除非你自己的OnPaint里面没有声明过CPaintDC类型的变量。
liweisdut 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 djyrsty 的回复:]
在CPaintDC dc(this)后加上CDialog::OnPaint();试下
[/Quote]
没有效果
liweisdut 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mengfeihong 的回复:]
dc.SetStretchBltMode(HALFTONE); 这句貌似多余。。。。。。去掉试试。。。
[/Quote]
去掉的话,背景图片会轻度失真的
xxd_qd 2010-08-10
  • 打赏
  • 举报
回复
响应WM_SIZE消息,并在里面加一句:Invalidate();
djyrsty 2010-08-10
  • 打赏
  • 举报
回复
在CPaintDC dc(this)后加上CDialog::OnPaint();试下
蒙飞鸿 2010-08-10
  • 打赏
  • 举报
回复
dc.SetStretchBltMode(HALFTONE); 这句貌似多余。。。。。。去掉试试。。。
liweisdut 2010-08-10
  • 打赏
  • 举报
回复
大家帮忙分析分析
liweisdut 2010-08-10
  • 打赏
  • 举报
回复
void CxxxDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting

SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
//CDialog::OnPaint();
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
CDC dcMem;

dcMem.CreateCompatibleDC(&dc); //创建兼容DC
CBitmap bmpBackground;
bmpBackground.LoadBitmap(IDB_BMPBK);

BITMAP bitmap;
bmpBackground.GetBitmap(&bitmap);
CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);
//选择伸缩模式
dc.SetStretchBltMode(HALFTONE);
dc.StretchBlt(220,33,rect.Width()-223,rect.Height()-55,&dcMem,0,0,
bitmap.bmWidth,bitmap.bmHeight,SRCCOPY);
}
}
m_tornado 2010-08-10
  • 打赏
  • 举报
回复
没道理啊,如果用了stretchblt应该没什么问题,你怎么用的,能贴出来看看么?
liweisdut 2010-08-10
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 visualeleven 的回复:]
引用 11 楼 liweisdut 的回复:
怎么才能使我的按钮也随窗口大小更新位置呢?

MoveWindow/SetWindowPos
[/Quote]
可是怎么获得按钮的坐标位置呢?

15,979

社区成员

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

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