WEB开发网
开发学院软件开发VC Windows 中不规则窗体的编程实现 阅读

Windows 中不规则窗体的编程实现

 2006-07-19 11:29:53 来源:WEB开发网   
核心提示: int CDC::SetBkMode( int nBkMode );设置绘图时的背景模式,此应用中nBkMode必须取值为TRANSPARENT ,Windows 中不规则窗体的编程实现(3),即设置绘图时背景不发生变化,BOOL CDC::EndPath( );调用该函数后当前设备环境(
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);    
  }
}

上一页  1 2 3 4  下一页

Tags:Windows 不规则 窗体

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接