Windows 中不规则窗体的编程实现
2006-07-19 11:29:53 来源:WEB开发网int CDC::SetBkMode( int nBkMode );
设置绘图时的背景模式,此应用中nBkMode必须取值为TRANSPARENT 。即设置绘图时背景不发生变化。
BOOL CDC::EndPath( );
调用该函数后当前设备环境(DC)结束追踪绘图的过程。
开始绘图前,先调用BeginPath,然后调用SetBkMode。接下去就可调用CDC的其他绘图函数作图,例如Arc,AngleArc,LineTo,MoveTo,RoundRect,,Textout等等。绘图完毕调用EndPath().
第二步将绘制的结果转成”region”.
此步骤中使用SDK API函数
HRGN PathToRegion( HDC hdc );
Hdc为作图DC的句柄, CDC类中的m_hDC成员变量可做此参数传入。示例,将下面代码加入某个按钮单击事件中,可以将当前窗体变为字符串”hello”的形状
void CTestDlg::OnTest()
{
HRGN wndRgn;
CClientDC dc(this);
CFont mFont;
if (dc.m_hDC!=NULL)
{
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, "宋体"));
//开始记录窗体轮廓路径
dc.BeginPath();
//设置背景为透明模式,这句话是必须有的。
dc.SetBkMode(TRANSPARENT);
CFont * pOldFont;
pOldFont = dc.SelectObject( &mFont );
dc.TextOut(0, 0, "Hello");
//结束记录窗体轮廓路径
dc.SelectObject( pOldFont );
dc.EndPath();
//把所记录的路径转化为窗体轮廓句柄
wndRgn = ::PathToRegion(dc.m_hDC);
//赋予窗体指定的轮廓形状
this->SetWindowRgn(wndRgn, TRUE);
}
}
更多精彩
赞助商链接