OnPaint MFC 上不显示矩形
Rectangle not showing on OnPaint MFC
我有一个用 C++ 和 MFC 编写的基于对话框的应用程序。该对话框有一个 CStatic 图片控件。我在 PictureCtrl 的 OnPaint() 函数中绘制 BITMAP。相关代码如下:
void PictureCtrl::OnPaint()
{
CDC* pDC = this->GetDC();
pDC->SelectStockObject(PS_SOLID);
pDC->Rectangle(CRect(0, 0, 400, 400));
ReleaseDC(pDC);
CStatic::OnPaint();
}
应用程序运行时,矩形绘制在对话框的左上角,而不是图片控件。
其次,如果我最小化和最大化对话框 window,图像会显示,但矩形不会。
但是,如果我将鼠标悬停在 windows 任务栏上并且工具提示出现在对话框应用程序的图标上,则会显示矩形。
无论用户对 window 做什么(最小化、最大化、移动等),我都想在图像上显示矩形。
CStatic::OnPaint
处理 BeginPaint/EndPaint
(主要 WinAPI 函数)以响应 WM_PAINT
消息。因此应该首先调用它。此外,您可以使用具有自动清理功能的CClientDC
:
void PictureCtrl::OnPaint()
{
CStatic::OnPaint();
CClientDC dc(this); //<- uses GetDC
dc.SelectStockObject(BLACK_PEN);
dc.Rectangle(CRect(0, 0, 400, 400));
} //<- ReleaseDC is automatically called
更好的是,直接使用 CPaintDC
来响应 WM_PAINT
消息:
void PictureCtrl::OnPaint()
{
CPaintDC dc(this); //<- calls `BeginPaint`
dc.SelectStockObject(BLACK_PEN);
dc.Rectangle(CRect(0, 0, 400, 400));
} //<- EndPaint is automatically called
无关,使用BLACK_PEN
作为SelectStockObject
的参数。使用 PS_SOLID
作为 CPen
的参数:
CPen pen(PS_SOLID, 1, RGB(0,0,0));
我有一个用 C++ 和 MFC 编写的基于对话框的应用程序。该对话框有一个 CStatic 图片控件。我在 PictureCtrl 的 OnPaint() 函数中绘制 BITMAP。相关代码如下:
void PictureCtrl::OnPaint()
{
CDC* pDC = this->GetDC();
pDC->SelectStockObject(PS_SOLID);
pDC->Rectangle(CRect(0, 0, 400, 400));
ReleaseDC(pDC);
CStatic::OnPaint();
}
应用程序运行时,矩形绘制在对话框的左上角,而不是图片控件。
其次,如果我最小化和最大化对话框 window,图像会显示,但矩形不会。
但是,如果我将鼠标悬停在 windows 任务栏上并且工具提示出现在对话框应用程序的图标上,则会显示矩形。
无论用户对 window 做什么(最小化、最大化、移动等),我都想在图像上显示矩形。
CStatic::OnPaint
处理 BeginPaint/EndPaint
(主要 WinAPI 函数)以响应 WM_PAINT
消息。因此应该首先调用它。此外,您可以使用具有自动清理功能的CClientDC
:
void PictureCtrl::OnPaint()
{
CStatic::OnPaint();
CClientDC dc(this); //<- uses GetDC
dc.SelectStockObject(BLACK_PEN);
dc.Rectangle(CRect(0, 0, 400, 400));
} //<- ReleaseDC is automatically called
更好的是,直接使用 CPaintDC
来响应 WM_PAINT
消息:
void PictureCtrl::OnPaint()
{
CPaintDC dc(this); //<- calls `BeginPaint`
dc.SelectStockObject(BLACK_PEN);
dc.Rectangle(CRect(0, 0, 400, 400));
} //<- EndPaint is automatically called
无关,使用BLACK_PEN
作为SelectStockObject
的参数。使用 PS_SOLID
作为 CPen
的参数:
CPen pen(PS_SOLID, 1, RGB(0,0,0));