WTL,创建窗口时,如何定制窗口背景色?

ycbcc 2006-10-27 06:56:33
WinSDK可以通过“wndclass.hbrBackground = (HBRUSH) GetStockObject (BLACK_BRUSH);”来实现窗口背景黑色,可在 WTL 中:

// 窗口大小
RECT rc = {0, 0, 700, 500};
if(wndMain.CreateEx(NULL, rc, WS_POPUP) == NULL)
{
ATLTRACE(_T("Main window creation failed!\n"));
return 0;
}

// 窗口居中
wndMain.CenterWindow();
// 窗口最小化
wndMain.ShowWindow(nCmdShow);

如何在 CreateEx 时将窗口背景色设定为黑色?
分不多,这个问题搜遍CSDN、google、codeproject,但始终无法解决,诚请WTL高手指点!

另,不能:MESSAGE_HANDLER(WM_PAINT, OnPaint) 来实现。需要一创建就是黑色的背景。
晕,SDK里这么简单的问题,到了WTL里,竟然找了两天都无法解决!!
...全文
507 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
baojian88888 2006-11-12
  • 打赏
  • 举报
回复
另外一种修改背景的方法,就是常用的重载 WM_ERASEBKGND 消息了
baojian88888 2006-11-12
  • 打赏
  • 举报
回复
上面的改法最后一个参数只能使用API WNDCLASSEX 中预定义的背景色(里面好像没有黑色)
如果想在注册类时自定义HBRUSH,WTL7.1好像没有提供这个宏,不过我自己写了一个

#define MY_DECLARE_FRAME_WND_CLASS(WndClassName, uCommonResourceID, bkgnd) \
static WTL::CFrameWndClassInfo& GetWndClassInfo() \
{ \
static WTL::CFrameWndClassInfo wc = \
{ \
{ sizeof(WNDCLASSEX), 0, StartWindowProc, \
0, 0, NULL, NULL, NULL, (HBRUSH)(bkgnd), NULL, WndClassName, NULL }, \
NULL, NULL, IDC_ARROW, TRUE, 0, _T(""), uCommonResourceID \
}; \
return wc; \
}

然后把那句改成
MY_DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME, GetStockObject(BLACK_BRUSH))
这样就可以如你在SDK中实现的那个黑色背景了
baojian88888 2006-11-12
  • 打赏
  • 举报
回复
为了解决lz的问题,我刚才专门看了一下WTL 7.1的源码
想在一开始注册类的时候就修改背景色,可以这样做
在CMainFrame类中最开始,有个 DECLARE_FRAME_WND_CLASS(NULL, IDR_MAINFRAME)
把这个改成
DECLARE_FRAME_WND_CLASS_EX(NULL, IDR_MAINFRAME, 0, COLOR_APPWORKSPACE)
最后一个参数就是WNDCLASSEX中的颜色
artcpp 2006-11-12
  • 打赏
  • 举报
回复
#define COLOR_SCROLLBAR 0
#define COLOR_BACKGROUND 1
#define COLOR_ACTIVECAPTION 2
#define COLOR_INACTIVECAPTION 3
#define COLOR_MENU 4
#define COLOR_WINDOW 5
#define COLOR_WINDOWFRAME 6
#define COLOR_MENUTEXT 7
#define COLOR_WINDOWTEXT 8
#define COLOR_CAPTIONTEXT 9
#define COLOR_ACTIVEBORDER 10
#define COLOR_INACTIVEBORDER 11
#define COLOR_APPWORKSPACE 12
#define COLOR_HIGHLIGHT 13
#define COLOR_HIGHLIGHTTEXT 14
#define COLOR_BTNFACE 15
#define COLOR_BTNSHADOW 16
#define COLOR_GRAYTEXT 17
#define COLOR_BTNTEXT 18
#define COLOR_INACTIVECAPTIONTEXT 19
#define COLOR_BTNHIGHLIGHT 20
#define COLOR_3DDKSHADOW 21
#define COLOR_3DLIGHT 22
#define COLOR_INFOTEXT 23
#define COLOR_INFOBK 24

*-- Ab Windows 2000:
#define COLOR_HOTLIGHT 26
#define COLOR_GRADIENTACTIVECAPTION 27
#define COLOR_GRADIENTINACTIVECAPTION 28

*-- Ab Windows XP:
#define COLOR_MENUHILIGHT 29
#define COLOR_MENUBAR 30
artcpp 2006-11-12
  • 打赏
  • 举报
回复
改成这样,就是黑色:
DECLARE_FRAME_WND_CLASS_EX(NULL, IDR_MAINFRAME, 0, COLOR_WINDOWFRAME)
另可参考:
Const COLOR_SCROLLBAR = 0
Const COLOR_BACKGROUND = 1
Const COLOR_ACTIVECAPTION = 2
Const COLOR_INACTIVECAPTION = 3
Const COLOR_MENU = 4
Const COLOR_WINDOW = 5
Const COLOR_WINDOWFRAME = 6
Const COLOR_MENUTEXT = 7
Const COLOR_WINDOWTEXT = 8
Const COLOR_CAPTIONTEXT = 9
Const COLOR_ACTIVEBORDER = 10
Const COLOR_INACTIVEBORDER = 11
Const COLOR_APPWORKSPACE = 12
Const COLOR_HIGHLIGHT = 13
Const COLOR_HIGHLIGHTTEXT = 14
Const COLOR_BTNFACE = 15
Const COLOR_BTNSHADOW = 16
Const COLOR_GRAYTEXT = 17
Const COLOR_BTNTEXT = 18
ycbcc 2006-11-11
  • 打赏
  • 举报
回复
请帮帮我,谢谢!!
ycbcc 2006-11-11
  • 打赏
  • 举报
回复
难道真的不能解决吗?
ycbcc 2006-11-04
  • 打赏
  • 举报
回复
多谢大家的关注,可问题依然无法解决。谁能帮帮我?
Stefine 2006-11-03
  • 打赏
  • 举报
回复
学习,没玩过WTL
artcpp 2006-11-03
  • 打赏
  • 举报
回复
如果使用ATL的 DECLARE_WND_CLASS_EX 宏,就无法使用WTL的消息映射了。
sycnick 2006-11-02
  • 打赏
  • 举报
回复
请参考使用ATL的 DECLARE_WND_CLASS_EX 宏
artcpp 2006-10-28
  • 打赏
  • 举报
回复
直接修改WTL源代码呢?
OnlyAPI 2006-10-28
  • 打赏
  • 举报
回复
关注!
ycbcc 2006-10-27
  • 打赏
  • 举报
回复
感谢回复,这种方法和MESSAGE_HANDLER(WM_PAINT, OnPaint)一样,不是根本上的改变。
我要的是: 一 创 建 就 是 黑 色 背 景 的 WTL 窗口。
感谢“laiyiling(Graphics ◎ Multimedia)”!
Kudeet 2006-10-27
  • 打赏
  • 举报
回复
参考这里的WTL指南
http://www.codeproject.com/wtl/wtl4mfc2.asp

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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