VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 776|回复: 5

[求助] 关于窗口背景贴图

[复制链接]
13_avatar_middle
online_vip 发表于 2016-4-11 17:04:17 | 显示全部楼层 |阅读模式
10驿站币
本帖最后由 fly12300 于 2016-4-11 17:33 编辑

我用CreateEx(        0,
                        _T("IT"),
                        _T("我的主框架"),
                         WS_VISIBLE | WS_POPUPWINDOW | WS_MAXIMIZEBOX | WS_MINIMIZEBOX | WS_THICKFRAME,
                        0,
                        0,
                        1000,
                        618,
                        NULL,
                        NULL);
创建了一个主对话框,在PreCreateWindow中注册窗口类的时候加上了CS_HREDRAW | CS_VREDRAW,然后OnPaint中用双缓冲给窗口背景贴图,用的是CImage类的Draw,现在问题是用鼠标拖动改变窗口大小的时候图片的刷新没有背景的快,在改变大小的时候明显可以看到窗口的背景色,图片刷新慢一点。求助。


下面是OnPaint的代码
        CRect rcClient;
        ::GetClientRect(m_hWnd, rcClient);

        PAINTSTRUCT ps;
        HDC hDc = ::BeginPaint(this->m_hWnd, &ps);
        assert(hDc);
        {
                //输出位图
                HDC hMemDc = ::CreateCompatibleDC(hDc);
                assert(hMemDc);
                {
                        HBITMAP hCompatibleBitmap = ::CreateCompatibleBitmap(hDc, rcClient.Width(), rcClient.Height());
                        assert(hCompatibleBitmap);
                        {
                                HBITMAP hOldBitmap = (HBITMAP)::SelectObject(hMemDc, (HGDIOBJ)hCompatibleBitmap);
                                assert(hOldBitmap);
                                {
                                        //再次进行双缓冲绘图
                                        {
                                                m_imgBKPicture.Draw(hMemDc,0, 0,rcClient.Width(), rcClient.Height());
                                                //UI_DrawMinBtn(hMemDc, rcClient);
                                        }
                                               
                                        ::BitBlt(hDc, rcClient.left, rcClient.top,rcClient.Width(), rcClient.Height(), hMemDc, 0, 0, SRCCOPY);
                                }
                                ::SelectObject(hMemDc, (HGDIOBJ)hOldBitmap);
                        }
                        DeleteObject((HGDIOBJ)hCompatibleBitmap);
                }
                DeleteObject((HGDIOBJ)hMemDc);
        }
        ::EndPaint(this->m_hWnd, &ps);





上一篇:win10 的 winhttp.dll
下一篇:关于QT静态库
51_avatar_middle
online_admins 发表于 2016-4-11 17:14:31 | 显示全部楼层
OnPaint 中的代码贴一下看看吧,没准能找出什么问题来。。。关于窗口背景贴图
13_avatar_middle
ico_lz  楼主| 发表于 2016-4-11 17:34:20 | 显示全部楼层
Syc 发表于 2016-4-11 17:14
OnPaint 中的代码贴一下看看吧,没准能找出什么问题来。。。

代码已经加入
51_avatar_middle
online_admins 发表于 2016-4-11 17:41:54 | 显示全部楼层
你这个背景图就一张,还用得着什么双缓冲绘图啊,直接 BitBlt 到 hDc 上就行啦
比如说有5张图,如果直接画的话,可能要画5次到 hDc 上,这个时候可以用双缓冲,把5张图都画到内存DC上,之后再一次性将内存DC,BitBlt 到 界面 hDc 上
13_avatar_middle
ico_lz  楼主| 发表于 2016-4-11 17:49:08 | 显示全部楼层
Syc 发表于 2016-4-11 17:41
你这个背景图就一张,还用得着什么双缓冲绘图啊,直接 BitBlt 到 hDc 上就行啦
比如说有5张图,如果直接画 ...

问题是bilbit后面的参数怎么办呢?
51_avatar_middle
online_admins 发表于 2016-4-11 18:15:18 | 显示全部楼层
fly12300 发表于 2016-4-11 17:49
问题是bilbit后面的参数怎么办呢?

我的意思是直接 Draw 到 背景上,但是这里其实确实有个问题,作为背景的话应该不用放在 OnPaint,不用每次都重绘,放在 WM_ERASEBACKGROUND 的消息响应函数中是否可以?
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-6-20 02:15

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表