Win32 窗口篇(3)
2011-03-20 12:59 Clingingboy 阅读(2275) 评论(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);
}