新規記事の投稿を行うことで、非表示にすることが可能です。
2016年03月16日
タスクバー(タスクトレイ)上のアプリアイコンで進捗状況表示
久々にクライアントアプリの開発をすることになった。
ネットワーク越しにファイル変換を行って、変換後のデータをもらい、ファイルに保存するという割と単純なものだが、ファイルサイズによっては時間がかかる場合もある。
そこでUI的に進捗状況を表示したいと思ったが、ダイアログ上にプログレスバーを表示するのは実装してみたが、何かしっくりこないので、別のインターフェースを模索していたら、Windows7以降で追加された、タスクバー上でのアイコンがプログレスバーのように変化するアプリがあるのを思い出し、まねをしてみようと思い立った。
WEBで検索してみると、ITaskBar3 インターフェースを使えばできそうということがわかった。
ITaskbarList3::SetProgressState
ところが、MSDNのどこにも、 ITaskbarList3 のインスタンスの取得方法が書いていなかった。
昔、こうした状況だと、グローバル関数でインスタンスを作成していたという記憶があるのだが、どうも対応する生成関数などが見当たらない。
Excel のインスタンスを取得する際は、 CoGetClassObject を使えばいいはず、ということから、関連で調べていくと、 単純に CoCreateInstance すればいいのではないかということになったのだった。
ようやく、コードが作成でき、以下のような関数を作成して呼び出すようにしてみた
上記コードはマーキースタイルのプログレス表示で、開始と停止があるだけなので、使い方も簡単である
開始 setup_taskbar_marquee(hWnd, true)
停止 setup_taskbar_marquee(hWnd, false)
できてみればさほど難しいコードではないのだが、最初がわかるまでは結構調べるのに時間がかかってしまうものだ
これで見た目も、最近のアプリっぽくなり (もう古いか?) めでたし、めでたし
完全仮想化方式のVPS
ネットワーク越しにファイル変換を行って、変換後のデータをもらい、ファイルに保存するという割と単純なものだが、ファイルサイズによっては時間がかかる場合もある。
そこでUI的に進捗状況を表示したいと思ったが、ダイアログ上にプログレスバーを表示するのは実装してみたが、何かしっくりこないので、別のインターフェースを模索していたら、Windows7以降で追加された、タスクバー上でのアイコンがプログレスバーのように変化するアプリがあるのを思い出し、まねをしてみようと思い立った。
WEBで検索してみると、ITaskBar3 インターフェースを使えばできそうということがわかった。
ITaskbarList3::SetProgressState
ところが、MSDNのどこにも、 ITaskbarList3 のインスタンスの取得方法が書いていなかった。
昔、こうした状況だと、グローバル関数でインスタンスを作成していたという記憶があるのだが、どうも対応する生成関数などが見当たらない。
Excel のインスタンスを取得する際は、 CoGetClassObject を使えばいいはず、ということから、関連で調べていくと、 単純に CoCreateInstance すればいいのではないかということになったのだった。
ようやく、コードが作成でき、以下のような関数を作成して呼び出すようにしてみた
void setup_taskbar_marquee(HWND hWnd, bool bStart)
{
CComPtrpUnk;
HRESULT hr = CoCreateInstance(CLSID_TaskbarList, NULL, CLSCTX_ALL, IID_ITaskbarList, (LPVOID*)&pUnk);
if (SUCCEEDED(hr)) {
CComQIPtrtbl(pUnk);
if (tbl) {
CComQIPtrtbl3(tbl);
if (tbl3) {
if (bStart) {
tbl3->SetProgressState(hWnd, TBPF_INDETERMINATE);
} else {
tbl3->SetProgressState(hWnd, TBPF_NOPROGRESS);
}
}
}
}
}
上記コードはマーキースタイルのプログレス表示で、開始と停止があるだけなので、使い方も簡単である
開始 setup_taskbar_marquee(hWnd, true)
停止 setup_taskbar_marquee(hWnd, false)
できてみればさほど難しいコードではないのだが、最初がわかるまでは結構調べるのに時間がかかってしまうものだ
これで見た目も、最近のアプリっぽくなり (もう古いか?) めでたし、めでたし
完全仮想化方式のVPS