I'll be direct on a few scores.
Engineers must, these days, deal with microcontrollers. They are ubiquitous, as they save cost and provide features difficult or impossible to achieve in analog. Where algorithms can be placed into software, there is no temperature or long term drift to speak of, either, for crystal controlled units. So they are generally very good to use. Every engineer, these days, learns at least some programming, as a result.
First, C and assembly are your only choices for embedded programming on microcontrollers, where the project/application aren't about creating a new cell phone, pda, or iPad type device. In the case of multimedia embedded, you probably will want C++ (and some assembly), and will use some kind of embedded operating system, as well. BASIC is used on a few, such as the "BASIC Stamp" from Parallax. But in all my years of embedded programming, BASIC only comes up rarely. (And I do a lot of closed loop control, and not only PID.)
I can't even begin to understand how you'd imagine that Visual C++ is appropriate. There are no embedded platforms to speak of that can use it. Microsoft has released important parts of .NET in source, so that it can be ported. And if you use the .NET languages, such as c#, f#, and VB.NET, you may be able to take advantage of the common features (not everything is available and it isn't uncommon to see some unmanaged [non-.NET] code, even there.)
If "cross platform" means Linux and Windows to you, then you probably are just fine with GNU tools and c++/c. There are open GUIs that standardize a windows interface. In fact, Linear's LTspice application uses one and runs on both Linux and Windows, about equally well.
VB is not terrible. A lot of applications do just fine with it. But in its current incarnation, it is .NET and depends upon the MSCL (Microsoft common language) and the associated JIT (just in time) compiler to convert CL code into local machine code just prior to execution for the first time. And unless you have a .NET foundation to run on, with all that means, VB.NET probably isn't right. But then neither will be C# or F#, which are also .NET languages. (Microsoft C/C++ is _not_ .NET, though.)
I consider C++ a programmer's programming language. It should only be used be well-seasoned programmers who know how to rule themselves with an iron fist and have lots of experience in designing to use it. I do NOT consider it a "first language" for anyone. And it certainly isn't something you can learn well in a short time. There are many, many _important_ nuances within it that most people I know aren't even aware of. Just as an example:
x();
string s;
x();
You might imagine that the two x() function calls would be coded up the same in c++. But they aren't. In both cases, x() might throw an exception. But in the first case, the c++ compiler "knows" that there is nothing to destroy if an exception takes place and since there is no try-block here, it can just "let" the exception handling code find some other try-block. So nothing special for the first call. But the 2nd call takes place _after_ construction of a string. And the string will require destruction, should an exception take place. So the c++ compiler _must_ create a hidden "try block" here to capture exceptions and destroy string s before allowing the exception to move on. So the two calls generate different code. Most don't have a clue about that.
It's stuff like this, and that is only the tiniest fragment of the tip of the iceberg, that suggests you start elsewhere. Particularly, for embedded work. I'd recommend C, strongly. You learned it before and therefore that qualifies very well for your "reasonably well within reach to learn in short amount of time."
That's my recommendation. And it is widely used in embedded, too. So it's not an outlier choice.