none
ネイティブコードでのbuttonのマウス処理 RRS feed

  • 質問

  • 始めまして、BLAQVAと申します。

    今までWindowsファームアプリケーションで作成してきましたが

    そろそろ、ネイティブコードでやってみようと思いましたが、いきなりわかりません。

    まず、button1というのをダイアログエディタで作成しました。

    このボタンを左クリックしたかどうかを判別してボタンの情報を出力したいと思っています。

    例えば、button1をクリックすると「押されています」とか、放すと「放されました」とか

    Windowsファームアプリケーションでは、button1のプロパティのイベントでMouse_Down等が

    ありましたが、MFCでそのイベント記述がどう書いていいのかまったくわからなく困っています。

    わからない部分はbutton1を押されたという関数を作った場合の引数をどう書いていいのかわかりません。

    どうぞ、ご教授の程よろしくお願いします。

    2006年7月3日 5:51

すべての返信

  • とりあえず、Windowsファームアプリケーションではなく、Windowフォームアプリケーションです。

    何もかもわからないようであるならば、掲示板で1から手取り足取り指導を受けるのは酷です。

    ですので、入門書である程度の知識をつけられてはどうでしょうか?

     

    ちなみに、ダイアログからはボタンのクリックイベントはWM_COMMANDをハンドルした

    On~になり、どちらのボタンが押されたかどうななんてワカリマセン。(というかクリックは左でしょ。)

    以前の質問のようにボタンをドラッグドロップしたいと考えているのであるならば、、ボタンをサブクラス化することになりそうです。

    (WM_LBUTTONDBLCLKとかをハンドリングする)

     

    ネイディブコードで組む場合、特にC++の場合はVB等の前提知識を取っ払って考えてもらいたいです。

    2006年7月3日 6:00
  • 開発環境が不明なのでVS2005、VCプロジェクト、MFCダイアログベースアプリと仮定して書きます。

    ボタンクリックのイベントハンドラを記述したいということであれば、WINDOWSフォームアプリと同様に、ボタン選択後プロパティの管理イベントの所で追加できます。

    マウス左ボタンが「押された時」と「離された時」に何かをしたいということであれば、蒼の洞窟さんが仰るようにCButtonをサブクラス化するのか王道だと思います。またはCDialog::PreTranslateMessage()をオーバーライドし、お手軽に以下のようにやる方法もあります。button1はコントロール変数と仮定してます。コントロールIDだった場合は変換が必要です。



    BOOL CTestDlg::PreTranslateMessage(MSG *pMsg)
    {
      if(pMsg->hwnd == button1.m_hWnd){
        if(pMsg->message == WM_LBUTTONUP)
          TRACE("左ボタン UP\n");
        else if(pMsg->message == WM_LBUTTONDOWN)
          TRACE("左ボタン DOWN\n");
      }
      return CDialog::PreTranslateMessage(pMsg);
    }

     

    余談になりますが、VC6の頃はクラスウィザードを使ってダブルクリック一発でPreTranslateMessageなどのメンバをオーバーライドできたのですが、VS2005では手書きするしかないんでしょうかね。

    2006年7月3日 11:50
  • 前回はお二人にはお世話になりました。

    蒼の洞窟さんの言うように入門書は購入しています。

    林晴比古著の「Visual C++ ビギナー編」です。

    これには、マウスのどのボタンがクリックされたかを知るみたいなのがありました。

    しかし、今回の様ものがなくてここしばらくSpy++などを参考に色々記述してみましたが、まったくわからなく

    こんな無知な状態で質問しても基礎を固めろ!とお叱りを受けると思い懸念してましたが

    まったくわからず、書いてしまいました。すみません。

    蒼の洞窟さんのおっしゃる通り、最終的には前回のプログラムをネイティブ化するのが最終目標です。

    そこで、まずマウスとボタンのイベント処理を勉強していこうと思いました。

     開発環境は、ネイティブコードプログラムをする為にVisual Studio 2005 Standard Editionを購入して

    MFCアプリケーションで作成しています。

    お二人の内容を参考にもう少し、自力で頑張ってみます。

    ありがとうございました。

    2006年7月3日 18:23