| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1879 人关注过本帖
标题:用SetClassLong设置背景问题
只看楼主 加入收藏
nzxhust
Rank: 2
等 级:论坛游民
威 望:1
帖 子:99
专家分:28
注 册:2008-2-14
结帖率:85.71%
收藏
已结贴  问题点数:20 回复次数:8 
用SetClassLong设置背景问题
想弄个更换背景图片,于是用
invoke    CreatePatternBrush,hBmp
invoke    SetClassLong,hWnd,GCL_HBRBACKGROUND,eax
倒是没有效果后来看了下MSDN说GCL_HBRBACKGROUND不会立即重绘要下次窗口绘制的时候,我就加了
invoke   UpdataWindow,hWnd
还是不行
调试了下发现SetClassLong返回的是0,应该是没成功。不知道哪里出了问题
搜索更多相关主题的帖子: 主动设置背景图片 
2009-08-17 10:10
nzxhust
Rank: 2
等 级:论坛游民
威 望:1
帖 子:99
专家分:28
注 册:2008-2-14
收藏
得分:0 
额不会是我问题太小白了吧......来个回答下啦
2009-08-18 09:22
nzxhust
Rank: 2
等 级:论坛游民
威 望:1
帖 子:99
专家分:28
注 册:2008-2-14
收藏
得分:0 
是不是这样不行要在WM_PAINT里面画?
在CTLCOLORDLG只能初始化背景图片,我想主动更换背景图片
2009-08-18 21:37
nzxhust
Rank: 2
等 级:论坛游民
威 望:1
帖 子:99
专家分:28
注 册:2008-2-14
收藏
得分:0 
试了下用GDI画,但是我不是太懂GDI,画出来有些问题
我的代码是这样的:
invoke    GetDC,hWnd
mov    @hDc,eax
invoke    CreateCompatibleDC,@hDc
mov    @hDcBack,eax
invoke    GetClientRect,hWnd,addr @stRect
mov    eax,@stRect.right
mov    ecx,@stRect.left
sub    eax,ecx
mov    @dwWidw,eax
mov    eax,@stRect.bottom
mov    ecx,@stRect.top
sub    eax,ecx
mov    @dwHight,eax
invoke    SelectObject,@hDcBack,hBmp5
invoke    StretchBlt,@hDc,0,0,@dwWidw,@dwHight,@hDcBack,0,0,\
          425,340,SRCCOPY
invoke    DeleteObject,@hDcBack
invoke    ReleaseDC,hWnd,@hDc
画出来后背景图片覆盖了整个客户区,我需要的只是背景,其他控件样子不要填充,还有我这个画的不能最小化,以最小化就会还原,是不是重新INITDIALOG了?
来个人帮下....................
2009-08-20 08:45
nzxhust
Rank: 2
等 级:论坛游民
威 望:1
帖 子:99
专家分:28
注 册:2008-2-14
收藏
得分:0 
..............谁知道别的也可以说说...,只要实现更换背景图片就可,不是在对话框初始化的时候。
2009-08-21 17:57
nzxhust
Rank: 2
等 级:论坛游民
威 望:1
帖 子:99
专家分:28
注 册:2008-2-14
收藏
得分:0 
你这个是解决哪个问题?
最小化我知道是为什么了,最小化后点弹出程序后会有WM_CTLCOLORDLG消息发送,而我里面有返回话刷所以变回来了。这个问题好办
我要解决的是背景覆盖了我日历上的子窗口即一些控件,看过一些资料说设置VC中的对话框的剪切下层样式让重绘的时候不绘制子窗口内的背景,不过这样来,因为我日历控件外有个组合框把控件包裹起来了,结果整个组合框内的间隙里面没有重绘。
试过不少方法,刚开始用图片做DC发现会覆盖,就想用画刷放DC里面,但是结果刷出来是全白色。不知道为什么...
代码就是
invoke    CreatePatternBrush,hBmp5
invoke    SelectObject,@hDcBack,eax
这样去画结果画出来是全白色的,不知道为什么....
2009-08-22 16:47
nzxhust
Rank: 2
等 级:论坛游民
威 望:1
帖 子:99
专家分:28
注 册:2008-2-14
收藏
得分:0 
                invoke    GetDC,hWnd
                mov    @hDc,eax
                invoke    CreateCompatibleDC,@hDc
                mov    hDcBack,eax
                invoke    GetClientRect,hWnd,addr @stRect
                mov    eax,@stRect.right
                mov    ecx,@stRect.left
                sub    eax,ecx
                mov    @dwWidw,eax
                mov    ecx,@stRect.bottom
                mov    eax,@stRect.top
                sub    ecx,eax
                mov    @dwHight,ecx
                invoke    CreatePatternBrush,hBmp5
                push    eax
                invoke    SelectObject,hDcBack,eax
                invoke    PatBlt,hDcBack,0,0,@dwWidw,@dwHight,PATCOPY
                pop    eax
                invoke    DeleteObject,eax
                invoke    ReleaseDC,hWnd,@hDc
                invoke    InvalidateRect,hWnd,NULL,FALSE
.elseif    eax==WM_PAINT
            invoke    BeginPaint,hWnd,addr @stPs
            mov    @hDc,eax
            mov    eax,@stPs.rcPaint.right
            sub    eax,@stPs.rcPaint.left
            mov    ecx,@stPs.rcPaint.bottom
            sub    ecx,@stPs.rcPaint.top
            invoke    BitBlt,@hDc,@stPs.rcPaint.left,@stPs.rcPaint.top,\
                eax,ecx,hDcBack,@stPs.rcPaint.left,@stPs.rcPaint.top\
                ,SRCCOPY
            invoke    EndPaint,hWnd,addr @stPs
试了下还是不行,帮看下代码是不是有问题?跟踪了下@stPs.rcPaint结构里面全0,这是怎么搞的?
2009-08-23 09:52
nzxhust
Rank: 2
等 级:论坛游民
威 望:1
帖 子:99
专家分:28
注 册:2008-2-14
收藏
得分:0 
终于成功了.....,发下实现代码:
invoke    GetDC,hWnd
                mov    @hDc,eax
                invoke    CreateCompatibleDC,@hDc
                mov    hDcBack,eax
                invoke    CreateCompatibleBitmap,@hDc,1E2h,12Fh
                invoke    SelectObject,hDcBack,eax
                invoke    GetClientRect,hWnd,addr @stRect
                mov    eax,@stRect.right
                mov    ecx,@stRect.left
                sub    eax,ecx
                mov    @dwWidw,eax
                mov    ecx,@stRect.bottom
                mov    eax,@stRect.top
                sub    ecx,eax
                mov    @dwHight,ecx
                invoke    CreatePatternBrush,hBmp5
                push    eax
                invoke    SelectObject,hDcBack,eax
                invoke    PatBlt,hDcBack,0,0,@dwWidw,@dwHight,PATCOPY
                pop    eax
                invoke    DeleteObject,eax
                invoke    ReleaseDC,hWnd,@hDc
                invoke    InvalidateRect,hWnd,NULL,FALSE
invoke    BeginPaint,hWnd,addr @stPs
            mov    @hDc,eax
            invoke    BitBlt,@hDc,0,0,1E2h,12Fh\
                        ,hDcBack,0,0,SRCCOPY
            invoke    EndPaint,hWnd,addr @stPs
2009-08-24 10:02
快速回复:用SetClassLong设置背景问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.030578 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved