xp主题控制的透明背景
我在位图上绘制了一些窗口控件,在对话框上绘制了彩色背景.是否有一些可能的方法使窗口控件的背景透明?目前,它们显示对话框的默认彩色背景.
示例 – 我尝试粘贴一个纯蓝色位图,两个按钮控件具有明显的默认彩色矩形背景. 解决方法
这可以通过为
Windows提供一个句柄来轻松解决,这个句柄可以用于绘制按钮背景的任何画笔.只要在按钮的父窗口的消息处理程序中收到
WM_CTLCOLORBTN message,就可以执行此操作.
我嘲笑了一个小型的演示应用程序,它可以并排比较两个不同的按钮.两者都是标准的Win32 BUTTON控件,但左边的控件处理WM_CTLCOLORBTN消息并指定与窗口背景颜色相同的画笔.您可以立即看到差异 – 按钮矩形周围的浅灰色(或者更确切地说,3D控件的默认颜色,COLOR_3DFACE)条纹消失了,按钮看起来与自定义背景颜色相比要好得多: 该效果也适用于启用了视觉主题的Windows XP – 这是同一个应用程序的屏幕截图: 我用来创建上述效果的代码几乎是非常简单的.将其添加到应用程序的主窗口过程(MainWndProc),如上所述.您无需触摸按钮. HBRUSH hButtonBackColor = NULL; LRESULT CALLBACK MainWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam) { switch(msg) { case WM_CTLCOLORBTN: { if (!hButtonBackColor) { // Create the brush,if it hasn't already been created. // (You can use any type of brush here; this is just an example.) hButtonBackColor = GetSysColorBrush(COLOR_3DDKSHADOW); } return (LRESULT)hButtonBackColor; } // ... } } 但是,请确保您指定的画笔表示与窗口背景颜色完全相同的颜色 – 透明画笔可能无法正常工作.同样,对于带图案的画笔(有人再使用它们吗?),需要将brush’s origin设置为与背景相匹配. 始终确保通过拨打 另请注意,您无需指定 当然,如果你的设计比上面的例子复杂(例如,你的按钮重叠多个背景),你可能不得不采用所有者绘制路线.我认为这对于一个像你似乎描述的那个简单的任务来说太过分了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- powershell – Windows期望命令等效
- 是否有相当于Windows的SU
- windows – 挂钩线程创建/终止
- windows-mobile – 如何在Windows Mobile 6中创建服务
- ExtJS打开窗口,最大高度
- windows-server-2008 – 我如何知道哪些共享文件夹文件已在
- windows-server-2008 – 在Windows Server 2008上更改文件权
- 如何在另一个dll中使用带有Entity框架的asp.net动态数据
- 在window环境下挂载mysql数据卷
- windows-8 – 我可以将Windows Phone和Windows 8 App从一个