I just came in to post that I had the arrow key functionality working now and I see that you've already posted Elroy! You handled this differently than I did. I see that you check the keystates in the cbn = CBN_SELCHANGE message handler. I did this a little differently...

I created a separate handler for WM_KEYUP messages and check for wParam values of VK_UP or VK_DOWN and check if the next/previous item is selectable or not and handle accordingly. It's working well for me. I wonder if it makes more sense to keep it all in the CBN_SELCHANGE handler like you did however. Hmmm...

You're also processing left and right arrow keys but I'm only checking for up and down. Are left and right keys used to navigate up and down a list?

BTW - Thank you VERY MUCH for your time and efforts on this!