I'm trying to switch from (the crappy) Win32 to Linux too, but I think I have a longer way ahead of me than you
Quoting from this site
To repaint the window and its background, use XClearWindow. Setting the border or changing the background such that the border tile origin changes causes the border to be repainted.
In Windows, this would be equivalent to sending a WM_PAINT (and a WM_NCPAINT) to the window. I have no idea to choose wether the background should be cleared or not (in Windows you just say TRUE or FALSE when you get WM_ERASEBACKGROUND). I'm also not sure if it will repaint the child windows, but I guess the page I referred to can help you at least a bit.