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

ツールバー上に配置したエディットコント...
 
通知
すべてクリア

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


sugar
 sugar
(@sugar)
ゲスト
結合: 23年前
投稿: 448
Topic starter  

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
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

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

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


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 23年前
投稿: 448
Topic starter  

dairygoodsさん、早速の返答、ありがとうございます。
提示していただいたコードで見事解決です。

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


返信引用
sugar
 sugar
(@sugar)
ゲスト
結合: 23年前
投稿: 448
Topic starter  

失礼、解決でございます。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました