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のメンバ変数です。
アクセラレーターの処理をやっているのは、CFrameWnd::PreTranslateMessage()です。
これをオーバーライドして、状況に応じてアクセラレーターを処理させないように
してみるのはいかがでしょう。
BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
if (アクセラレーターはイヤ) {
return CWnd::PreTranslateMessage(pMsg);
} else {
return CFrameWnd::PreTranslateMessage(pMsg);
}
}
dairygoodsさん、早速の返答、ありがとうございます。
提示していただいたコードで見事解決です。
ありがとうございました。
失礼、解決でございます。