WM_PAINT 메시지를 처리 할 때 BeginPaint 및 EndPaint 호출을 생략하고 CPU 사용률을 최대 100 %까지 쐈습니다. 왜 이런거야?WinAPI : WM_PAINT의 BeginPaint 및 EndPaint를 생략하면 CPU 사용률이 100 %가됩니다.
나는 또한 작업자 스레드를 사용하고 있지만 다른 작업을 수행하고이 문제에 영향을 미치지 않는 것으로 보입니다.
또한 BeginPaint 대신 GetDC()의 장치 컨텍스트를 사용할 수 있습니까? 그들은 다른 값을 가진 것처럼 보이므로 나는 그들이 다른 직업을 가지고 있다고 생각했습니다. 내가 바보 같은 소리 경우
죄송합니다 - 나는
감사
... WinAPI를, C++ 및 일반적인 논리의 단지 세계에 새로 온 사람
다음의 tjis에 더 읽을 수있는 경우에 도움이 될 것입니다 경우
확실하지, 당신은 전혀 WinAPI를를 사용하는 특별한 이유가있다 ? 요즘 직접 사용하는 이유는 거의 없습니다. 기존 프로그램을 유지하는 것 이외에는 요. – Cubic
Begin/Endpaint는 WM_PAINT 메시지가 실제로 처리되었음을 OS에 알리는 데 사용됩니다. 그래서 그 호출을 사용하지 않으면 OS는 뭔가를 그려야한다는 것을 앱에 알려줍니다. –
GetDC()에 의해 반환 된 DC는 제한이 없으며 클리핑 경계가 없습니다. BeginPaint에서 반환 한 DC는 업데이트가 필요한 창의 일부를 나타내는 DC를 반환합니다. 이 지역 밖에 페인트 칠을하면 잘립니다. 내 관찰에서 GetDC()에 의해 반환 된 DC의 GDI 작업은 BeginPaint에 의해 반환 된 DC의 동일한 코드보다 더 우수한 성능을 제공합니다. 특히 코드가 각 WM_PAINT의 전체 창을 다시 그리는 경우 특히 그렇습니다.WM_PAINT에서 GetDC가 반환 한 DC를 사용할 수 있지만 BeginPaint/EndPaint를 호출하여 영역이 업데이트되었음을 나타내야합니다. – selbie