(for Internet Explorer)
マウス操作
関連
キャンバス座標
クライアント座標
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°ではなく)回転した図形の基準位置からの差分が入ります。
text
text
左ボタン押す
左ボタン離す
ダブルクリック編集モードでは
text
左ボタン押す
左ボタン離す
左ボタン離す
text
左ボタン押す
ソース
/* インライン・エディタを起動する */
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
ダブルクリックでテキストを生成する
何もないところをダブルクリックドラッグしたら矢印を引く
src
data
result
main.cpp
log
左ドラッグ中に右ボタンを押したときや、
右ドラッグ中に左ボタンを押すと、
ドラッグを中断します。
テスト
OnRButtonDblClk
CChildView::OnLButtonDown
OnLButtonDblClk
OnLButtonUp
OnLButtonUp_Create
OnLButtonUp_DlagCanvas
OnLButtonUp_DblDlagPrim
OnMouseMove
OnRButtonDown
OnRButtonUp
m_bDrag
クラス名が無いものは、すべて CChildView クラス
m_bDblDrag
m_bInDragPlay
m_bRightMenuAble
m_bRightDrag
CChildView::OnDragLink
CChildView::OnDragMove
CChildView::OnDragCopy
右ドラッグによる移動かコピー
右クリックメニューを表示する
右ドラッグメニューを表示する