zoukankan      html  css  js  c++  java
  • mfc设置半透明对话框

    
    
     1 BOOL CDialog7::OnInitDialog()
     2 {
     3     CDialog::OnInitDialog();
     4 
     5     // TODO:  在此添加额外的初始化
     6 
     7     ::SetWindowLong(GetSafeHwnd(),GWL_EXSTYLE,::GetWindowLongPtr(GetSafeHwnd(),GWL_EXSTYLE)|WS_EX_LAYERED);
     8     this->SetLayeredWindowAttributes(0,(255*70)/100,LWA_ALPHA);
     9 
    10     return TRUE;  // return TRUE unless you set the focus to a control
    11     // 异常: OCX 属性页应返回 FALSE
    12 }

    涉及到的函数如下:
    1
    SetWindowLong
    2 GetSafeHwnd
    3 GetWindowLongPtr
    4 SetLayeredWindowAttributes

    一、
    LONG SetWindowLong(     

        HWND hWnd,     int nIndex,     LONG dwNewLong );

    SetWindowLong是一个Windows API函数。该函数用来改变指定窗口的属性.函数也将指定的一个32位值设置在窗口的额外存储空间的指定偏移位置。

    hWnd 窗口句柄及间接给出的窗口所属的类。

    nlndex

    指定将设定的大于等于0的偏移值。有效值的范围从0到额外类的存储空间的字节数减4:例如若指定了12或多于12个字节的额外窗口存储空间,则应设索引位8来访问第三个4字节,同样设置0访问第一个4字节,4访问第二个4字节。要设置其他任何值,可以指定下面值之一:

    常量

    常量值

    意义

    GWL_EXSTYLE

    -20

    设定一个新的扩展风格。

    GWL_HINSTANCE

    -6

    设置一个新的应用程序实例句柄。

    GWL_ID

    -12

    设置一个新的窗口标识符

    GWL_STYLE

    -16

    设定一个新的窗口风格。

    GWL_USERDATA

    -21

    设置与窗口有关的32位值。每个窗口均有一个由创建该窗口的应用程序使用的32位值。

    GWL_WNDPROC

    -4

    为窗口设定一个新的处理函数。

    GWL_HWNDPARENT -8 改变子窗口的父窗口,应使用SetParent函数。

    当hWnd参数标识了一个对话框时,也可使用下列值:

    常量

    常量值

    意义

    DWL_DLGPROC

    DWLP_MSGRESULT + sizeof(LRESULT) (值:4)

    设置对话框过程的新地址。

    DWL_MSGRESULT

    0

    设置在对话框过程中处理的消息的返回值

    DWL_USER

    DWLP_DLGPROC + sizeof(DLGPROC) (值:8)

    设置的应用程序私有的新的额外信息,例如一个句柄或指针

    dwNewLong

    指定的替换值。

    dwNewLong中可以使用以下一些列表控件的专用风格:

    LVS_ICON LVS_SMALLICON LVS_LIST LVS_REPORT

    这四种风格决定控件的外观,同时只可以选择其中一种,分别对应:

    大图标显示,小图标显示,列表显示,详细报表显示

    LVS_EDITLABELS 结点的显示字符可以被编辑,对于报表风格来讲可编辑的只为第一列。

    LVS_SHOWSELALWAYS 在失去焦点时也显示当前选中的结点

    LVS_SINGLESEL 同时只能选中列表中一项

    返回值

    如果函数成功,返回值是指定的32位整数的原来的值。如果函数失败,返回值为0。若想获得更多错误信息,请调用GetLastError函数。

    如果指定32位整数的原来的值为0,并且函数成功,则返回值为0,但是函数并不清除最后的错误信息,这就很难判断函数是否成功。这时,就应在调用SetWindowLong之前调用SetLastError(0)函数来清除最后的错误信息。这样,如果函数失败就会返回0,并且GetLastError。也返回一个非零值。

    二、

    GetSafeHwnd,计算机语言函数。用于得到窗口指针句柄。

    四、

    SetLayeredWindowAttributes

    此函数用于设置分层窗口透明度,常和 UpdateLayeredWindow 函数结合使用。

    BOOL SetLayeredWindowAttributes(

    HWND hwnd, // 指定分层窗口句柄

    COLORREF crKey, // 指定需要透明的背景颜色值,可用RGB()宏

    BYTE bAlpha, // 设置透明度,0表示完全透明,255表示不透明

    DWORD dwFlags // 透明方式

    );

    其中,dwFlags参数可取以下值:

    LWA_ALPHA时:crKey参数无效,bAlpha参数有效;

    LWA_COLORKEY:窗体中的所有颜色为crKey的地方将变为透明,bAlpha参数无效。

    LWA_ALPHA | LWA_COLORKEY:crKey的地方将变为全透明,而其它地方根据bAlpha参数确定透明度。

  • 相关阅读:
    LeetCode113. 路径总和 II
    LeetCode257. 二叉树的所有路径
    LeetCode222. 完全二叉树的节点个数
    LeetCode404. 左叶子之和
    LeetCode110. 平衡二叉树
    LeetCode101. 对称二叉树
    LeetCode100. 相同的树
    llustrator CC2017下载AI2020
    vs code 代码格式化整理
    人生格言
  • 原文地址:https://www.cnblogs.com/qiwu1314/p/8482428.html
Copyright © 2011-2022 走看看