当前位置: 源码素材网 » VC++教程 » 详情页

VC++ 半透明窗体简单代码来实现

  •   时间:2019-02-16
  • 概述:半透明窗体

VC++ 半透明窗体,本例介绍如何实现半透明窗体,如同FlashGet 窗口的透明效果。编译并运行本例程序,如下图所示。半透明对话框窗体位于Windows 2000 的资源管理器中。

半透明窗体
半透明对话框窗体位于Windows 2000 的资源管理器窗口之上的效果

传统的Windows 应用程序想实现半透明效果,一般来说需要处理自己的窗口的WM_Paint 消息窗口,很麻烦。SetLayeredWindowAttributes 是Windows 的新api,Windows 2000 以上才支持,它能使窗体拥有透明效果。该函数的定义如下:

BOOL SetLayeredWindowAttributes(
HWND hwnd, 
COLORREF crKey, 
BYTE bAlpha, 
DWORD dwFlags
)

程序代码:
(1)通过AppWizard 创建基于对话框的应用程序PartTransparent。
(2)将对话框资源的所有控件删除。
(3)响应对话框的OnInitialUpdate 函数,设置窗体的半透明属性。

BOOL CPartTransparentDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu
// IDM_ABOUTBOX must be in the system command range
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// Set the icon for this dialog. The framework does this automatically
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
//加入WS_EX_LAYERED 扩展属性
SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,
GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
HINSTANCE hInst = LoadLibrary("User32.DLL");
if(hInst)
{
typedef BOOL (WINAPI *MYFUNC)(HWND,COLORREF,BYTE,DWORD);
MYFUNC fun = NULL;
//取得SetLayeredWindowAttributes 函数指针
fun=(MYFUNC)GetProcAddress(hInst, "SetLayeredWindowAttributes");
if(fun)fun(this->GetSafeHwnd(),0,128,2);
FreeLibrary(hInst);
}
return TRUE; 
}

其实实现半透明的窗口是很简单的,看了以上代码你是不是有这种感觉呢?

    相关声明:

      若“VC++ 半透明窗体简单代码来实现”有损您的权益,请告之我们删除内容。
      部分文章来源于网络,版权归原作者所有。