gpt4 book ai didi

c++ - OnPaint 更新太频繁

转载 作者:太空狗 更新时间:2023-10-29 21:01:30 25 4
gpt4 key购买 nike

我对 CFrameWnd 的 OnPaint 方法有问题,我似乎无法弄清楚发生了什么。 OnPaint 大约每 10 毫秒调用一次,这会导致计算机死机。检查 CPU 使用率,此应用占用 50%!

该应用程序是一个非常简单的 MFC 应用程序,它被编写在一个文件中。

// Includes are done here...

class MFC_Tutorial_Window : public CFrameWnd
{
std::string data;

public:
MFC_Tutorial_Window()
{
this->data = "";
Create(NULL, "Data Win"); // Create window
}

void OnPaint()
{
CDC* pDC = GetDC();

CString s = CString(this->data.c_str());
RECT rc;

HWND hwnd = this->m_hWnd;
if(hwnd != NULL) {
::GetWindowRect(hwnd, &rc);

rc.top = rc.bottom/2;

if(pDC != NULL && pDC->m_hDC != NULL) {
pDC->DrawText(s, &rc, DT_CENTER);
}
}
}

void UpdateWithNewData(std::string up) {
this->data = up;
Invalidate();
}


DECLARE_MESSAGE_MAP()
};

BEGIN_MESSAGE_MAP(MFC_Tutorial_Window, CFrameWnd)
ON_WM_PAINT()
END_MESSAGE_MAP()

// App class
class MyApp :public CWinApp
{
MFC_Tutorial_Window *wnd;

BOOL InitInstance()
{
wnd = new MFC_Tutorial_Window();
m_pMainWnd = wnd;
m_pMainWnd->ShowWindow(3);

wnd->UpdateWithNewData("Hello world!");
return 1;
}
};

有谁知道为什么OnPaint会被系统刷屏?多年来一直盯着这段代码,但我就是找不到。

最佳答案

必须调用 CPaintDC 析构函数才能重置重绘标志。您需要在您的 CDC 上调用 beginPaint();endPaint(); 这实际上应该更改为 CPaintDC。更重要的是,不调用 endPaint(); 无论如何都会导致重新绘制上下文。

关于c++ - OnPaint 更新太频繁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18183237/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com