サイトアイコン CAD日記

CEditでドラッグ&ドロップ

プログラミングから離れてしばらく経ってしまった。
プロジェクト管理をやっていると、プログラミングをやることができなくなる。
対人間の仕事の合間にプログラムをやることは、おいらには無理だった。
プログラミングはじっくりと腰を据えて取り組まなければならず、
途中で邪魔が入ると、効率が低下して最悪全てが破綻する恐れがある。
工程管理や関係者との折衝の合間に行えるものではないという結論に至った。
昔取った杵柄ではないが、今でもそれなりのプラグラムを書ける自信はある。
しかし、現役でバリバリとやっているメンバーにはかなわない。
配下に優秀なプログラマーがいるので、まかせておけば安心だ。
中途半端においらが手出しすると、おいらの仕事がまわらなくなるのだ。
一応、最低限の口出しはするようにしているけれど、
あまり言い過ぎるとボロが出るので注意が必要だ。
とは言え、たまにはプログラムをやらなければいけない状況がやってくる。
新人の指導である。
実践的なプログラミングをやったことのない人間に、プログラミングを教える。
VC++2005、MFCプログラミングだ。
.Netプログラミング全盛のこの時代に、MFCというのはやや時代錯誤な感はあるが、
これもうちの課に配属された宿命だと思ってあきらめてほしい。
いくつか出した課題のうちの1つ。
「エクスプローラからのドラッグ&ドロップを受け取るCEditコントロールをつくる」
昔作ったことがあるから、簡単にできると思ったら思わぬ落とし穴があった。
少しヒントを出して作らせておいたら、案の定うまくできない。
仕方ないから、こうすれば出来るんだよという正解例を自分で作ろうとしたら、
うまく動かなかった。
片手間にやる新人指導のつもりだったのに、本業がおろそかになる事態となった。
こんなはずではないのにという焦り、指導しているのに正解がわからないという屈辱。
その日にやらなければならないことを先送りして、約1時間の時間を費やしたが、
とうとうその日中に動くことはなかった。
こういうときは、一晩寝かせてみるに限る。
夜眠りに就く前に、ツラツラと考えていたら解決策に行き当たった。
翌日、ちょいちょいとプログラムを直したら動いた。
プログラミングっておもしろいな、と再確認した出来事だ。
前置きが長くなってした。本題に入ろう。
おいらがやっていたときの開発環境はVC++6.0だった。
2005にしてしばらくのあいだはプログラムをやっていたのだが、
使いこなすまでには至らなかったのだ。
ダイアログテンプレートの作り方、クラスや変数の追加方法が大きく異なる。
片や日本語、片や英語、全然言葉も異なるので、両者がつながることがなかった。
【VC6の場合】
VC6のプロパティ
【VC2005の場合】

もちろん、これでだけで目的を果たすことはできない。
概要は以下の通り。
・CEditを基本クラスとするサブクラス「CMyEdit」を作成する
・CMyEditでドロップメッセージを受け取るために、OnDropFilesをオーバーライドする
・OnDropFiles内で、ファイル名を取得してSetWindowTextで自分に貼り付ける
ネタ元はこちら。
ただし、ネタ元における以下処理は、不要のようだ。
CDropDlg::OnInitDialog() 内の、m_MyEdit.SubclassDlgItem(IDC_MY_EDIT,this); 
何を意味する処理なのかよくわからないが、これを実行すると死ぬ。

モバイルバージョンを終了