代码改变世界

Win32 窗口篇(3)

  Clingingboy  阅读(2294)  评论(0编辑  收藏  举报

 

 

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);
}
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示