MFC实现圆角对话框示例代码
时间: 2023-08-19 10:03:56 浏览: 66
以下是一个基于 MFC 的圆角对话框示例代码:
首先,在对话框类的头文件中添加以下代码:
```cpp
class CRoundDialog : public CDialogEx
{
// ...
protected:
afx_msg void OnPaint();
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
DECLARE_MESSAGE_MAP()
private:
int m_nRoundRadius;
CBrush m_brush;
};
```
在对话框类的实现文件中添加以下代码:
```cpp
BEGIN_MESSAGE_MAP(CRoundDialog, CDialogEx)
// ...
ON_WM_PAINT()
ON_WM_ERASEBKGND()
END_MESSAGE_MAP()
CRoundDialog::CRoundDialog(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_ROUND_DIALOG, pParent)
{
m_nRoundRadius = 20; // 设置圆角半径为 20
m_brush.CreateStockObject(WHITE_BRUSH); // 创建白色画刷
}
void CRoundDialog::OnPaint()
{
CPaintDC dc(this);
CRect rect;
GetClientRect(&rect);
CDC memDC;
memDC.CreateCompatibleDC(&dc);
CBitmap bitmap;
bitmap.CreateCompatibleBitmap(&dc, rect.Width(), rect.Height());
CBitmap* pOldBitmap = memDC.SelectObject(&bitmap);
// 绘制对话框圆角背景
CRgn rgn;
rgn.CreateRoundRectRgn(rect.left, rect.top, rect.right, rect.bottom, m_nRoundRadius, m_nRoundRadius);
memDC.SelectClipRgn(&rgn);
memDC.FillSolidRect(rect, GetSysColor(COLOR_BTNFACE));
// 绘制对话框内容
CDialogEx::OnPaint();
dc.BitBlt(0, 0, rect.Width(), rect.Height(), &memDC, 0, 0, SRCCOPY);
memDC.SelectObject(pOldBitmap);
}
BOOL CRoundDialog::OnEraseBkgnd(CDC* pDC)
{
return TRUE;
}
```
这里重写了 OnPaint() 和 OnEraseBkgnd() 方法。OnPaint() 方法用于绘制圆角矩形背景,并在最后调用父类的 OnPaint() 方法以绘制对话框的内容。OnEraseBkgnd() 方法返回 TRUE,以避免重绘背景。
在对话框类的构造函数中,创建一个白色画刷,用于绘制对话框的背景。
最后,在 OnInitDialog() 方法中添加以下代码:
```cpp
BOOL CRoundDialog::OnInitDialog()
{
CDialogEx::OnInit = GPIO_MODE_ANALOG;
GPIO_InitStruct.Pull = GPIO_NOPULL;
HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}
void Error_Handler(void)
{
while(1)
{
}
}
#ifdef USE_FULL_ASSERT
void assert_failed(uint8_t *file, uint32_t line)
{
}
#endif
```
其中,定时器TIM2的定时周期为500us,定时中断中启动ADC转换,转换完成中断中读取ADC的值。注意,ADC的DMA模式要设置为循环模式,这样可以持续地读取ADC的值。