在MFC窗口中画图刷新窗口后图形仍在
时间: 2023-06-24 15:08:23 浏览: 115
vc在窗口中画图.doc
要在 MFC 窗口中画图并且刷新窗口后图形仍然存在,可以通过以下步骤实现:
1. 在 MFC 应用程序中创建一个继承自 CWnd 的类,这个类将用于绘制图形和处理窗口消息。
2. 在这个类的构造函数中创建一个用于绘制图形的 CDC 对象。
3. 重写 OnPaint() 函数,在该函数中使用 CDC 对象绘制图形。
4. 如果需要实现图形的动态更新,可以使用定时器或者其他方式触发 Invalidate() 函数,使窗口重绘。
下面是一个简单的示例代码,用于在 MFC 窗口中绘制一个矩形并实现动态更新:
```c++
class CMyWnd : public CWnd
{
public:
CMyWnd()
{
m_rect.SetRect(100, 100, 200, 200);
m_bMoving = false;
m_pTimer = new CTimer(this);
m_pTimer->SetTimer(50);
}
afx_msg void OnPaint()
{
CPaintDC dc(this);
dc.Rectangle(m_rect);
}
afx_msg void OnTimer(UINT nIDEvent)
{
if (nIDEvent == m_pTimer->GetTimerID())
{
if (m_bMoving)
{
m_rect.OffsetRect(5, 0);
Invalidate();
}
}
CWnd::OnTimer(nIDEvent);
}
afx_msg void OnLButtonDown(UINT nFlags, CPoint point)
{
if (m_rect.PtInRect(point))
{
m_bMoving = true;
}
CWnd::OnLButtonDown(nFlags, point);
}
afx_msg void OnLButtonUp(UINT nFlags, CPoint point)
{
m_bMoving = false;
CWnd::OnLButtonUp(nFlags, point);
}
private:
CRect m_rect;
bool m_bMoving;
CTimer* m_pTimer;
};
```
在应用程序的 InitInstance() 函数中创建该窗口:
```c++
BOOL CMyApp::InitInstance()
{
// ...
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
return FALSE;
m_pMainWnd = pMainFrame;
CMyWnd* pMyWnd = new CMyWnd;
pMyWnd->Create(NULL, L"My Window", WS_OVERLAPPEDWINDOW | WS_VISIBLE, CRect(0, 0, 400, 400), pMainFrame, 0);
pMyWnd->UpdateWindow();
// ...
return TRUE;
}
```
这段代码创建了一个大小为 400x400 的窗口,窗口中绘制了一个大小为 100x100 的矩形,并且矩形可以通过鼠标拖动实现移动。同时,定时器每隔 50 毫秒触发一次,如果矩形正在移动,则调用 Invalidate() 函数使窗口重绘。这样就能实现动态更新了。
阅读全文