|
bool | CanDragging (void) const |
| [取得] ドラッグモード取得. [詳解]
|
|
bool | CanDropping (void) const |
| [取得] ドロップモード取得. [詳解]
|
|
| CDragAddinT (void) |
| コンストラクタ [詳解]
|
|
WORD | GetDragGroupID (void) const |
| [取得] ドロップグループID取得 [詳解]
|
|
void | GetDropTargetMark (const IDrawable *&_draw, COLORREF &_color, int &_thick) const |
| [取得] ドロップ先のマーク設定取得. [詳解]
|
|
DWORD | GetExStyle (void) const |
| [取得] ウィンドウ拡張スタイル取得. [詳解]
|
|
HWND | GetSafeHwnd (void) const |
| [取得] ウィンドウハンドル取得. [詳解]
|
|
DWORD | GetStyle (void) const |
| [取得] ウィンドウスタイル取得. [詳解]
|
|
BOOL | ModifyStyle (DWORD dwRemove, DWORD dwAdd, UINT nFlags=0) |
| [設定] ウィンドウスタイル変更. [詳解]
|
|
BOOL | ModifyStyleEx (DWORD dwRemove, DWORD dwAdd, UINT nFlags=0) |
| [設定] ウィンドウ拡張スタイル変更. [詳解]
|
|
void | SetDraggingBitmap (CBitmapHandle bmp) |
| [設定] ドラック中ビットマップ設定. [詳解]
|
|
void | SetDragGroupID (WORD w) |
| [設定] ドロップグループID設定 [詳解]
|
|
void | SetDragMode (bool can) |
| [設定] ドラッグモード設定. [詳解]
|
|
void | SetDropMode (bool can) |
| [設定] ドロップモード設定. [詳解]
|
|
void | SetDropTargetMark (COLORREF color, int thick=0) |
| [設定] ドロップ先のマーク設定. [詳解]
|
|
template<typename T > |
void | SetDropTargetMark (const CDragAddinT< T > &other) |
| [設定] ドロップ先のマーク設定. [詳解]
|
|
void | SetDropTargetMark (const IDrawable &draw) |
| [設定] ドロップ先のマーク設定. [詳解]
|
|
BOOL | SetWindowPos (const CWnd *pWndInsertAfter, int x, int y, int cx, int cy, UINT nFlags) |
| [設定] ウィンドウサイズポジション設定. [詳解]
|
|
BOOL | ShowWindow (int nCmdShow) |
| [設定] ウィンドウ表示状態. [詳解]
|
|
| ~CDragAddinT (void) |
| デストラクタ [詳解]
|
|
template<typename TYP = CStatic>
class TNB::MFC::CDragAddinT< TYP >
ドラッグコントロールアドインクラス
本クラスを使用すると、ドラッグすることが可能になります。
ドラック開始時、ドラッグ中止時、ドロップ時にメッセージを親に通知します。
通知メッセージは以下のようになります。 \n
message = MSG (テンプレートの引数リスト、参照) \n
WPARAMの上位WORD = グループID( SetDragGroupID() 参照)。\n
WPARAMの下位WORD = 通知種別( CDragAddinT::EDragNotifyCode ) 。 \n
LPARAMの上位WORD = 相手コントロールID (コマンド種別がドラック開始やキャンセルの時は0固定)。 \n
LPARAMの下位WORD = ドラックコントロールID 。 \n
※通知種別 ISDROP は、普通のコントロールだけど、ドロップ対象にしたい場合に使用します。
- 覚え書き
- 上位WORDは HIWORD() マクロを使うと便利です。
-
下位WORDは LOWORD() マクロを使うと便利です。
- ポイント:
- ドロップ対象コントロールについて。
ドロップ可能のコントロールは、メッセージで応答したものが対象になります。
まず、本クラスをアドインしたコントロールをドラッグすると、マウス下にあるコントロールに GetDragNotifyMessage() で得られるメッセージを SendMessage します。その際、 WPARAM の下位WORDには CANDROP 、上位WORDには グループID、LPARAM は TDropParam のポインタが入っています。 コントロールが 1 で応答すると、ドロップ可能なコントロールと判断します( TDropParam には、 コントロールの領域やIDが入っており、変更も可能)。
また、コントロールが 0(拒否・未サポート)を返した場合、親ダイアログに、 通知種別 = ISDROP で 通知メッセージを送ります。これにより標準のコントロールもドロップ対象にすることが可能です。
なお、 本クラスをアドインしたコントロールは、上記メッセージに対応しており、 SetDropMode() で、ドロップ許可、拒否の設定、 SetDragMode() でドラッグ許可、拒否の設定が可能です。
- 使用例
//= 宣言
typedef CDragAddinT<CStatic> CDragStatic;
;
class CXXXX : public CDialog
{
;
CDragStatic m_dragText; // <- 元々 CStaticだったメンバを書き換えた
;
afx_msg LRESULT OnDroped(WPARAM wParam, LPARAM lParam);
;
//= 設定(グローバル)
static UINT s_uDropMessage = CDragStatic::GetNotifyMessage();
BEGIN_MESSAGE_MAP(CXXXX, CDialog)
//{{AFX_MSG_MAP(CMfcTestAppDlg)
;
//}}AFX_MSG_MAP
ON_REGISTERED_MESSAGE(s_uDropMessage, OnDroped) //←追加
END_MESSAGE_MAP()
//= 処理(OnDroped() 内)
LRESULT CXXXX::OnDroped(WPARAM wParam, LPARAM lParam)
{
switch( LOWORD(wParam) )
{
case CDragStatic::START: // ドラック開始
TRACE1("ID = %d をドラッグ開始", LOWORD(lParam));
break;
case CDragStatic::CANCEL: // キャンセル(ドラック終了)
TRACE1("ID = %d のドラックを中止", LOWORD(lParam));
break;
case CDragStatic::INVALID: // 無効(ドラック終了)
TRACE1("ID = %d は許可できないところへドロップ", LOWORD(lParam));
break;
case CDragStatic::DROP: // ドロップ(ドラック終了)
TRACE2("ID = %d から %d へドラッグ", LOWORD(lParam), HIWORD(lParam));
break;
case CDragStatic::HOVER: // ホバー(ドラック中)
TRACE2("ID = %dが%dの上", LOWORD(lParam), HIWORD(lParam));
break;
case CDragStatic::LEAVE: // ホバー終了(ドラック中)
TRACE2("ID = %dが%dの上からはなれた", LOWORD(lParam), HIWORD(lParam));
break;
case CDragStatic::ISDROP: // ドロップ確認
TRACE2("ID = %dが%dの上へ。IDOK ならドロップ可能に", LOWORD(lParam), HIWORD(lParam));
return HIWORD(lParam) == IDOK;
}
return 0;
}
|
- 引数
-
TYP | 要素の型。CWnd のサブクラスである必須があります。 |
- 必要ファイル
- TnbMfcDrag.h
- 日付
- 07/10/11 新規作成
-
07/10/16 専用メッセージに変更。
-
07/10/26 INVALID 通知を追加。
-
07/10/31 画像取得方法を変更。
-
07/11/14 リスナー、装備。 ドロップ可能のアイテムにマークをつけられるようにした。
-
07/12/06 ドロップ対象の登録方法を変更。
-
07/12/25 ドロップマーク指定方法、追加。 Listener 廃止。
-
08/03/04 Drag中の 破棄時に、Drag状態を解除するように修正。
-
09/04/15 Leave時、コントロール再描画処理を最適化。
TnbMfcDrag.h の 124 行目に定義があります。