Flickering is a common issue with Windows applications. Different techniques exist to solve it, but they are more or less intrusive, and more or less efficient. Double-buffering for example is probably the best solution, but hard to put in place in a legacy code (even impossible sometimes). Using the WM_SETREDRAWmessage can be a light and efficient solution.
The captures below show the flickering of an application with a lot of controls, before and after using WM_SETREDRAW :
And the change is quite simple : disable controls drawing, then update all controls, and finally reenable controls drawing and force a repaint, like this :
[code lang=cpp]
// Stop drawing controls
SendMessage(Handle, WM_SETREDRAW, WPARAM(False), 0);
// Update all controls…
// Restart drawing controls
SendMessage(Handle, WM_SETREDRAW, WPARAM(True), 0);
// Force a repaint of the window and all of its child controls
RedrawWindow(Handle, NULL, NULL, RDW_ERASE | RDW_FRAME | RDW_INVALIDATE | RDW_ALLCHILDREN);
[/code]