zoukankan      html  css  js  c++  java
  • Win32 窗口篇(3)

    1.11 如何显示或隐藏窗口的标题栏

    使用ModifyStyle方法改变参数来更改窗体样式

    void CDemoDlg::OnTest1() 
    {
        //删除标题栏风格
        ModifyStyle(WS_CAPTION, 0, SWP_FRAMECHANGED);
    }
    
    void CDemoDlg::OnTest2() 
    {
        //添加标题栏风格
        ModifyStyle(0, WS_CAPTION, SWP_FRAMECHANGED);    
    }
    

    1.12 如何改变窗口的形状

    1. 用CRgn相关Create方法创建区域形状
    2. 使用SetWindowRgn方法设置窗体区域
    void CDemoDlg::OnTest1() 
    {
        CRect rect;
        GetClientRect(rect);
    
        //创建矩形区域
        CRgn rgn;
        rgn.CreateRectRgn(rect.left, rect.top, rect.right, rect.bottom);
    
        //设置窗口的区域
        SetWindowRgn((HRGN)rgn, TRUE);
    }
    

    效果:

    image

    1.13 如何设置窗口的透明区域

    将2个区域合并成一个区域,貌似没啥用

    CRect rect1;
    GetWindowRect(rect1);
    
    CRect rect2;
    GetClientRect(rect2);
    ClientToScreen(rect2);
    
    CRgn rgn1;
    rgn1.CreateRectRgn(rect1.left, rect1.top, rect1.right, rect1.bottom);
    
    CRgn rgn2;    
    rgn2.CreateRectRgn(rect2.left, rect2.top, rect2.right, rect2.bottom);
    
    CRgn rgn;
    rgn.CreateRectRgn(0, 0, 1, 1);
    
    rgn.CombineRgn(&rgn1, &rgn2, RGN_DIFF);
    
    //设置窗口区域
    SetWindowRgn((HRGN)rgn2,TRUE);
    

    1.14 如何实现透明窗口

    先修改窗体样式,然后调用SetLayeredWindowAttributes方法更改透明度

    //添加WS_EX_LAYERED(0x80000)扩展风格
    ModifyStyleEx(0, 0x80000);
    ::SetLayeredWindowAttributes(GetSafeHwnd(), 0, 128, 2);
    

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

    效果:

    image

    1.15 如何使窗口闪烁

    调用FlashWindow方法,参数True则窗体闪烁一次,False则停止闪烁

    void CDemoDlg::OnTest1() 
    {
        //设置定时器
        SetTimer(1, 1000, NULL);
    }
    
    void CDemoDlg::OnTest2() 
    {
        //关闭定时器
        KillTimer(1);
    
        //窗口返回原始状态
        FlashWindow(FALSE);
    }
    
    void CDemoDlg::OnTimer(UINT nIDEvent) 
    {
        if (nIDEvent == 1)
        {
            //窗口从一种状态闪烁到另一种状态
            FlashWindow(TRUE);
        }
    
        CDialog::OnTimer(nIDEvent);
    }
    
  • 相关阅读:
    laravel 多对多 belonsToMany
    C语言union关键字
    FW:程序在内存的划分(转)
    操作系统:进程/线程同步的方式和机制,进程间通信
    FW:考查嵌入式C开发人员的最好的16道题(转)
    操作系统死锁产生、条件、和解锁
    100层高楼摔2个鸡蛋的问题?
    【转】看完这个你的位运算学得就差不多了
    函数递归的几个例子
    如何查看服务器(linux系统)当前的负载信息(转)
  • 原文地址:https://www.cnblogs.com/Clingingboy/p/1989324.html
Copyright © 2011-2022 走看看