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

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

 2010-07-01 20:43:05 来源:WEB开发网   
核心提示:四、作图路径法创建”region”使用该方法创建”region”的过程如下:第一步绘制所要创建的窗体形状,该步骤中使用到CDC类中的一些成员函数如下:BOOL CDC::BeginPath( );调用该函数后当前设备环境(DC)开始追踪绘图的过程,Windows中不规则窗

四、作图路径法创建”region”

使用该方法创建”region”的过程如下:

第一步绘制所要创建的窗体形状。

该步骤中使用到CDC类中的一些成员函数如下:BOOL CDC::BeginPath( );

调用该函数后当前设备环境(DC)开始追踪绘图的过程。

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

CClientDC是CDC的派生类,故此该类具有所有CDC类的成员变量和成员函数。

图二 hello形状的窗体效果图

Tags:Windows 不规则 窗体

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