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





2.00/5 (4投票s)
2004年12月24日
2分钟阅读

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

图(1.2)
引言
如果你第一次编译程序,你会看到创建的窗口形状(形式)是矩形的(图1.1)。所以,如果你想将其默认形状更改为圆形(见图1.2)或其他形状,请执行以下步骤…
为此,我们将使用 SetWindowRgn()
来设置窗口区域。
使用代码
- 创建或声明一个
CRgn
和CRect
类型的变量。 - 将以下代码写入
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()/2 – 50 , 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); }
生成的对话框将采用以下形式
与本文链接的程序将在至少一周后发布…
抱歉,因为我正在忙于考试…