Hiya Scoots,
Out of curiosity, do you have any platform in mind? By platform I mean devices, like a Windows Desktop or a Android Tablet, or the iPad, etc. Each device has their own little ways of doing things. For example, the Java programming language is considered the standard for Android based devices, where as the Apple devices primarily use a language called Objective-C. The Metro side of Windows 8 makes use of JavaScript, C#, or C++ depending on what type of application you plan on targeting, where as the 'good ol desktop' is pretty much open to whatever programming language you feel like using. I'm asking this because if you have a particular goal in mind then it may shape what you want to start learning.
Anyway, 'how do I start making games' is a surprisingly heavy question. There is bunch of stuff that a person must learn before they can really start making a game, and it is sometimes difficult to maintain the patience to learn all of the things correctly. After you have the platform in mind the next step is to start learning a programming language. You mentioned C++, but it might be a good idea to start with something a little less involved and gradually work your way up, or, who knows, perhaps you will find that you don't even need to move to C++ to meet your goals. C++ is complicated, but it isn't just the language that is complicated. Setting up the compiler/linker/IDE is much more involved than say, Python or C#, in which these extra steps pretty much don't exist.
A handy thing about programming languages is that the concepts learned in one have a very high level of transferability. If you play around with Python for a couple of months, it will be much easier for you to get the hang of any other language out there. The way the program looks aesthetically (called syntax) may vary from language to language, but the underlying concepts invariably are the same. This means once you get the hang of Python you could jump to a language that more closely resembles C, such as Java or C#. Then once you have the syntax down you could jump to C++.
A thing worth noting is that, depending on the platform, C++ is not required to make games. For an absolute beginner, it may be best to go with Python and Pygame. Pygame has a few tutorials on their website you could take a look at, but, as Bacterius mentioned, the first thing you will want to do is get a solid feel for the language you are using. Python, unlike C++, requires almost zero setup (you download and run an installer) and thus it is much more beginner friendly. Pygame is nice because it offers a gentle introduction into game development. Most of the annoying cruft is cut out, so you can focus on learning and experimenting instead of focusing on memory leaks and bizarre pointer issues.
Microsofts XNA or the open source MonoGame may also be a good starting point, but they are slightly more involved. It may actually be good to start with PyGame, and, once comfortable, move to XNA. XNA would introduce you to shaders and reveal a bit more of the 'metal' without getting too 'metaly.' I got my start with XNA and C#. It was pretty tough, but it was also so much easier than trying to tackle C++ and raw DirectX. I can't even imagine trying to do that without some bit of previous knowledge. C# & XNA was a great stepping stone.
Anyway, if you decide to start with C# or C++ you will want to download a thing called an Integrated Development Environment (IDE.) An IDE is pretty much a glorified text editor married to a complier that makes programming significantly faster and more pleasurable. For Windows I recommend Visual Studio. And it's free too ( at least the Express edition ) so there should be no barrier to playing around with it.
You also asked if you had to use an engine. The answer is no, you dont, but, depending on what you enjoy doing and how your mind works, you may enjoy working with an existing game engine over building your own. My mind enjoys the engineering, so I naturally shy away from Game Engines and build my own for the fun and experience. But perhaps you are the type who wants to make games more than write code. If you are that type than Game Engines are nice, but, as with programming, there is an unfortunately steep learning curve. Some Game Engines don't require you to know any sort of programming language, such as GameMaker (it uses a drag and drop event system, though it can be a bit challenging at times to achieve the behaviour you want.) It is also worth noting that many, but not all, game engines require you to purchase a software license to use them to their full potential, so that is something to keep in mind if you are strapped for cash.