キャンバス座標
クライアント座標
SVGファイルの座標
ズームやスクロール位置に関係ない
CChildView の座標、スクリーンと同じズーム
印刷時は、紙の座標(マージンあり)
pt = GetScrollPosition();
point += pt;
point -= m_MinusOffset;
point.x = point.x * 100 / m_Zoom;
point.y = point.y * 100 / m_Zoom;
pt = GetScrollPosition();
point.x = point.x * m_Zoom / 100;
point.y = point.y * m_Zoom / 100;
point -= pt;
point += m_MinusOffset;
CChildView::GetDrawParam
関連
キャンバス内のドラッグは、OLE ドラッグ&ドロップを使いません。
m_HoldPrim->MoveByHandle( m_iHoldHandle, point.x + m_Hold_dx + dx, point.y + m_Hold_dy + dy,
GetHitHandleNum で取得した、ハンドルの基準位置からのずれ。(下記)
m_Hold_dx、m_Hold_dy
MoveByHandle を呼び出している箇所 →
CChildView::OnMouseMove
/* 1つの図形を移動または修正する */
グリッドオフ: AutoAdjustXY で取得した自動補正に必要なずれ
グリッドオン: Canvas::ChgToGridedPos で取得した自動補正に必要なずれ
dx, dy
GetHitHandleNum でマウスカーソルとハンドルの位置関係を求め、MoveByHandle に指定します。
CChildView::OnMouseMove
MoveByHandle 内部
(回転角 0°)
MoveByHandle
に渡す位置
(回転した図形)
m_Hold_dx、m_Hold_dy (キャンバス座標系)
参考
CChildView::OnMouseMove
/* 複数の図形を同時に移動する */
Canvas::ChgToGridedPos
グリッドに合わせる座標への差分
CChildView::AutoAdjustXY
自動補正が効いたときの座標の差分
m_PrevX = point.x + m_Hold_dx;
m_PrevY = point.y + m_Hold_dy;
dx = point.x + m_Hold_dx + dx2 - m_PrevX;
dy = point.y + m_Hold_dy + dy2 - m_PrevY;
((CadPrim*)p->p)->Move( dx, dy );
前回の OnMouseMove の位置
グリッドオフ:
グリッドオン:
dx2, dy2
移動
m_Hold_dx, m_Hold_dy
CSVGCatApp::GetNearestHandle
マウスの位置を原点とした移動用ハンドルの位置
…
差分は、キャンバス座標系です。
図形が回転しているときは、(0°ではなく)回転した図形の基準位置からの差分が入ります。
TabletPC ではダブルクリックの1発目と2発目で位置がずれる可能性が高いため、
OSのデフォルトより広めにずれてもダブルクリックにする。
CChildVIew::OnLButtonDown
abs( m_DownS.x - point.x ) + abs( m_DownS.y - point.y ) < 16
あまりにずれてもダブルクリックにした場合、テキストエディタを Disable にするクリックをして、
別の図形を選択するためのクリックが早いときに、意図と異なる。
/* 選択解除後のダブルドラッグを矢印生成にしない */
選択解除のためにキャンバスをクリックしたのは、次のダブルドラッグを矢印生成にしない
m_ClickUpTime1
m_ClickUpTime2
m_DblClickCount
m_bDblClickCountIsFromCancel
アプリが認識しているクリック。1=シングルクリック、2=ダブルクリック。
m_DblClickCount は、テキストエディタを Disable したときのものが
含まれているかどうか。
前回の左ボタンを離した時刻
前々回の左ボタンを離した時刻 (現在は使われていない?)
テキストエディタを Disable したとき、そのテキストを選択状態にするが、そのままドラッグすると、
選択した図形を動かす状況と同じになってしまうため、m_bDblClickCountIsFromCancel で識別する。
CChildView::OnMouseMove
/* 選択解除後のダブルドラッグは範囲選択 */
CChildView::OnMouseMove
/* エディタから抜けたときにキャンバスをドラッグしたとき、選択図形を動かさない */
シングルクリック編集モードでは
text
text
左ボタン押す
左ボタン離す
左ボタン押す
左ボタン離す
文字を生成するとき
左ボタン押す、離す、押す
左ボタン離す
変わらず
GetDoubleClickTime (Win32API) より短いかどうかで、シングルクリックとダブルクリックの
違いを判定します。
CChildView::OnLButtonUp_DblDlagPrim
ダブルクリック・ドラッグで終点が決定したとき
CChildView::OnLButtonDblClk
ダブルクリックでテキストを生成する
何もないところをダブルクリックドラッグしたら矢印を引く