These three items you mention refer to three distinct stages in the creation of a window using the low level Windows Api (the best way to program Windows in my opinion).
Before you can create a window you fill out all the fields of a WNDCLASSEX structure. This...
WindowClass.style = CS_HREDRAW | CS_VREDRAW;
pertains to the setting of one of the many fields (10 or so). It tells the operating system that when a window of the class szClassName is instantiated, and any change occurs to the window, the whole window should be redrawn (Windows will send a WM_PAINT message).
Note that the filling out of all the fields of a WNDCLASSEX structure is done before any windows of the class specified by the sz.ClassName field can be created/instantiated. In that sence, it represents the 1st step.
Once all the fields of the WNDCLASS striucture are filled out, one uses the RegisterClassEx() Api function to register the class with windows. the .szClassName field is of critical importance here. Let me digress for a moment.
Lets say I want to create an edit control (text box) with somewhat different characteristics than the standard/stock text box included with Windows. If I want to do that I create my own Window Class and fill out a WNDCLASSEX structure and specify the name of my new class/control through the .szClassName field. Lets say I call mine "MyEdit" . This would distinguish my edit control class from Windows own "edit" control class. Naturally, I'd have to fill in all the other fields too. And I'd have to RegisterClassEx() it too. At that point Windows would know about the general characteristics of a class known as "MyEdit".
At that point I could use the CreateWindowEx() function to create an actual instance of my "MyEdit" class with the specific characteristics I provide in the various parameters of the CreateWindowEx() call. For example, I might want my specific instance of the "MyEdit" class to be located at 75,90, in terms of x,y coordinates on the desktop, and I might want it to be a window 200 pixels wide and 225 pixels deep.
After the CreateWindowEx() call Windows will know what function to call when it wishes to provide information it has gleaned about your window because in filling out the fields of the WNDCLASSEX structure you would have provided Windows with the address of the Window Procedure to call in the lpWndProc field. If, immediately after your CreateWindowEx() call, you place a ShowWindow() call with the SW_SHOWNORMAL flag set, the window will probably become visible on your screen even without an UpdateWindow() call. However, the UpdateWindow() call forces a WM_PAINT message to be sent to the window's WndProc() function, and that message should cause a repainting of the window.
Hey! I'm not as good at explaining this as Charles Petzold! If you wish to persist at low level Api coding for Windows you absolutely need to get Petzold's Windows 95 or 98 book. They can be cheaply gotten used for a buck or two.
Having said that I do have tutorials on this subject at Jose Roca's forum for PowerBASIC programmers set up at...
http://www.jose.it-berater.org/smfforum/index.php?board=285.0
PowerBASIC might be something you would be interested in. I use different languages, but with Windows I invariably use the Windows Api. I commend you for attempting this. Stick with it.