○ドラッグアンドドロップが可能なテキストボックス
サブクラス化により実現します。

@テキストボックスを貼り付けてプロパティにてドラッグアンドドロップを可能にします。

Aテキストボックスの差し替えるプロシージャ―を書きます

WNDPROC wproc0;
LRESULT CALLBACK EditProc(HWND hWnd,UINT msg,WPARAM wp,LPARAM lp){
    if (msg == WM_DROPFILES) {
		char filename[1024]="";
		DragQueryFile((HDROP)wp,0,filename,1024);//ドラッグされた0個目です。
		SetWindowText(hWnd,filename);
    }
	return CallWindowProc(wproc0,hWnd,msg,wp,lp);
}

Bプロシージャのアドレスの入れ替え←サブクラス化

HWND hEdit = GetDlgItem(hDlg,IDC_EDIT1);
wproc0 = (WNDPROC)GetWindowLong(hEdit,GWL_WNDPROC);//プロシージャアドレスを取り出して
SetWindowLong(hEdit,GWL_WNDPROC,(LONG)EditProc);//新しいプロシージャ―に入れ替えます

■以上でドラッグアンドドロップによりファイルパスを表示するテキストボックスができます。

べつにテキストボックスでなくてもダイアログでもなんでもいいんですけどね。
その時はダイアログプロシージャーのところを似たように書き換えるだけです。


▲トップページ > Windows と C++