65.9K
CodeProject 正在变化。 阅读更多。
Home

更改对话框窗口的默认形式

starIconstarIconemptyStarIconemptyStarIconemptyStarIcon

2.00/5 (4投票s)

2004年12月24日

2分钟阅读

viewsIcon

45805

更改对话框的默认形状,使其变为圆形而不是矩形。

图(1.1)

图(1.2)

引言

如果你第一次编译程序,你会看到创建的窗口形状(形式)是矩形的(图1.1)。所以,如果你想将其默认形状更改为圆形(见图1.2)或其他形状,请执行以下步骤…

为此,我们将使用 SetWindowRgn() 来设置窗口区域。

使用代码

  1. 创建或声明一个 CRgnCRect 类型的变量。
  2. 将以下代码写入 OnInitDialog() 消息处理函数中。
CMyDialog::OnInitDialog()
{
    CRect m_rect;
    CRgn m_rgn;
    GetClientRect(&m_rect);
    m_rect.NormalizeRect();
    m_rgn.CreateEllipticRgn(10,10,m_rect.Width(),m_rect.Height()+10);
    SetWindowRgn(m_rgn,TRUE);
}
/////

首先,GetClientRect()CWnd 客户端区域的客户端坐标复制到唯一传递的参数 LPRECT 中。它将窗口的客户端区域复制到唯一传递的参数中,该参数的类型为 LPRECT。然后,我们使用 CreateEllipticRgn() 在边界矩形中创建或指定椭圆区域,如图(2)所示。因此,你将矩形的四个边传递给此函数。

图 (2)

在这个图中,我们创建了蓝色的圆形形式,并省略了通用矩形形式的红色部分。

  • 假设整个窗口是上面显示的红色矩形,而你希望对话框采用的自定义形式(圆形)是蓝色圆圈。
  • 要指定或更改对话框的形式,请调用 CWnd 成员函数 SetWindowRgn()

SetWindowRgn() 设置窗口的区域,它接受两个参数:第一个是使用 CreateEllipticRgn() 函数创建的区域的句柄,第二个参数指定在设置区域后是否重新绘制窗口。如果你使用“TRUE”作为第二个参数,则操作系统将在指定区域后重新绘制窗口。

代码片段(供自学)

OnInitDialog() 消息处理函数的内容更改为以下内容,并查看编译和运行应用程序时对话框所做的更改…它将类似于以下图形

CMyDialog::OnInitDalog()

CMyDialog::OnInitDialog()
{
    CRgn m_rgn1,m_rgn2,result;
    CRect rect
    //getting the dimensions of our dialog & 
    //saving the dimensions in rect member…
    GetClientRect( &rect);
    m_rgn1.CreateEllipticRgn(10,10,rect.Width()-150, rect.Height());
    m_rgn2.CreateEllipticRgn(rect.Width()/250 , 
           10 , rect.Width() , rect.Height());
    VERIFY(result.CreateRectRgn( 0, 0 , 200 , 200 ));
    Int nCombineResult= result.CombineRgn( &m_rgn1 , m_rgn2 , RGN_OR);
    ASSERT(nCombineResult !=ERROR || nCombineResult != NULLREGION);
    SetWindowRgn( result, TRUE);
}

生成的对话框将采用以下形式

与本文链接的程序将在至少一周后发布…

抱歉,因为我正在忙于考试…

© . All rights reserved.