ツールバー上に配置したエディットコントロールでキーボードによるコピペができない

[戻る]
sugar 2005/01/10(月) 22:43:15
MFCのSDIアプリを作ってます。(OSはWindows2000Pro、VC++6.0SP5を使用)
ツールバー上にエディットコントロールを配置したまではよかったのですが、
よそからコピーしたテキストを、ここにCtrl+Vで貼り付けることができません。
また、このエディットコントロールのテキストをCtrl+Cでコピーしようとしたのに
クリップボードにはコピーされなかったようです。

どうも、アクセラレータで定義してあるキーは、
エディットコントロールに届く前にメッセージが処理されてしまうからのように思うのですが、
その後、手詰まりとなってしまいました。

ツールバー上のエディットコントロールで、
アクセラレータの定義は消さずに
キーボードによるコピペを実現するには、どんな対策をすればよいのでしょうか?


一応、エディットをツールバー上に載せるところのコードをのせておきます。


int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{

    (略)

    // セパレータの幅を設定
    m_wndToolBar.SetButtonInfo(4, ID_PLACEHOLDER, TBBS_SEPARATOR, 100); 

    // ツールバーのセパレータ上にエディットボックスを載せる
    CRect rect;
    m_wndToolBar.GetItemRect(4, &rect);
    if( !m_wndEdit.CreateEx(
                WS_EX_CLIENTEDGE, "EDIT", "", 
                WS_VISIBLE|WS_CHILD|ES_AUTOHSCROLL, 
                rect, 
                &m_wndToolBar, 
                IDC_CMB_ONTOOLBAR) )
    {
        TRACE0("Failed to create edit-box\n");
        return -1;
    }

    return 0;
}

※m_wndToolBarはCToolBar型で、CMainFrameのメンバ変数です。
※m_wndEditはCEdit型で、CMainFrameのメンバ変数です。

dairygoods 2005/01/11(火) 10:38:17
アクセラレーターの処理をやっているのは、CFrameWnd::PreTranslateMessage()です。
これをオーバーライドして、状況に応じてアクセラレーターを処理させないように
してみるのはいかがでしょう。

BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
   if (アクセラレーターはイヤ) {
      return CWnd::PreTranslateMessage(pMsg);
   } else {
      return CFrameWnd::PreTranslateMessage(pMsg);
   }
}

sugar 2005/01/12(水) 01:42:33
dairygoodsさん、早速の返答、ありがとうございます。
提示していただいたコードで見事解決です。

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

sugar 2005/01/12(水) 01:43:39
[[解決]]
失礼、解決でございます。

古いスレッドには追加発言できません。