>>494
うーん一応、途中でダウンロードの中止ボタンが押せるように
(a)のループはこんな感じで回しているのですが・・・。
  for (i=0;i<100;i++) {  // 1回だけだと再描画やキャンセルが鈍い
    if ( PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) ) {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
    }
  }

もう少し(b)の別スレッド方式も含めて検索してみます。