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