首页
社区
课程
招聘
[求助]设置外部程序的"控件"的背景色
发表于: 2008-2-1 03:56 5792

[求助]设置外部程序的"控件"的背景色

2008-2-1 03:56
5792
桌面由"Progman" ---"SHELLDLL_DefView"---"SysListView32"组成,
桌面背景色可以用  SendMessage(LVM_SETBKCOLOR ) 来设置背景色.
现在, 我想用我的程序来设置"SHELLDLL_DefView"的背景色,请问,"SHELLDLL_DefView"控件没有相关的"Message"来设置背景色?

注:我只想单单设"SHELLDLL_DefView"的背景色,不设"SysListView32"背景色.

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (14)
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
2
找出SHELLDLL_DefView的HWND,然后SetClassLong设置GCL_HBRBACKGROUND。
2008-2-1 08:56
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
能不能说详细点
2008-2-1 17:01
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
SetClassLong(SHELLDLL_DefView_HWND, GCL_HBRBACKGROUND, $ffffff);  // white

好像不行啊
我用错了吗?
2008-2-3 02:51
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
桌面由"Progman" ---"SHELLDLL_DefView"---"SysListView32"组成,背景色都是一样的, 现在, 我想改"SHELLDLL_DefView"的背景色,

我用 SetClassLong(SHELLDLL_DefView_HWND, GCL_HBRBACKGROUND, $ffffff); // 改为白色

但看不到 SHELLDLL_DefView 控件被我改成白色!!!

难道"SHELLDLL_DefView"被我改了后又马上被"Progman"改成"SysListView32"的背景色(桌面背景色)吗?

注:我在桌面("SysListView32"),上开了个洞,所以能看到"SHELLDLL_DefView"的颜色!!!
2008-2-3 03:40
0
雪    币: 321
活跃值: (271)
能力值: ( LV13,RANK:1050 )
在线值:
发帖
回帖
粉丝
6
嗯,是你用错了。

SetClassLong(SHELLDLL_DefView_HWND, GCL_HBRBACKGROUND, $ffffff);  // white

第三个参数不是COLORREF ,而是HBRUSH。你要用颜色创建一个画刷才行。
2008-2-3 08:54
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
谢谢!!!!!!装了几天机,都没空上来看看了!!!!!!!!
2008-2-5 06:58
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
delphi

SetClassLong(SHELLDLL_DefView_HWND, GCL_HBRBACKGROUND, Longint(GetStockObject(WHITE_BRUSH)));

也看不到 SHELLDLL_DefView 控件被我改成白色!!!
再请教一下, 什么地方错了???

注: SHELLDLL_DefView_HWND 保存了“SHELLDLL_DefView”控件的 HWND
2008-2-11 02:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
进来学习,你们辛苦了
2008-2-11 22:33
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
顶起!!!!!!!
2008-2-12 19:02
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
顶起!!!!!!!
2008-2-15 05:24
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
请问大家, 用 SetClassLong 设置"SHELLDLL_DefView(桌面第二层)"的背景色,为何无效?

procedure TForm_A.Button1Click(Sender: TObject);
var
  SysListView32_HWND, SHELLDLL_DefView_HWND : HWND;
  myBrush : TBrush;
begin
  SHELLDLL_DefView_HWND:=FindWindow('Progman', 'Program Manager');
  SHELLDLL_DefView_HWND:=GetWindow(SHELLDLL_DefView_HWND, GW_Child);
  SysListView32_HWND:=GetWindow(SHELLDLL_DefView_HWND, GW_Child);

  //myBrush:=TBrush.Create;
  //myBrush.Color:=clWhite;
  SetWindowRgn(SysListView32_HWND, CreateEllipticRgn(800, 600, 50,50), True);
  //SetClassLong(SHELLDLL_DefView_HWND, GCL_HBRBACKGROUND, Longint(myBrush));  // 替换与类有关的背景刷子的句柄
  SetClassLong(SHELLDLL_DefView_HWND, GCL_HBRBACKGROUND, Longint(GetStockObject(WHITE_BRUSH))); // 替换与类有关的背景刷子的句柄
  UpdateWindow(SHELLDLL_DefView_HWND);
  //ShowWindow(SHELLDLL_DefView_HWND, SW_Hide);
  // Sleep(20);
  //ShowWindow(SHELLDLL_DefView_HWND, SW_SHOW);
  SetWindowPos(SHELLDLL_DefView_HWND,   0, 0,   0,   0,   0,   SWP_NOSIZE or SWP_NOMOVE);
end;

我该如何做?
2008-2-15 17:45
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
2008-3-3 03:25
0
雪    币: 248
活跃值: (1056)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
invoke        SetWindowPos,hWnd,HWND_BOTTOM,0,0,WINDOW_W,WINDOW_H,0
        invoke        InvalidateRect,hWnd,0,1

        invoke        SetParent,hWnd,DefViewWnd
        invoke        SetWindowPos,hWnd,ListViewWnd,0,0,WINDOW_W,WINDOW_H,0
2008-3-3 10:19
0
雪    币: 189
活跃值: (4810)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
15
顶起!!!!!!!
2008-3-3 22:52
0
游客
登录 | 注册 方可回帖
返回
//