@Dan_W Hey Dan,
I was unable to make GDI+ work as I wanted, so went with having a bmp waveform image instead (actually was working on it when you asked on Friday). I didn't have the time to check out WIC to load a png as bitmap. However, I did reduce the size of the bitmap size to 30MBs since I only needed 80 pixels wide. The final version will need some other solution than just slapping the bitmap on, as waveform is created with equal time ticks, yet my rows time vary with repect to beats-per-minute. That is a later problem to solve though.
Another big change was instead of having one large memory bitmap (which works the fastest, but the memory needed might become enormous depending, I had around 2 GB impact even with this song. As it seems you can see the impact on memory in performance tab of Task Manager if it is large enough) I am now creating a bitmap that is userform size which has very little memory requirement (waveform being in memory at all times is the highest single memory consumer, but this wouldn't change even if I can load a png, so that works).
With this change I also create (paint) a single row while playback, using a copy of the TrackDC. This works for this particular song but will be slow for faster tempo ones, so I have an idea of creating more than one row each time needed, i.e., 5 rows at a time which will possibly take longer than a row's time. However, I can see the most time is lost while selecting/deselecting objects (bitblt usually is 1-2 ms each). So idea here is creating rows in bulk to get hit by overhead once instead of each row scroll. I still need to test this one.
Next I want to work on an overview/summary of the song (beats-per-minute, time signature, section markers etc) which I will use as a scroller (I will possibly put a transparent label under it and using mouse move/up/down events and also mouse wheel code from Jaafar) instead of a scroll bar which is limited by max value anyway.
Finally, since notes will need some additional formatting (a note can have couple of states depending on how you play in game), so I also wonder if maybe I can use pre-created pattern brushes, and just slap them on but that is a thought atm. Drawing rectangles are fast enough it seems.
I have uploaded a new gdi test.7z file (11 MB download).
GDrive - gdi test.7z
And you can slide the instruments this time with the scroll bar above (toggle button is non-functional atm).