2006年03月09日

針は掴めるようになりましたが…

針を掴んでぐりぐり動かすところまでは割と簡単にできました。でも、予想していた問題に加えて予想外の問題も同時に発生。なかなか前途多難です。針を掴むのは予想通り簡単でした。針の形状は CPoint 構造体に格納してありますので、これを元にリージョンを作成します。


    CRgn rgnTarget;
    rgnTarget.CreatePolygonRgn(m_ptHourHand, POINT_MAX_HOUR, ALTERNATE);


このリージョンに対してマウス座標を PtInRegion してやります。結果が TRUE なら範囲内ということになります。短針を掴んだのならターゲットを時針に、長針を掴んだのならターゲットを分針にセットします。


    if (rgnTarget.PtInRegion(point)) {
        m_enMouseTarget = eTARGET_HOUR;
    }


たったこれだけです(笑)。

さて、予想していた問題とは長針が 0 時近辺を行き来すると時針がいきなり1時間進んだり戻ったりすることです。これの問題解決は今日は思いつきませんでした(D3DXライブラリを使えば出来ますが…)。あと、予想外の事として、例えば、現在時刻 12:30 の時針を掴んだとします。30分ですので、当然短針の位置は時計盤の目盛りの中間地点を指します。すると、5時を選択しても短針の位置は中間位置に移動するため、時間を正しく合わせたか不安になります。

一番簡単に解決する方法は、中間的なズレの表示を無くすことです。その代わり代償として 11:59 の時に一見すると 11:00 に見えてしまうという問題が起きてしまいます。理想は選択中はデジタル的な針の動きをして決定すると本来位置に移動する…かなあ。むーぅ。

2006/03/09 08:00追記
朝起きたら、ふと、新しい分針角度から前の分針角度を引いて±180度を超えていたら時針が±1されるという処理で良いのではないかという神のお告げがあった(汗)。今日、仕事から帰ったら試してみよう。
posted by VALGUS at 00:36| Comment(0) | TrackBack(0) | Windows
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/5637008
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック