いまさらのWindowsCEプログラミング(8) - カーソル
WindowsCEのAPIはWin32 APIのサブセットですが、デバイスの特性によってどうしてもWindowsと異なる部分があります。
今回はWindowsCE特有の対応が必要な例として、カーソルを取り上げます。
砂時計カーソル
Windows の場合
WindowsのMFCで砂時計カーソルを出す簡単な方法は、ブロック内でCWaitCursorを定義することです。ブロックを抜けると変数が開放され、自動的にカーソルが元に戻ります。
(1)ブロック内でCWaitCursorを宣言する方法。 { CWaitCursor wait; // 時間のかかる処理 }
もうひとつの方法は、SetCursor()で明示的にカーソルを設定し、元に戻す方法です。
(2)SetCursor()でカーソルを設定する方法。 HCURSOR rc = SetCursor( AfxGetApp())->LoadStandardCursor( IDC_WAIT ) ); // 時間のかかる処理 SetCursor(rc); // 保存したカーソルに復帰
(1)(2)とも、Windowsでは正しいプログラムです。ところがWindowsCEで実行すると、(1)(2)共、砂時計カーソルが消えずに表示されたままになります!
(2)の例で、最初のSetCursor()は変更前のカーソルのハンドルを返します。ところがWindowsCEではカーソルが普通は表示されていないため、NULLが返ってきます。2番目のSetCursorではカーソルハンドルにNULLを指定することになるため、実際には何も起きず、砂時計カーソルが表示されたままになるというわけです。