• VC实现透明窗体


    可以利用Windows系统提供的SetLayeredWindowAttributes函数设置透明度和不透明的颜色关键值。
    BOOL SetLayeredWindowAttributes(
     HWND hwnd, //分层窗口句柄
     COLORREF crKey, //颜色关键值
     BYTE bAlpha, //描述不透明的程度,0表示全透明,255表示完全不透明
     DWORD dwFlags //明确采取的动作
    );
    dwflags的值:
    LWA_COLORKEY 使用crKey为透明值
    LWA_ALPHA    使用bAlpha为窗口的不透明值

    该函数只支持WS_POPUP风格窗体,不支持WS_CHILD风格窗体

    参考:

    SetWindowLong(m_draw.m_hWnd,GWL_EXSTYLE,GetWindowLong(m_draw.m_hWnd,GWL_EXSTYLE)|WS_EX_LAYERED);

    ::SetLayeredWindowAttributes(m_draw.m_hWnd, 0, 128, LWA_ALPHA);

    具体实现:

    新建一个对话框程序,在上面添加一个滑动条和一个文本框,利用类向导为滑动条添加一个关联变量m_slide,并为其添加一个相应函数OnReleasedcaptureSlider1

    代码如下:

    在OnInitDialog()函数中添加如下代码:

    //设置窗体大小位置不可变
     ::SetWindowPos(m_hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOSIZE | SWP_NOMOVE);
     m_slide.SetRange(10,255); //设置滑动条的范围
     m_slide.SetPos(128);  //设置初始滑动位置
     SetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE,GetWindowLong(this->GetSafeHwnd(),GWL_EXSTYLE)^0x80000);
     HINSTANCE hInst=LoadLibrary("User32.DLL");//显示加载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);
     }

     

    在OnReleasedcaptureSlider1函数中添加如下代码:

    void CTranswinDlg::OnReleasedcaptureSlider1(NMHDR* pNMHDR, LRESULT* pResult)
    {
     // TODO: Add your control notification handler code here
     BYTE eff=(BYTE)m_slide.GetPos();//得到滑动条位置
     HINSTANCE hInst=LoadLibrary("User32.DLL");//显示加载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,eff,2);
      FreeLibrary(hInst);
     }
     CString str;
     str.Format("%d",100*eff/255);
     GetDlgItem(IDC_EDIT1)->SetWindowText(str);
     *pResult = 0;
    }

  • 相关阅读:
    问题——虚拟机连接,查本地DNS,查软件位置,payload生成,检测注册表变化
    nmap命令解释
    SMB扫描,SMTP扫描
    操作系统识别,SNMP扫描
    服务扫描——查询banner信息,服务识别
    nmap之扫描端口(附加hping3隐藏扫描)
    scapy简单用法——四层发现
    转载 界面组装器模式
    设计模式=外观模式
    如何进行自动化测试和手工测试
  • 原文地址:https://www.cnblogs.com/qq78292959/p/2179532.html
Copyright © 2020-2023  润新知