ドラッグ&ドロップ
ハイパーリンク
関連
ドラッグ&ドロップの操作方法は、直感的なので、説明しません。
ここには、ソースの情報のみあります。
CChildView::OnDragOver
/* フォーマットによって、ドロップ可能か判定する */
switch ( dwKeyState & (MK_CONTROL | MK_SHIFT) )
frame->m_bAppBarMode
IEの左上アイコン
IE等のテキスト
[ ソース ]
CChildView::m_OleDragData
CChildView::m_OleDragPrim
CChildView::m_OleDrag_bLinkPrim
CChildView::m_OleDrag_bIdPrim
CChildView::m_DropEffectDef
CChildView::m_DropEffectMask
クリップボードの内容は、あらかじめ
CChildView::OnDragEnter で以下の変数へ
格納しておく
Cats図形 id なし
何も押さない
ときの effect
移動
コピー
リンク
移動
○
○
○
(ドロップしたら
ID入力)
ファイルやフォルダ
リンク
○
○
○
リンク
×
×
○
コピー
×
×
○
Cats図形 id あり
リンク
○
○
○
Cats図形 BAR へ
id あり、1つ
○
○
○
リンク
Cats図形 BAR へ
その他
コピー
○
○
○
Cats図形 BAR から
×
○
○
移動
(Cats図形は、すべての
種類で同じ)
[ テスト ]
画像ファイル
コピー
○
○
○
Cats図形 Viewer から
○
○
○
コピー
/* ドラッグドロップを行う */
DoDragDrop
ドラッグした図形を prims に退避
エクスプローラへドロップした場合、
リンク先のファイルが無ければ削除する
ドロップ後
ドラッグ開始前
ドラッグ中
ドラッグ&ドロップデータ:URL とファイルについて
ドラッグ&ドロップデータ:インクについて
ドラッグ&ドロップデータ:図形について
CChildView::OnMouseMove
別の SVG Cats ウィンドウに移動したとき、削除する
(同じウィンドウに移動したときは、ドロップしたときのハンドラで削除します)
CChildView::OnDrop
CChildView::OnDropEx
CChildView::OnDragEnter
CChildView::OnDragOver
CChildView::Paste
CChildView::RemoveShortcuts
CChildView::OnMouseMove
一度外に出て戻ったとき
/* 普通のファイル
/* SVG Cats の図形
/* Internet Explorer
CMainFrame::InkPaste
CMainFrame::DropFile
/* 画像を追加する */
/* リンクを追加する */
SVG ファイルを開く */
画像ファイル
OLE右ドロップ
OLE左ドロップ
コピー、移動、ショートカットの選択
CMainFrame::InputNewSubName
id がなかったら入力
CChildView::OnDrawWait
CMainFrame::OnPasteShortcut
PostMessage
CMainFrame_NewSubName
CChildView::OnCopyData
ドラッグ元へIDを反映
キャンバスメニューから:
→ OLE Drag Drop (Programming)
参考
/* テキストがドロップされたとき(1) */
(2)
別のウィンドウの間で、ドラッグ&ドロップするときは、OLE ドラッグ&ドロップを使います。
フォーマットの解析
CChildView::
m_DropEffectDef
m_DropEffectMask
CChildView::PasteText
コピー
ショートカット
ドラッグ中
ドロップ直後
false を返すと、DoDragDrop の返り値は 0 になります。
同じウィンドウ内なら、貼り付ける前に消す
関連
CChildView::OnDragEnter
で、ドロップされた OLE オブジェクトの型を判定して、
CChildView::m_DropType に格納します。
SVGCats_ClipFormat
SVG Cats の図形
インターネット URL
ファイルグループ?
ローカルファイル
その他テキスト
m_DropType の値
意味
関連
テストケース
普通の Web ページの本文(テキスト)をドラッグ&ドロップする。
ドロップ先は、キャンバスと、エディタ。
パス条件
ドロップしたテキストが表示されること
[ 06.10.28 ]
テスト手順
→ テストフォルダ
a.bat を実行します。 (a.svg が開きます)
・
漢字が URF-8 フォーマットの Web ページを開きます。
・
本文(黒い文字)を選択して、キャンバスにドロップして、テキストができることを確認します。
[ 06.10.28 ]
・
アンドゥ・リドゥができることを確認します。
・
[ 06.10.28 ]
エディタを起動して、(黄色い枠のテキストをクリックして)、エディタ内のすべてのテキストを
選択状態にします。
・
[ 06.10.28 ]
・
アンドゥ・リドゥができることを確認します。
・
[ 06.10.28 ]
本文(黒い文字)を選択して、エディタに(選択状態のテキストの途中、「ここ」の部分に)
ドロップして、テキストができることを確認します。
選択状態だったテキストが、消えていないことを確認します。
アプリケーションを終了します。
・
[ 06.10.28 ]
テストケース
OLE ドラッグ&ドロップを行う。
別ウィンドウへ、同じウィンドウへ、エクスプローラへ。
移動、コピー、ショートカット作成。
パス条件
コピー: 移動元があること。 アンドゥ/リドゥできること
移動: 移動元がなくなっていること。 アンドゥ/リドゥできること
ショートカット作成: リンク先を開くことができること。 アンドゥ/リドゥできること
テスト手順
[ 07.01.10 ]
test1_2 フォルダ
ドロップ先(b.svg)を開き、そこへコピー、移動、ショートカットの作成をして、
パス条件を満たすか確認します。
を開き、a.bat を実行します。 (a.svg が開きます)
ドラッグするテキストを、a.svg のウィンドウから一度出し、再び a.svg に
コピー、移動、ショートカットの作成をして、パス条件を満たすか確認します。
[ 07.01.10 ]
[ 07.01.10 ]
新規に任意のファイルを作成し、a.svg に移動します。
そのファイルが、ファイル格納用フォルダ(a.files フォルダ)に入っていることを
確認します。
そのファイルへのリンクテキストを、エクスプローラ(任意のフォルダ)にコピー
して、ショートカットができること。 また、パス条件を満たすこと。
エクスプローラに移動して、同様にパス条件を満たすこと。
[ 07.01.10 ]
エクスプローラへ
同じページへ
別の SVG ファイルへ
異なるページへ
ドラッグするテキストを、同じ SVG ファイルの別のページに、コピー、
移動、ショートカットの作成をします。(移動は未対応なのでコピーに変わります)
パス条件を満たすか確認します。
[ 07.01.10 ]
CChildView::OnDragLink
ショートカットを作成する
CChildView::OnDragMove
m_DragMenu
CChildView::OnRButtonUp
CChildView::OnDragCopy
コピーする
移動する
class COleDropTarget2 : public COleDropTarget
CMainFrame::OnDragEnter
CMainFrame::OnDragOver
CMainFrame::OnDragLeave
CMainFrame
OLEメッセージ
エクスプローラ以外がアクティブの状態から、エクスプローラからドラッグを開始すると、
開始前にアクティブになっていたウィンドウをアクティブにしてしまうため、SVG Cats の
上で待ってもウィンドウを手前に持ってこれない。
エクスプローラがアクティブなら、その問題は無い。
ドラッグ中に、SVG Cats のウィンドウの上で少し停止すると、そのウィンドウがアクティブ
になります。
URL/onclick
リンク先のアドレス、URL
# に続いて、id を指定可能(詳しくは HTMLヘルプへ)
target
""=同じウィンドウで開く、"_blank"=新しいウィンドウで開く
"_top"=全体のフレームで開く(SVG ビューアのみ有効)
id
ファイルの中でどの図形にリンクするか決めるための識別子
ファイル
1=ファイルとして扱う、0=ショートカットとして扱う。
例: 1=図形を削除したらファイルも削除する
IShellLink
IPersistFile
・ファイルにリンクしているだけのショートカットは、そのリンク先を URL にします。
・実行ファイルにリンクして、パラメータの付いているものは、そのショートカット
ファイルを URL にします。
CChildView::OnLButtonUp_DlagPrim
/* URL があればハイパーリンクを開く */
CMainFrame::OnOpenLink
CMainFrame::OnOpenLinkR
/* 右メニューから「開く」 */
CMainFrame::OnOpenLinkNewWndR
/* 右メニューから「新しいウィンドウで開く」 */
OnOpenLinkFolder
OnOpenThisFolder
OnOpenFilesFolder
WinX_openFolder2
/* 現在位置を履歴に残す {History} */
/* 編集していたら、保存する */
/* ファイルダイアログからファイルを選ぶ */
/* 同じファイルのリンク先を選択する */
/* インターネット・ブラウザで開く(1) */
/* フォルダを開く */
/* SVG ファイルを開く */
/* その他のファイルを開く */
/* リンク先を開いたら元のウィンドウを閉じる */
CSVGCatApp::OpenSub
→ リンク補修
図形のURL属性にアドレスやパスを設定すると、その図形をクリックするだけでジャンプ
することができます。
普通のテキストはクリックするだけで、テキストの編集が始まりますが、
ハイパーリンク付きテキストを編集するときは、右クリックしてから左クリックします。
Windows のショートカットファイルは、IShellLink、IPersistFile を使ってアクセスします。
関連
ウィンドウ左上の
で、ハイパーリンクする前の場所に戻ったり進んだりできます。
関連
CMainFrame::OnHistoryBack
CMainFrame::OpenSub
ListX CMainFrame::m_Historys
/* 現在位置を履歴に残す */
戻るパスの取得もここ
CCatsHistory
CCatsHistPage
char path[ ]
int iPage, zoom, zoomMode
POINT offsetXY
1つのウィンドウに複数の履歴を持つことがあります
履歴
場所
*
*
/* 履歴が所属するフレームを変える */
CMainFrame::NewHistory
CMainFrame::AddHistory
CMainFrame::RemoveHistory
CMainFrame::RemoveAllHistorys
ウィンドウに新しく1つの履歴を生成します
履歴を追加します
履歴を削除します
ウィンドウのすべての履歴を削除します
1 Start
←テスト仕様は、テストファイルに記述
デバッグするときは、CMainFrame::PrintAllHistory を呼び出します。
CSVGCatApp::OpenSub
一般のプログラムでは、URL のサブアドレス(# より後)をファイルのパスではないように処理しません。
そこで、サブアドレス付きの URL へのリンクがあるテキストなどをクリックしたときだけ起動する特別な
プログラムを指定できるようになっています。
ただし、拡張子が .htm? の URL では上記のプログラムは起動しないで、ブラウザが起動します。
[view]
SearchOpen = """C:\Program Files\search_open\search_open.exe"" ""%1#%2"""
\svgcats.ini
[view] セクションの最後に SearchOpen を追加
SnapNote を終了させてから編集してください
svgcats.ini ファイルの編集は、SnapNote を終了させてから行ってください。
SearchOpen の設定値は、実行するコマンドラインです。
%1 は、# より前、%2 は、# より後に置換されます。
CSV と同様に " は "" で表現し、全体を " " でかこみます。
・新規リンクページ(page_deafult.svg なし、あり)
ファイルをドロップまたはペーストで、移動やコピーしたとき、ファイル属性=1 にする。
ファイルをドロップまたはペーストで、ショートカットを作成したとき、ファイル属性=0 にする。
ファイル属性=1の図形を、コピーしたとき、リンクしているファイルもコピーする。
ファイル属性=1の図形を、移動したとき、リンクしているファイルも移動する。
ファイル属性=1の図形から、ショートカットを作成したとき、リンクしているファイルはそのまま。
新しいファイル名が重なったとき : 元ファイル名_2 のように数字をつける。
ファイル
SVG
移動か
コピー
したら
ファイル
移動か
コピー
リンク
.files フォルダ
移動か
コピー
.files フォルダ
リンク
ファイル
移動か
コピー
したら
00000000_file_元ファイル名_X
work フォルダ
ファイル
.files フォルダ
カットしたら、
移動かコピー
ファイル
.files フォルダ
閉じたら
移動かコピー
カットでは
なにもしない
削除
ファイルと直接リンク
未対応
・ファイルをドロップ(コピー)
・ファイルをドロップ(移動)
・ドラッグ&ドロップによるコピー
・ドラッグ&ドロップによる移動
・コピー&ペースト
・カット&ペースト
main.cpp
テストフォルダ
位置がおかしい
(2)はつけない