ここから本文です

Visual C++ MFCのマウスイベントに関する質問です。 プログラミング初心者です。 ...

hin********さん

2018/12/3015:46:46

Visual C++ MFCのマウスイベントに関する質問です。
プログラミング初心者です。

ダイアログ画面に配置したボタンやテキストボッククスをドラッグ&ドロップする処理を実装したいです。

ダイアログ画面自体にマウスイベント(OnLButtonDownやOnLButtonUPなど)を実装することができたのですが、コモンコントロールや描画した画像などにマウスイベントを実装する方法が分からなくて大変困っています。

どなたか教えて頂けませんか?

閲覧数:
114
回答数:
3
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

bul********さん

2018/12/3022:12:37

「ボタンやテキストボッククス "を" ドラッグ&ドロップする」というプログラムは作った事がないので、適切な回答はできませんが、コントロールのマウスイベントならサブクラス化すれば可能だと思います。

例えば、まず CEdit クラスから派生させたクラスを定義します。
class CmyEdit : public CEdit
{
/* ... */
};

次にダイアログクラスに変数を定義します。
class CxxxDlg : public CDialogEx
{
/* ... */
CmyEdit m_edit;
};

エディットコントロールをサブクラス化します。
BOOL CxxxDlg::OnInitDialog()
{
/* ... */
m_edit.SubclassDlgItem(IDC_EDIT1, this);
// IDC_EDIT1 はサブクラス化するエディットコントロールのID
}

CmyEdit でイベントをハンドリングします。
クラス ウィザードを使えば関数は自動的に追加してくれます。

かなり大雑把ですが、こんな感じでできます。

  • 質問者

    hin********さん

    2018/12/3023:42:32

    ご教示ありがとうございます。

    教わった通り、コードを書いたところ

    BOOL CxxxDlg::OnInitDialog()
    {
    /* ... */
    m_edit.SubclassDlgItem(IDC_EDIT1, this);
    // IDC_EDIT1 はサブクラス化するエディットコントロールのID
    }
    のIDC_EDIT1に赤線が引かれ、エラー文に”識別子にIDC_EDIT1が定義されていません”と出るのでます。どこかにIDC_EDIT1を宣言する必要があるみたいです。 これはどのように対処するべきでしょうか?

    宜しくお願い致します。

  • その他の返信(3件)を表示

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜2件/2件中

並び替え:回答日時の
新しい順
|古い順

dfz********さん

2018/12/3023:07:29

MFCで作るからそんな事になるのです
”WIN32アプリケーション→空のオブジェクト”で作ればあっという間に実装できます

何でわざわざ一部の機能しか使えないMFCで作るのかが分かりません
全機能がフルで使えるWIN32アプリケーションで作ればいいだけです

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

k02********さん

2018/12/3017:34:04

MFCでは難しいかな。

Win32で学びましょう。
「猫でもわかるWindowプログラム」335ページ

エディットコントロールへのアクセス例
WNDPROC OrgProc;
OrgProc(WNDPROC)GetWindowLongPtr(hEdit,GWL_WNDPROC);

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる