Win32 窗口篇(3)
2011-03-20 12:59 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 如何改变窗口的形状
- 用CRgn相关Create方法创建区域形状
- 使用SetWindowRgn方法设置窗体区域
void CDemoDlg::OnTest1()
{
CRect rect;
GetClientRect(rect);
//创建矩形区域
CRgn rgn;
rgn.CreateRectRgn(rect.left, rect.top, rect.right, rect.bottom);
//设置窗口的区域
SetWindowRgn((HRGN)rgn, TRUE);
}
效果:
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.
效果:
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 IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现