I am aware thought that if I choose C# or VB that its a microsoft thing and I am essentially learning somthing windows only.
Java would seem to fit the bill as it seems similar to C# but is cross platform?
.NET actually has a great cross-platform support thanks to the
Mono project. I think they currently have support for full C# syntax and .NET up to 4.0. There is also and IDE, MonoDevelop that is really good (compared to Eclipse and other linux IDEs, it's still no match for Visual Studio, unfortunately).
However, if you want Java there is nothing wrong with that. Very similar language, different philosophies and standards for libraries but overall not that much. Also, C# is in my opinion much closer to C++ than Java so if you want to do something more low-level the transition should be easier (but not by much, it's mostly a syntax thing).
Also, for quick little projects there are scripting languages like Python, Perl etc which are also a good choice.
It ultimately depends on what you want to do. For GUI there is Qt (for C++ but has libraries for pretty much every popular language) with it's own IDE (quite good, cross-platform). If you can live with windows only, you really can't beat .NET (C#, VB, ...) with WPF or the older WinForms (BUT you can run the same WinForms code on Linux using Mono!, not WPF though). Then there is some more stuff like wxWidgets (C++, bindings for Perl, Python), Gtk+ (C++, has many libraries, for example Gtk# for .NET).
For simple projects that I only run on Windows I almost always use C#, because of the great (and free) IDE and many libraries that make it fast and easy. Cross-platform with only console interface I go with C/C++/C# or Python.
For cross-platform GUI it gets hard, you have to know what you need. Most of the time I can get away with Qt. Many popular cross-platform applications actually use different code and GUI toolkit for each platform, and have a common code that just interfaces with that.