Windows 2000は ComboLBox に対して SetLayeredWindow を実行してはいけない
COMBOBOXINFO info = { sizeof(COMBOBOXINFO) }; GetComboBoxInfo(ComboBox1->Handle, &info); HWND hWnd = info.hwndList; ::SetWindowLong(hWnd, GWL_EXSTYLE, ::GetWindowLong(hWnd, GWL_EXSTYLE) ^ WS_EX_LAYERED); ::SetWindowLong(hWnd, GWL_EXSTYLE, ::GetWindowLong(hWnd, GWL_EXSTYLE) | WS_EX_LAYERED); ::SetLayeredWindowAttributes(hWnd, 0, alpha, LWA_ALPHA); |
上記はコンボボックスのリスト部分を透過にするコードです。
ところが、Windows 2000で実行すると透過になるどころか、消えなくなるというバグがあります。
Windows 2000で、CrystalDiskMark 7.0.0 でコンボボックスを操作すると残像が残るのはこのためです。
ちなみにSetLayeredWindowAttributesではどんなパラメータを渡しても解除はできないので
SetWindowLong のGWL_EXSTYLE で WS_EX_LAYERED を解除するしかありません。
ソースファイルの
SetLayeredWindow(info.hwndList, m_ComboAlpha) をすべてコメントアウトすれば問題なくなります
(((・ω・)))
不透明率が 242(95%)だったので分からないだけでした
てっきり、こういうのを期待してプログラムしてるのかと…。
List部分は 95%で、本体は 50%でいい気がしますが ・ω・
EditBox に対する透過処理はWindows 2000でも正常に動作します。
Comments