CFrameWnd의 OnPaint 메서드에 문제가 있고 어떤 일이 일어나고 있는지 파악할 수 없습니다. OnPaint는 약 10ms마다 약 호출되며 이로 인해 컴퓨터가 멈 춥니 다. CPU 사용량을 확인하고이 응용 프로그램이 50 %를 차지합니다!OnPaint가 너무 자주 업데이트됩니다.
응용 프로그램은 하나의 파일로 작성된 매우 간단한 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가 시스템에서 스팸 된 이유를 알고 있습니까? 이 코드를봤을 때 나는 그것을 발견하지 못했습니다.
* 항상 * View 클래스를 사용하고 싶다면 OnDraw에서 드로잉을하면 프레임 워크가 현재 문제를 일으키는 세부 사항을 처리합니다. –