WIN32 API编程之 透明static

createwindow可以直接创建一个staitc,但这个static是不透明的,如果我们把窗口背景设置为GRAY_BRUSH,则static会很明显的有一个白色背景,一般来说这样肯定很难看。

可以先给 static设置一个WS_EX_TRANSPARENT的扩展属性,然后在消息回调函数中拦截 WM_CTLCOLORSTATIC 消息,处理下TEXTCOLOR 和 BKMODE,即文字颜色和背景模式:

设置扩展属性:

1 SetWindowLong(hStatic,GWL_EXSTYLE,WS_EX_TRANSPARENT);

处理WM_CTLCOLORSTATIC消息

1 case WM_CTLCOLORSTATIC:
2         hdc = (HDC)wParam;
3         SetTextColor(hdc, RGB(0, 0, 0));
4         SetBkMode(hdc, TRANSPARENT);
5         return (LRESULT)GetStockObject(NULL_BRUSH);

这样static控件就可以透明了

时间: 2024-11-13 09:29:12

WIN32 API编程之 透明static的相关文章

C# win32 API编程

原文链接:http://blog.sina.com.cn/s/blog_873a233e0100vrxw.html C# 用户经常提出两个问题:“我为什么要另外编写代码来使用内置于 Windows 中的功能?在框架中为什么没有相应的内容可以为我完成这一任务?”当框架小组构建他们的 .NET 部分时,他们评估了为使 .NET 程序员可以使用 Win32 而需要完成的工作,结果发现 Win32 API 集非常庞大.他们没有足够的资源为所有 Win32 API 编写托管接口.加以测试并编写文档,因此只

Win32 API编程——前言

一丶什么是Win32 API? 简单来说,就是微软为了保护操作系统的安全稳定,不允许运行在用户层的进程随意操控系统内核,而是必须按照一定方式.就是说我们用户层要与系统内核层交互(比如对内存.进程操作),只能通过调用Windows内核层提供的接口函数,也就是Win32API来操控.这些API以DLL(动态链接库)的形式保存(一般在SYSTEM32文件夹中,你可以发现大量的DLL),我们最常用的是kernel32.dll.user32.dll和gdi32.dll. 所有基于NT内核(包括XP到Win

Win32 API编程:WinMain无法重载函数或_tWinMain无法重载

#include "windows.h" #include "tchar.h" int APIENTRY _tWinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow ) { MessageBox(NULL, TEXT("Hello,World!"), TEXT("haha"), MB_OK); return 0;

【C#】分享基于Win32 API的服务操作类(解决ManagedInstallerClass.InstallHelper不能带参数安装的问题)

注:这里的服务是指Windows 服务. 市面上常见的安装一个服务的方法大概有这么几种: 用Process类调用sc.exe.Installutil.exe等外部工具进行安装.极不推荐,须知创建一个进程开销不小,并且依赖外部工具有损程序健壮性 使用TransactedInstaller和AssemblyInstaller安装类进行安装.不推荐,既然都用托管方法,何不用更好的方法呢 用ManagedInstallerClass.InstallHelper进行安装.这个我认为是托管方法中首选的方法,

通过 WIN32 API 实现嵌入程序窗体

写了一个不使用 COM, 而是通过 WIN32 API 实现的示例, 它把写字板程序嵌在了自己的一个面板中. 这么做可能没有实际意义, 因为两个程序之前没有进行有价值的交互, 这里仅仅是为了演示这么做到, 以下是详细注释过的主要源代码. 我把它封装到一个类中: [csharp] view plaincopy using System; using System.Collections.Generic; using System.Linq; using System.Text; using Sys

C#通过WIN32 API实现嵌入程序窗体

本文实例讲述了C#通过WIN32 API实现嵌入程序窗体的方法,分享给大家供大家参考.具体如下: 这是一个不使用COM,而是通过WIN32 API实现的示例, 它把写字板程序嵌在了自己的一个面板中. 这么做可能没有实际意义, 因为两个程序之前没有进行有价值的交互, 这里仅仅是为了演示这么做到, 以下是详细注释过的主要源代码. 我们把它封装到一个类中: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

Win32 API UART编程

下面是一个使用Win32 API进行UART编程的简单示例. 1 #include <windows.h> 2 #include <stdio.h> 3 4 int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) 5 { 6 HANDLE hCom; 7 DWORD dwError; 8 BYTE buf; 9 DWORD nBytes; 10 1

深入浅出VC++串口编程之基于Win32 API

1.API描述 在WIN32 API中,串口使用文件方式进行访问,其操作的API基本上与文件操作的API一致. 打开串口 Win32 中用于打开串口的API 函数为CreateFile,其原型为: HANDLE CreateFile ( LPCTSTR lpFileName, //将要打开的串口逻辑名,如COM1 或COM2 DWORD dwAccess, //指定串口访问的类型,可以是读取.写入或两者并列 DWORD dwShareMode, //指定共享属性,由于串口不能共享,该参数必须置为

重温WIN32 API ------ 最简单的Windows窗口封装类

1 开发语言抉择 1.1 关于开发Win32 程序的语言选择 C还是C++ 在决定抛弃MFC,而使用纯Win32 API 开发Window桌面程序之后,还存在一个语言的选择,这就是是否使用C++.C++作为C的超集,能实现所有C能实现的功能.其实反之亦然,C本身也能完成C++超出的那部分功能,只是可能需要更多行的代码.就本人理解而言, 对于巨大型项目,还是使用纯C来架构更加稳妥: 对于中小型项目来说,C++可能更方便快捷.由于目前做的是中小项目,所以决定把C++作为主要开发语言. 1.2 关于C