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);
}