wordpress   发布时间:2022-04-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Windows界面编程第二篇 半透明窗体大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

Windows界面编程第二篇半透明窗体     上一篇《Windows界面编程第一篇 位图背景与位图画刷》介绍了通过WM_CTLCOLORDLG消息来来设置对话框的背景以及位图画刷的使用。本篇将介绍动态调节窗体透明度的方法。     调节窗体透明度可以先使用SetWindowLong为窗体加上WS_EX_LAYERED属性,再使用来SetLayeredWindowAttributes指定窗体的透明

Windows界面编程第二篇半透明窗体

    上一篇Windows界面编程第一篇 位图背景与位图画刷》介绍了通过WM_CTLCOLORDLG消息来来设置对话框的背景以及位图画刷的使用。本篇将介绍动态调节窗体透明度的方法

    调节窗体透明度可以先使用SetWindowLong为窗体加上WS_EX_LAYERED属性,再使用来SetLayeredWindowAttributes指定窗体的透明度。这样就可以在程序运行时动态的调节窗体的透明度了。

    下面先介绍下SetWindowLongSetLayeredWindowAttributes函数

SetWindowLong可以用来设置窗口的一些属性,其函数原型如下:

LONGSetWindowLong(

    HWNDhWnd,

    int nIndex,

    loNGdwNewLong

);

一个参数表示窗口句柄。

第二个参数代表要设置的哪一种值,如GWL_STYLE表示将设置窗口的风格,这个参数还可以取GWL_EXSTYLEGWL_WNDPROCDWL_DLGPROCGWL_HINSTANCEGWL_USERDATA等等。

第三个参数表示要设置的值。

比如要设置对话框也能够可调节窗口大小,可以用:

 // 设置对话框大小可调节

SetWindowLong(hDlg,GWL_STYLE,GetWindowLong(hDlg,GWL_STYLE) | WS_SIZEBox);

 

SetLayeredWindowAttributes在@H_413_21@mSDN上解释如下:

The SetLayeredWindowAttributes function sets the opacity and transparency color key of a layered window.

函数原型为:

BOOLSetLayeredWindowAttributes(

    HWNDhwnd,

    COLORREFcrKey,

    BYTEbAlpha,

    DWORDdwFlags

);

一个参数表示窗口句柄。

第二个参数表示透明色。

第三个参数表示透明度。

第四个参数表示函数将完成什么样的功能,设置成LWA_COLORKEY表示为窗口指定了透明色,设置成LWA_ALPHA表示将调整窗口的透明度,可以同时设置这两种功能

 

程序代码还将用到Slider控件,这种控件可以有如下操作:

1.通过Sendmessage + TBM_SETRANGE来设置滑块变化的范围。

2.通过Sendmessage + TBM_SETPOS来设置滑块当前位置。

3.通过Sendmessage + TBM_GETPOS来获得滑块当前位置。

4.当滑块位置发生变化时,在其父窗口中通过WM_HSCROLLWM_VSCROLL来响应消息。

 

下面给出完整的源代码下载地址:http://download.csdn.net/download/morewindows/4947386

// 可变透明度窗体 先加上WS_EX_LAYERED属性再SetLayeredWindowAttributes设置透明度
//By MoreWindows-(http://blog.csdn.net/MoreWindows)
#include <windows.h>
#include <commctrl.h>
#include "resource.h"
const char szDlgtitle[] = "可变透明度窗体 MoreWindows-(http://blog.csdn.net/MoreWindows)";
// 对话框消息处理函数
BOOL CALLBACK DlgProc@H_801_437@(HWND hDlg,UINT message,WPARAM wParam,LPARAM lParam);

int APIENTRY WinMain@H_801_437@(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) {
	DialogBox(hInstance,MAKEINTresourcE(IDD_DIALOG1),@H_170_450@NULL,DlgProc);
	return 0;
}


BOOL CALLBACK DlgProc@H_801_437@(HWND hDlg,LPARAM lParam) {
	const int INIT_TRANSPARENT = 200; //窗体初始透明度
	static HBRUSH    s_hBitmapBrush; //位图画刷

	switch (messagE)
	{
	case WM_INITDIALOG:
		// 设置对话框标题
		SetWindowText(hDlg,szDlgtitlE);

		// 加载背影图片
		HBITMAP hBitmap;
		hBitmap = (HBITMAp)LoadImage(@H_170_450@NULL,"005.bR_503_11845@p",IMAGE_BITMAP,0,LR_LOADFROMFILE | LR_CREATEDIBSECTION);
		if (hBitmap == @H_170_450@NULL)
		{
			messageBox(hDlg,"LoadImage Failed","Error",MB_ICONERROR);
			exit(0);
		}		

		// 创建位图画刷
		s_hBitmapBrush = CreatePatternBrush(hBitmap);

		// 设置分层属性
		SetWindowLong(hDlg,GWL_EXSTYLE,GetWindowLong(hDlg,GWL_EXSTYLE) | WS_EX_LAYERED);
		// 设置透明度 0 - completely transparent 255 - opaque
		SetLayeredWindowAttributes(hDlg,INIT_TRANSPARENT,LWA_ALPHA);

		// 设置滑动条变化范围
		Sendmessage(GetDlgItem(hDlg,IDC_SLIDER_TRANSPARENT),TBM_SETRANGE,(WPARAM)falSE,MAKELONG(0,255));
		// 设置滑块初始位置
		Sendmessage(GetDlgItem(hDlg,TBM_SETPOS,(WPARAM)TRUE,INIT_TRANSPARENT);
		return 0;


	case WM_COMMAND:
		switch (LOWORD(wParam))
		{
		case IDCANCEL:
			deleteObject(s_hBitmapBrush);
			EndDialog(hDlg,LOWORD(wParam));
			return TRUE;
		}
		break;


	case WM_HSCROLL: // slider control 滑块位置有变化时的响应函数
		{
			// @L_696_28@当前滑块位置
			int nTransparent = Sendmessage(GetDlgItem(hDlg,TBM_GETPOS,0); 
			// 设置新透明度
			SetLayeredWindowAttributes(hDlg,nTransparent,LWA_ALPHA);
		}
		break;


	case WM_CTLCOLORDLG:  //对话框背影
		return (BOOL)s_hBitmapBrush;
	}
	return falSE;
}

运行结果如下:

Windows界面编程第二篇 半透明窗体

 

在本文章中我们通过SetWindowLong为窗体加上WS_EX_LAYERED属性,再使用SetLayeredWindowAttributes完成窗体的透明度调节。下面两篇也将使用这两个函数来完成另一个功能——异形窗口(异形窗体)。异形窗口可以使得窗口更加美观,它能灵活的变动窗口的形状。欢迎继续浏览《Windows界面编程 第三篇异形窗体 普通版》和《Windows界面编程 第四篇异形窗体 高富帅版

 

 

 

本文配套程序下载地址为:hhttp://download.csdn.net/download/morewindows/4947386

转载请标明出处,原文地址:http://www.voidcn.com/article/p-vgggdjqw-yt.html

欢迎关注微博:http://weibo.com/MoreWindows

 

 

 

分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://www.cnblogs.com/captainbed

@H_21_616@

大佬总结

以上是大佬教程为你收集整理的Windows界面编程第二篇 半透明窗体全部内容,希望文章能够帮你解决Windows界面编程第二篇 半透明窗体所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。