Hardware programming on a PC is essentially I/O programming. This means you program drivers that communicate with hardware using some channel or port. So there is no general books about it. It's all about knowing the ports you work with, the OS calls necessary to open, configure and use the ports, the specifics of the communication protocol used across the port, and the hardware vendor's spec-sheet on the commands and packet formats.
Hardware programming takes a lot of patience because there is hardly any simple ready-to-use solution or textbook examples. It's case-by-case. Every hardware is different and you often have to go through thousands of pages of spec-sheets, command specifications, user manuals, programming manuals, etc.
If you tell me what is the port you work with, what communication protocol is used, what platform you are running on, and what hardware circuit you are interfacing with, then maybe I can help.
Finally, if by "we programme hardware using C++" you mean that you are programming stuff on a micro-controller or micro-PC, then there are certainly more resources for you. Generally, most people use either AVR Studio or Arduino for programming on micro-controllers (AVR Studio for example can simulate the hardware IO signals and the actual operation of the micro-controller). But, generally, you will find mostly C programming, unless there is a OS running (like Micro-Linux, Embedded Windows, FreeRTOS, etc.) then there are possibilities for cross-compiling C++ code (MicroLinux is especially nice and easy).
For Each ctrl As Control In Me.Controls("pnlMainPanel").Controls
If ctrl.GetType Is GetType(System.Windows.Forms.Panel) Then
For Each subCtrl As Control In ctrl.Controls
If subCtrl.GetType Is GetType(System.Windows.Forms.TextBox) Then
If subCtrl.GetType Is ...