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されるという処理で良いのではないかという神のお告げがあった(汗)。今日、仕事から帰ったら試してみよう。