See
this for fullscreen toggling implementation in Win32. Remember that you can create a windows cursor and bundle it with your application and then use it with the system cursor instead of an an-game cursor image. This has the advantage of being fast, since the system cursor updates are fast, but game cursors' update speed depends on the frame rate. But if you decide you still want an in-game cursor (for example, if you're doing crazy cursor graphics), then yes, you should hide the system cursor and draw an in-game one.
To hide the cursor, responding to WM_SETCURSOR appropriately will result in simpler and better-behaving code than calling ShowCursor(false).
However, you should only need to adjust the cursor position when the window is not fullscreened. In full screen mode, the user can't move the cursor outside the window since it's taking up all of the screen space. In windowed mode, look into using the ClipCursor() API, or capture the mouse when the window is activated (and release it when it's deactivated) so that you receive WM_MOUSEMOVE messages when the user moves the cursor outside of the window, and respond to it by setting the cursor position back inside the window. Or, like you suggested, use an in-game cursor and keep the system cursor in the center of the window.
I'm not sure what you mean exactly by handling multiple resolutions and aspect ratios. Do you how to decide the aspect ration based on resolution? For 2D stuff, I'll just quote
this:
The usual method for aspect ratio independence for 2D elements is to have a border. You put everything in a 4:3 shaped box in the middle of the screen but stretch the background to full screen. As long as the background is generic that works well. If not then it's black borders or extra backgrounds designed for different shaped resolutions (16:9 and 5:4 are the common ones).
The other option is just to stretch everything to fit.
By the way it's also worth noting that the ratio of width to height in pixels is not always the same as width to height in inches. For example 1280x1024 on a CRT probably has non square pixels, but on and LCD the pixels are probably square. I wouldn't worry about it for 2D, but it isn't too hard getting it right for 3D.
You can use (float)GetDeviceCaps(hdc, HORZRES) / (float)GetDeviceCaps(hdc, VERTRES) to find out what Windows thinks the physical aspect ratio is.
I hope this helps.