2002/02/28 update.
その他のC-Partsを使用するにあたっての注意事項です。
- イベントループ内で他のイベントループを呼ばない
「CPWindow::DoModal」よるモーダルダイアログのイベントループ内で、(コールバック関数内から)別のイベントループは呼ばないようにしてください。
処理が正常に行われなくなる可能性があります。
例えば、「CPWindow::DoModal」でイベントループに入り、プッシュボタンが押されたらShadeの「dialog_interface::ask」を呼び出す、などは行わないようにしてください。
「CPWindow::DoModal」でのイベントループ内で、別の「CPWindow::DoModal」を呼び出すのは問題ありません。
- コールバック関数内での時間のかかる処理は避ける
コールバック関数内では、時間のかかる処理は行わないようにしてください。全体的なパフォーマンスが落ちることになります。
- 「CPWindow::DoModal」中に属しているGUI部品をClearしない
「CPWindow::DoModal」でモーダルダイアログのイベントループが行われているときに、属しているGUI部品の「Clear」メソッドを呼んで解放する、オブジェクト自体をdeleteする、ということは行わないでください。
C-Partsでのウィンドウ(またはグループ)に属するGUI部品は、実体は個々のGUI部品のものを使っています。ウィンドウ(またはグループ)は、GUI部品の位置情報(ポインタ)を保持しているだけです。
- 「CPImage::LoadImage」でのJPEG画像の読み込み
「PhotoShop LE」にて、プログレッシブ以外で保存したJPEGファイルを「CPImage::LoadImage」で読み込んだ場合に、落ちてしまいます。
JPEGの読み込みで使用しているIJGの「libjpeg」内で、エラーになっているようです。
- CPThreadでのスレッド使用時の注意点
Ver1.10から追加されたスレッド機能(CPThread)を使用する場合は、 ウィンドウが閉じられるとき・Shadeが終了するとき、などの
リソースが破棄される段階では、 必ずスレッドのループは終了して抜けている必要があります。
そうでないと、動作が不安定になる可能性もありますので、ご注意ください。
- ループ内でのRepaint処理
Mac OS Xにおいて、ループをforで回してコントロールの再描画をする場合(例えば、処理の経過をCPProgressBarで視覚化する、など)、
途中経過が描画できません(描画処理自体がイベントのキューにプッシュされてしまい、
ループを抜けてからしか描画が働かないようです)。
このような、連続再描画をかける場合は、そのループ処理自体をスレッドに入れて処理するようにしてください。