ファイルに落としても良いなら、multipart/relatedの子パートをそれぞれファイルに落として、htmlファイルにIWebBrowser2::Navigate2で移動し、IDocHostUIHandler::TransformUrlを実装して、cid:...を実際のファイル名にして返すというのが一番簡単だと思われます。
メール送受信の巡回って、シリアルにやっているけれど、最近は線も太いんだから、パラレルにやっちゃっても問題ない気がする。
が、QMAILの場合、ステータスバーに状況を出しているので、パラレルにやっちゃうと進歩状況を表示するのが難しくなってしまう。パラレルに巡回するならモードレスダイアログを出してプログレスバーをいっぱい出すという方向か?。モードレスダイアログを出すのはあまり好きではないのだけれど。。。
IInternetProtocolを実装してみた。
About Asynchronous Pluggable Protocolsが参考になる。
本来は、非同期で動作する用にあるのでちょっと面倒なんだけれど、今回はメモリからロードするのにスレッドを起こしても意味ないので、同期的にやってしまうことに。
なので、
1. IInternetProtocol::Startの中でIInternetProtocolSink::ReportDataを呼び出す(呼び出すと呼び出しから戻る前に、IInternetProtocol::Readが呼ばれる)。
2. 最初のReadの呼び出しの中で、IInternetProtocolSink::ReportProgressを呼び出してMIMEタイプを通知。
3. Readが何回か呼ばれて、1のReportDataの呼び出しから戻ったら即、IInternetProtocolSink::ReportResultを呼び出す(これを呼び出さないとインターフェイスを開放してくれない)
という感じ。これでいいのか?
とりあえず、インラインイメージの表示とかは問題なくできた。
これはやっちゃダメ