Quantcast
Channel: ドナドナされるプログラマのメモ
Viewing all articles
Browse latest Browse all 551

CProgressCtrlのSetStateが反映されない

$
0
0

CProgressCtrlの色を変えようとしたがハマったのでメモ。

CProgressCtrlは、WindowsThemeが有効だとプログレスバーの色を変えるSetBarColorが無視される。そこで、SetStateでPBST_NORMAL, PBST_PAUSED, PBST_ERRORのいずれかを指定することでテーマに沿った色に変えることにした。しかし、なぜか変わらない!

ブレークポイントを設定したら変わることに気づいたので、ためしにバーの値更新周期を50msから500msにしてみたら、動いた。こんなの気づかないよ・・・。どこにもドキュメントされてないし。

以下、更新部分のソースコード

 

Updating CProgressCtrl State

追記:どうやら、プログレスバーの長さが変わっている最中にSetStateしても無視されるようだ。Vista以降では、SetPosで長さを変えると、その長さに向かってプログレスバーが伸びるアニメーションをする。このアニメーションをキャンセルすることで、瞬時にSetStateが有効になる。

 以下、サンプルコード。

gist.github.com


Viewing all articles
Browse latest Browse all 551

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>