各位兄弟,窗口的非客户区的背景能通过wm_ncpaint消息来改变,可这样做,是画的太麻烦,因为你画的时侯不能一起全画,而且画的也不好看。而且效率也不好,拖运的时侯容易出现阴影,特别有时侯机子运行的慢的时侯,窗口一卡在那,还变成原来的样子.
我突然在想,窗口本身一生成就有颜色,这种颜色应该可以改变吧!可我找了半天也没找到方法去改变,可我看到很多的软件中,窗口背景色都已经发生变化,更重要的是无论怎么样都不会出现变成原始 窗口的样子。多好呀,不知哪位兄弟对此有何见解!
我突然在想,窗口本身一生成就有颜色,这种颜色应该可以改变吧!可我找了半天也没找到方法去改变,可我看到很多的软件中,窗口背景色都已经发生变化,更重要的是无论怎么样都不会出现变成原始 窗口的样子。多好呀,不知哪位兄弟对此有何见解!
解决方案 »
- VC保存Excel
- 请问error C2065: 'IAsyncSetup' : undeclared identifier该如何解决?
- 新手请教:使用c++可以写出标准DLL么?
- 问题:对话框的数据交换机制
- 列表显示/编辑文本文件的问题,谢谢大家指教!
- cannot convert parameter 1 from 'class CString *' to 'const char *'这种问题怎么解决,谢谢!
- 关于学习VC++!
- 用什么软件制作CHM帮助文件好?我用visual chm4.3怎么做出来的htm页面图片无法显示?
- 重起计算机的API是仕么?
- 怎样在public中定义一个vector变量
- 简单问题:=::是什么意思?
- 很简单的LINUX问题,共120分,谢谢!
Windows在向窗口发送WM_PAINT消息之前,总会发送一个WM_ERASEBKGND消息通知该窗口擦除背景,默认情况下,Windows将以窗口的背景色清除该窗口。 可以响应窗口(包括子元素)的WM_ERASEBKGND,以更改它们的背景。WM_ERASEBKGND的映射函数原型如下: afx_msg BOOL OnEraseBkgnd( CDC* pDC ); 返回值: 指定背景是否已清除,如果为FALSE,系统将自动清除 参数: pDC指定了绘制操作所使用的设备环境。
BOOL CUi4Dlg::OnInitDialog()
{
//…
//加载位图
//CBitmap m_Back;
m_Back.LoadBitmap(IDB_BACK);
//…
}BOOL CUi4Dlg::OnEraseBkgnd(CDC* pDC)
{
CDC dc;
dc.CreateCompatibleDC(pDC);
dc.SelectObject(&m_Back); //获取BITMAP对象
BITMAP hb;
m_Back.GetBitmap(&hb); //获取窗口大小
CRect rt;
GetClientRect(&rt);
//显示位图
pDC->StretchBlt(0, 0, rt.Width(), rt.Height(),
&dc, 0, 0, hb.bmWidth, hb.bmHeight, SRCCOPY); return TRUE;
}HBRUSH CUi4Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
//设置透明背景模式
pDC->SetBkMode(TRANSPARENT);
//设置背景刷子为空
return (HBRUSH)::GetStockObject(HOLLOW_BRUSH);
}