设为首页 加入收藏

TOP

Windows界面编程:半透明窗体(二)
2013-09-24 09:25:42 来源: 作者: 【 】 浏览:580
Tags:Windows 界面 编程 透明 窗体

 

  双击代码全选

    // 可变透明度窗体 先加上WS_EX_LAYERED属性再SetLayeredWindowAttributes设置透明度
    //By MoreWindows-(Windows">http://blog.csdn.net/MoreWindows
    #include
    #include
    #include "resource.h"
    const char szDlgTitle[] = "可变透明度窗体 MoreWindows-(http://blog.csdn.net/MoreWindows)";
    // 对话框消息处理函数
    BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam);
    int APIENTRY WinMain(HINSTANCE hInstance,
    HINSTANCE hPrevInstance,
    LPSTR lpCmdLine,
    int nCmdShow)
    {
    DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1), NULL, DlgProc);
    return 0;
    }
    BOOL CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
    {
    const int INIT_TRANSPARENT = 200; //窗体初始透明度
    static HBRUSH s_hBitmapBrush; //位图画刷
    switch (message)
    {
    case WM_INITDIALOG:
    // 设置对话框标题
    SetWindowText(hDlg, szDlgTitle);
    // 加载背影图片
    HBITMAP hBitmap;
    hBitmap = (HBITMAP)LoadImage(NULL, "005.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);
    if (hBitmap == 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, 0, INIT_TRANSPARENT, LWA_ALPHA);
    // 设置滑动条变化范围
    SendMessage(GetDlgItem(hDlg, IDC_SLIDER_TRANSPARENT), TBM_SETRANGE, (WPARAM)FALSE, MAKELONG(0, 255));
    // 设置滑块初始位置
    SendMessage(GetDlgItem(hDlg, IDC_SLIDER_TRANSPARENT), 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 滑块位置有变化时的响应函数
    {
    // 获取当前滑块位置
    int nTransparent = SendMessage(GetDlgItem(hDlg, IDC_SLIDER_TRANSPARENT), TBM_GETPOS, 0, 0);
    // 设置新透明度
    SetLayeredWindowAttributes(hDlg, 0, nTransparent, LWA_ALPHA);
    }
    break;
    case WM_CTLCOLORDLG: //对话框背影
    return (BOOL)s_hBitmapBrush;
    }
    return FALSE;
    }

  运行结果如下:

  在本篇文章中我们通过SetWindowLong为窗体加上WS_EX_LAYERED属性,再使用SetLayeredWindowAttributes完成窗体的透明度调节。下面两篇也将使用这两个函数来完成另一个功能——异形窗口(异形窗体)。异形窗口可以使得窗口更加美观,它能灵活的变动窗口的形状。

      

首页 上一页 1 2 3 4 5 6 下一页 尾页 2/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Windows界面编程:异形窗体 下一篇Windows编程:位图背景与画刷

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: