memset is a dumb block-memory write. struct initialization may not necessarily zero all members -- it will default construct members that have a constructor.
IE: if WNDCLASSEX contained a string, then the former would work, whereas the latter would completely destroy the string object and possibly cause the program to crash.
memset and ZeroMemory have no place in C++ as far as I'm concerned. You should prefer the first form.
@ OP: The point is that you should be wrapping these structs, especially the common as dirt ones that are initialization heavy like WNDCLASSEX, so that they get built by a proper C++ constructor instead of just aping the code you see on MSDN. Once you've done this there won't be a need to blank out the contents of the struct only to immediately write into it with virtually the same information every single time you go to use an instance of one. If nothing else you'll save yourself a lot of typing in future projects.