C语言API如何让窗口里的部分背景透明?

比如窗口的一个矩形让它透明掉可以看到桌面,其他不透明,还有就是怎么把窗口的边框透明掉?

先把需要透明的地方填充成某一颜色,然后用SetLayeredWindowAttributes函数指定要透明的颜色,这一块区域就被透明了
如果要边框透明掉,只需要把窗口的边框和标题栏去掉就可以了.追问

怎么去掉边框?我在CreateWindow里去掉了Border样式,可是那边框还是有,还有就是,SetLayeredWindowAttributes会不会把所有的指定的颜色都透明掉?比如我指定红色,那窗口里面的所有红色都透明了?

追答

//创建一个带有 WS_EX_LAYERED 扩展样式的,无标题栏,无框的窗口

   hWnd = CreateWindowEx(WS_EX_LAYERED, szWindowClass, szTitle, WS_POPUP,

      CW_USEDEFAULT, CW_USEDEFAULT, 600, 400, NULL, NULL, hInstance, NULL);


你可以指定一种不常用的颜色,比如品红色 RGB(0xff, 0, 0xff)

如果你窗口内的颜色不是太丰富的话可以用这种方法


写了一个例子,可以参考一下,有什么不懂的可以追问.


追问

嗯嗯,厉害!我想再问一个,就是用GetSystemMetrics函数来获取边框的宽度是1,怎么在程序里面显示的边框却不是1px的?该怎么得到左右边框具体的宽度和上下边框具体的高度?

追答

获取边框宽度可以用
SM_CYSIZEFRAME
SM_CXSIZEFRAME
SM_CYFRAME
SM_CXFRAME
不知道你用的是哪一个
这几个的值都是一样的

追问

用的是SM_CXBORDER

追答

SM_CXBORDER 这个代表3D样式边的宽度

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-05-18
用路径层切割,切割掉的部分不会显示,但还是存在的,也就是鼠标可以点到,如果不想点到,还要另加程序,这我也不太会,都是GUI里的API用去来很麻烦。。。。追问

能告诉我切割的具体函数吗

第2个回答  2013-05-18
用背景色画一个大方块。方块原点 0,0,长等于窗宽,高等于窗高。
API 函数
int FillRect(HDC hDC, CONST RECT *lprc, HBRUSH hbr);

试一下追问

那那个画刷用什么画刷?

追答

NULL_BRUAH你查一下MSDN

追问

这个我用过啊,矩形是透明,但窗口是白色底的,窗口这一部分依旧没有变透明啊

追答

调节窗体透明度可以先使用SetWindowLong为窗体加上WS_EX_LAYERED属性,再使用来SetLayeredWindowAttributes指定窗体的透明度。这样就可以在程序运行时动态的调节窗体的透明度了。
下面先介绍下SetWindowLong和SetLayeredWindowAttributes函数。
SetWindowLong可以用来设置窗口的一些属性,其函数原型如下:
LONGSetWindowLong(
HWNDhWnd,
int nIndex,
LONGdwNewLong
);
第一个参数表示窗口句柄。
第二个参数代表要设置的哪一种值,如GWL_STYLE表示将设置窗口的风格,这个参数还可以取GWL_EXSTYLE,GWL_WNDPROC,DWL_DLGPROC,GWL_HINSTANCE,GWL_USERDATA等等。
第三个参数表示要设置的值。
比如要设置对话框也能够可调节窗口大小,可以用:
// 设置对话框大小可调节
SetWindowLong(hDlg, GWL_STYLE, GetWindowLong(hDlg, GWL_STYLE) | WS_SIZEBOX);

C语言API如何让窗口里的部分背景透明?
如果要边框透明掉,只需要把窗口的边框和标题栏去掉就可以了.

C语言中,如何更改输出的文字中一部分的颜色?
方法1. 用windows api. 如下代码输出123(高亮绿色前景白色背景)456(高亮黄色前景白色背景)在同一行。include <stdio.h> include <windows.h> int main(){ HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(hConsole, FOREGROUND_INTENSITY | BACKGROUND_INTENSITY| FOREGROUND...

C语言如何部分清屏128*64
另外,也可以全部清除,然后刷新全屏的数据,只是要把“停止”改为“暂停”。

用C语言如何让窗口成为桌面的一部分,即永远不会挡到别的窗口
让窗口位于最底层即可(HWND_BOTTOM)

求助C语言,怎样输出有颜色的字符和背景
总共两种方法。一、调用系统cmd预设的color函数 如 system("color 9E");但是这种方法是修改整个窗口。二、调用控制台窗口API函数 可以仅修改一个字位置上的颜色 include<windows.h>SetConsoleTextAttribute( GetStdHandle(STD_OUTPUT_HANDLE) ,color);color 处为颜色代码。

c语言怎样实现运行屏幕的白底黑字
该命令会将颜色还原到 CMD.EXE 启动时\\x0d\\x0a的颜色。这个值来自当前控制台窗口、\/T 命令行开关或\\x0d\\x0aDefaultColor 注册表值。\\x0d\\x0a\\x0d\\x0a如果用相同的前景和背景颜色来执行 COLOR 命令,COLOR 命令\\x0d\\x0a会将 ERRORLEVEL 设置为 1。\\x0d\\x0a\\x0d\\x0a例如: "...

C语言如何设置背景
1、C语言写控制台程序是无法加图片的,只能用命令行输出,最多就是设置下背景和字体,颜色之类的。如果开发API窗口程序,完全依赖于操作系统的函数库。C语言本身并不提供这类函数。2、下面是windows系统下实现的函数代码,第一个参数是图片的存放的位置,第二个参数是窗口句柄。HRESULT ShowPic(char *...

C语言怎样修改window窗口,就是把默认人窗口格式去掉,变成比如QQ那样的边...
这个比较复杂,主要就是使用windows api,而窗口需要你自己画,别小看QQ那个窗口,那个窗口的工程量不小。使用的是win32编程,刻画那种窗口有两种方法,一种是自己创建,一种是载入。后者比较麻烦。前者,在创建窗口类的时候,窗口不要的属性全部去除,然后用SetLayeredWindowAttributes把窗口透明画,载入一...

C语言如何改变特定某一行的颜色
可使用windows.h库里的SetConsoleTextAttribute函数。SetConsoleTextAttribute是API设置控制台窗口字体颜色和背景色的函数。广泛应用于电脑编程。原型BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);参数consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);GetStdHandle(nStdHandle)是返回标准的...

c语言如何给自己写的程序加上图形界面
标题、背景和前景颜色、窗口大小等等这些可以用API函数实现 include <windows.h>\/\/加入头文件就可调用API函数 int main(){ HWND hWnd=GetForegroundWindow();HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);SetWindowText(hWnd,"测试");\/\/标题 SetConsoleTextAttribute(handle,FOREGROUND_GREEN|BACKGROUND_...

相似回答