形态各异的不规则窗体
上面函数在创建不规则窗体轮廓时可直接使用,无须自己指定轮廓路径。如果想让窗体更复杂,你可以使用CombineRgn把多个轮廓路径混合起来实现。上面的函数还可以用BeginPath,EndPath和PathToRegion三个函数实现,其实这三个函数给用户提供了{zd0}的创造和发挥的空间,让用户自定义窗体轮廓路径,这样用户就可以拿起手中Pen来画出所有你想要的东西,什么矩形/椭圆/多边形/弧线形...... 都可以轻松搞定,就连字体来可以作为窗体的形状哦。 注意:本文所附带的例子全部以BeginPath,EndPath和PathToRegion为中心来讲解如何实现不规则窗体。 CClientDC dc(this); HDC hDC; CFont mFont; hDC = ::GetDC(this->m_hWnd); //创建字体 VERIFY(mFont.CreateFont( 200, 50, 0, 0, FW_HEAVY, TRUE, FALSE, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "宋体")); if (hDC!=NULL) { //开始记录窗体轮廓路径 dc.BeginPath(); //设置背景为透明模式,这句话是必须有的。 dc.SetBkMode(TRANSPARENT); CFont * pOldFont; pOldFont = dc.SelectObject( &mFont ); dc.TextOut(0, 0, "VCKbase"); dc.SelectObject( pOldFont ); mFont.DeleteObject(); //结束记录窗体轮廓路径 dc.EndPath(); //把所记录的路径转化为窗体轮廓句柄 m_wndRgn = ::PathToRegion(dc); //赋予窗体指定的轮廓形状 this->SetWindowRgn(m_wndRgn, TRUE); } else AfxMessageBox("Error!"); 看过了以上代码你也许已经明白这三个函数的内涵。那么又如何画出象Word中按F1后弹出的窗体呢?这我就不用多说了吧,拿起你手中的画笔吧,一切都很Easy!所有的代码都在本文附带的例子里面,可不要错过哦! |