win32apiでこのプログレスバーを更新するにはどうすればよいですか?あなたはここで完全なコードを見つけることができますコードはここにあります
hProgress=CreateWindowEx(0, PROGRESS_CLASS, NULL,
WS_CHILD | WS_VISIBLE,
20, 20, 260, 17,
hwnd, NULL, g_hInst, NULL);
win32apiでこのプログレスバーを更新するにはどうすればよいですか?あなたはここで完全なコードを見つけることができますコードはここにあります
hProgress=CreateWindowEx(0, PROGRESS_CLASS, NULL,
WS_CHILD | WS_VISIBLE,
20, 20, 260, 17,
hwnd, NULL, g_hInst, NULL);
探しているメッセージはPBM_SETPOSです。これの使用法は、範囲が現在設定されているものによって異なります(デフォルトは0〜100)。たとえば、デフォルトの範囲を想定すると、位置を半分に設定すると、次のようになります。
SendMessage(hProgress, PBM_SETPOS, 50, 0);
または、プログレスバーをPBM_STEPITを介して段階的にインクリメントすることもできます。これの使用法は、ステップ増分が何であるかによって異なります(デフォルトは10)。たとえば、プログレスバーのデフォルトの範囲と初期位置を想定すると、位置を10にステップすることは次のように行われます。
SendMessage(hProgress, PBM_STEPIT, 0, 0);
メッセージを使用しPMB_STEPITて、ステップサイズに基づいて現在の位置を移動できます。
int max_range = 1000;
// set range of progress bar
SendMessage(hProgress, PBM_SETRANGE, 0, MAKELPARAM(0, max_range));
// set the step size
SendMessage(hProgress, PBM_SETSTEP, (WPARAM) 1, 0);
// increment by step size
SendMessage(hProgress, PBM_STEPIT, 0, 0);
これが良い例ですHow to Use Progress Bar Controls
共通のコントロールを初期化したと仮定します。
INITCOMMONCONTROLSEX InitCtrlEx;
InitCtrlEx.dwSize = sizeof(INITCOMMONCONTROLSEX);
InitCtrlEx.dwICC = ICC_PROGRESS_CLASS;
InitCommonControlsEx(&InitCtrlEx);
範囲を設定します。
SendMessage(hProgress, PBM_SETRANGE, 0, MAKELPARAM(min, max));
位置を設定します。
SendMessage(hProgress,PBM_SETPOS,pos,0);
参照:MSDNドキュメント
プログレスバーの進行状況を更新するだけでなく、再描画する機会も与える必要があります。通常、作業で忙しいために進行状況バーが表示されているため、通常のメッセージループは実行されておらず、WM_PAINTメッセージは生成されません。UpdateWindowすぐに呼び出してウィンドウを再描画できます。