VC6.0特殊功能之-透明窗口的实现

这篇博客介绍了如何在VC6.0中实现窗口透明效果和利用GDI+加载PNG图片。通过示例代码,展示了如何设置 BlendFunction 并使用 UpdateLayeredWindow 进行透明处理,以及如何绘制内存位图和加载PNG图像,旨在减少寻找合适资源的时间浪费。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们在寻找学习资料时经常会发现,下载的资料并不是自己想要的,有时候下载的编译环境不一样,有时候下载的资料运行通不过,还有时下载的和描述时的相差甚远,这样即浪费了时间,又没得到想到的东西。

VC6.0是以前常用到的一个经典软件,在网上也留下了很多相关的资源,目前还有很多人用它来做MFC软件,我这里专门列一个栏,把VC实现的一些功能展现出来,并附上原码下载,让大家对此资源的功能有个直观的了解,实现所见即所得,从而少浪费时间。

以下就是显示效果:

m_Blend.BlendOp=0; //theonlyBlendOpdefinedinWindows2000
	m_Blend.BlendFlags=0; //nothingelseisspecial...
	m_Blend.AlphaFormat=1; //...
	m_Blend.SourceConstantAlpha=255;//AC_SRC_ALPHA

	//窗体样式为0x80000为层级窗体
	DWORD dwExStyle=GetWindowLong(m_hWnd,GWL_EXSTYLE);
	SetWindowLong(m_hWnd,GWL_EXSTYLE,dwExStyle^0x80000);
	
	//绘制内存位图
	HDC hdcTemp=GetDC()->m_hDC;
	m_hdcMemory=CreateCompatibleDC(hdcTemp);
	HBITMAP hBitMap=CreateCompatibleBitmap(hdcTemp,500,500);
	SelectObject(m_hdcMemory,hBitMap);
	
	//使用GDI+载入PNG图片
	HDC hdcScreen=::GetDC (m_hWnd);
	RECT rct;
	GetWindowRect(&rct);
	POINT ptWinPos={rct.left,rct.top};
	Graphics graph(m_hdcMemory);			//GDI+中的类
	Image image(L"bk.png",TRUE);			//GDI+中的类
	graph.DrawImage(&image,0,0,267,154);	//后面两个参数要设置成跟图片一样大小,否则会失真

	//使用UpdateLayerWindow进行窗口透明处理
	HMODULE hFuncInst=LoadLibrary("User32.DLL");
	typedef BOOL (WINAPI *MYFUNC)(HWND,HDC,POINT*,SIZE*,HDC,POINT*,COLORREF,BLENDFUNCTION*,DWORD);          
	MYFUNC UpdateLayeredWindow;
	UpdateLayeredWindow=(MYFUNC)GetProcAddress(hFuncInst,"UpdateLayeredWindow");
	SIZE sizeWindow={267,154};
	POINT ptSrc={0,0};
	UpdateLayeredWindow( m_hWnd,hdcScreen,&ptWinPos,&sizeWindow,m_hdcMemory,&ptSrc,0,&m_Blend,2);

 下载链接:https://download.youkuaiyun.com/download/chenluo168/87044376

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chenluo168

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值