void CDlg::InitUI()
{
CRect rect, rectTemp, rectItem;
CRgn rgnTemp;
GetClientRect(rect);
m_rgn.CreateRoundRectRgn(0, 0,rect.Width(),rect.Height(), 20, 20);
m_rgnFrame.CreateRoundRectRgn(0, 0,rect.Width(),rect.Height(), 20, 20);
rgnTemp.CreateRoundRectRgn(1, 1,rect.Width() - 1,rect.Height() - 1, 20, 20);
m_rgnFrame.CombineRgn(&m_rgn, &rgnTemp, RGN_XOR);
rgnTemp.DeleteObject();
::SetWindowRgn(GetSafeHwnd(),(HRGN)m_rgn, TRUE);
}
.....
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
virtual BOOL OnInitDialog();
virtual LRESULT DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam);
......
LRESULT CDlg::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
LRESULT lrst=CDialog::DefWindowProc(message, wParam, lParam);
if (!::IsWindow(m_hWnd))
return lrst;
if (message==WM_MOVE||message==WM_PAINT||message==WM_NCPAINT||message==WM_NCACTIVATE ||message == WM_NOTIFY)
{
CDC* pWinDC = GetWindowDC();
if (pWinDC)
{
CBrush brush;
brush.CreateSolidBrush(RGB(0, 0, 0));
pWinDC->FillRgn(&m_rgnFrame, &brush);
ReleaseDC(pWinDC);
}
}
return lrst;
}
本文介绍了一种在对话框中实现圆角效果的方法。通过使用 Windows API 和 GDI 对象,如 CRgn (区域) 和 CDC (设备上下文),实现了对话框窗口的圆角效果,并通过 XOR 操作为对话框添加了黑色边框。此外,还展示了如何在窗口移动、绘制等事件中更新这些视觉元素。
4404

被折叠的 条评论
为什么被折叠?



