2012-05-10 63 views
2

私はダイアログベースのアプリケーションでMFCリンクコントロールを使用していますが、BN_CLICKEDのイベントハンドラを追加して、私のために何かできることを期待していますが、クリックすると何もしません私はURLを設定しないと、URLを設定すると、そのURLにジャンプします)、私のイベントハンドラはトリガされません。では、デフォルトの「ジャンプ」動作を無効にしてハンドラを起動する方法は?MFCリンクコントロールのデフォルト動作を無効にする方法はありますか?

答えて

1

CMFCLinkCtrlをサブクラス化し、ON_WM_LBUTTONDOWNイベントハンドラを追加することは機能しているようです。

CMFCLinkCtrl::OnLButtonDownを呼び出すかどうかを選択できます。

class CMyLinkCtrl : public CMFCLinkCtrl { 
    DECLARE_DYNAMIC(CMyLinkCtrl) 
public: 
    CMyLinkCtrl(); 
    virtual ~CMyLinkCtrl(); 
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point); 
protected: 
    DECLARE_MESSAGE_MAP() 
}; 

IMPLEMENT_DYNAMIC(CMyLinkCtrl, CMFCLinkCtrl) 

CMyLinkCtrl::CMyLinkCtrl() { 
} 

CMyLinkCtrl::~CMyLinkCtrl() { 
} 

BEGIN_MESSAGE_MAP(CMyLinkCtrl, CMFCLinkCtrl) 
    ON_WM_LBUTTONDOWN() 
END_MESSAGE_MAP() 

void CMyLinkCtrl::OnLButtonDown(UINT nFlags, CPoint point) { 
    static bool bDisabled = false; 
    if(bDisabled) { 
     MessageBox(_T("Link is disabled")); 
    } else { 
     CMFCLinkCtrl::OnLButtonDown(nFlags, point); 
    } 
    bDisabled = !bDisabled; 
} 
+0

ありがとうございます。サブクラス化の仕事!しかし、私はライン 'AfxMessageBox(_T( "クリックした"))を追加すると、小さな問題があります);'デフォルトのOnLButtonDownハンドラでは、クリックするとポップアップしますが、ジャンプしませんでしたが、デフォルトのCMFCLinkCtrl :: OnLButtonDownハンドラの呼び出しをコメントしませんでした。 –

+0

CMFCLinkCtrlはおそらく、メッセージボックスにフォーカスが当たったときに起動しないLBUTTONDOWNの後の別のメッセージを待っています。 Spy ++(Visual Studioから)を使用して、LinkCtrlに送信されたメッセージの順序を比較してください。 – PhilMY

+0

私はリンク制御を 'ON_BN_CLICKED'を処理するように簡単にしたいと思っていました。これを行うために、私は単にクラスを派生し、そのコンストラクタで 'm_bDefaultClickProcess'を' TRUE'に設定しました。それだけでうまくいく! :) – sergiol

関連する問題