.NET is MS managed run-time. It's mainly used by c# and vb.net as MS's alternative to Java. It
can also be used by C++ as C++/cli which uses MS non-standard C++ extensions (such as boxing (^) for managed types). It's 'managed' in the sense that the run-time will automatically delete memory no longer used (similar to c++ std::shared_ptr) - unlike new/delete in C++ (or malloc/free in c). It can give access to a whole set of additional .net features (such as forms etc). However IMO if you want to use .net then you'd be better off using c# which was designed to use .net.
If you compile using WIN32 as c or C++ then you produce a .exe program. If you use UWP (Universal Window Platform) then you produce an app (not a stand-alone program) which can be used on different devices (based around .net I think).
There is also C++ winrt
https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/intro-to-using-cpp-with-winrt
which produces an app.
Re com
https://docs.microsoft.com/en-us/windows/win32/com/component-object-model--com--portal
Re DirectX
https://docs.microsoft.com/en-us/windows/win32/directx
If you're going to be programming for Windows using any MS library (including WIN32) then you really need to become expert at searching
https://docs.microsoft.com/en-us/
Note that whatever you decide to use on top of C++ (or c# if you go that way), there is a massive learning mountain to climb.
Then there this the (some consider now outdated) MFC which comprises a set of C++ classes encompassing the c based WIN32 api's.
https://docs.microsoft.com/en-us/cpp/mfc/framework-mfc?view=msvc-170
To use WIN32 with VS, then make sure that you have installed the latest SDK as part of VS installation. If you want to use MFC, then this also has to be installed. Similar for c++/cli - this has to be installed separately. If you're not using windows gui then all you need to do is to include windows.h. You might also want to also have before the include:
#define WIN32_LEAN_AND_MEAN
#define NOMINMAX
which cuts down what parts of windows.h are actually included (speeds up compilation) and stops windows defining min/max macros which can interfere with std::min/std::max.
Note that you need to read carefully the documentation for every API used and note that some require additional include files (especially the network ones). Also for every function used you should
always check that the function has completed OK. How to do this is documented for each function.
You also need to pay attention to whether you compile as unicode (based upon wchar_t (16 bits) ) or multi-byte character set (set under project properties/advanced). WIN32 uses a whole set of new defined types
https://docs.microsoft.com/en-us/windows/win32/winprog/windows-data-types
note W refers to unicode, A for ansi (multi-byte) and T refers to the type set by whether UNICODE/_UNICODE is defined or not.
Most WIN32 functions have 2 versions - W for unicode and A for ansi. eg SetWindowText(). Like this it uses UNICODE to decide whether to use the unicode or ansi version. However SetWindowTextW() is the unicode version and SetWindowTextA() is the ansi version.
Another useful resource for WIN32 is
http://www.flounder.com/ (particulalry MVP Tips).
Have fun!