DELPHI 开发的 OCX 控件在 MFC 程序中编辑框快捷键不好使的解决
公司一個(gè)大型的項(xiàng)目中使用了 DELPHI 來開發(fā) OCX 控件做數(shù)據(jù)庫(kù)的管理,但是GIS圖形系統(tǒng)使用 MFC 開發(fā),最后將 OCX 嵌入到 MFC 程序中作為一個(gè)完整的系統(tǒng)交付用戶使用,但是在使用過程中發(fā)現(xiàn)一個(gè)問題:當(dāng)啟動(dòng) DELPHI 開發(fā)的管理程序使用 OCX 時(shí), "剪貼、復(fù)制、黏貼"的快捷鍵都是好使的,但是當(dāng) MFC 程序加載 OCX 后,OCX 中的文本框只能使用右鍵菜單來完成這些事情,使用快捷鍵毫無反應(yīng)(當(dāng)然對(duì)于 MFC 中的文本框是好使,即使沒有設(shè)置加速鍵表),幾經(jīng)嘗試,最終靈光一閃突然想到了一個(gè)簡(jiǎn)單的方法,經(jīng)過測(cè)試該問題已經(jīng)解決,代碼如下;
BOOL?CAppEntry::PreTranslateMessage(MSG*?pMsg){
????int?Key?=?pMsg->wParam?;?UINT?Msg?=?pMsg->message?;
????if(?Msg?==?WM_KEYDOWN?&&?::GetFocus(?)?&&?::GetAsyncKeyState(?VK_CONTROL?)?)
????{
????????if(?Key?==?'Z'?){?::SendMessage(?::GetFocus(?)?,?WM_UNDO?,?0?,?0?);?return?TRUE;?}
????????if(?Key?==?'X'?){?::SendMessage(?::GetFocus(?)?,?WM_CUT??,?0?,?0?);?return?TRUE;?}
????????if(?Key?==?'C'?){?::SendMessage(?::GetFocus(?)?,?WM_COPY?,?0?,?0?);?return?TRUE;?}
????????if(?Key?==?'V'?){?::SendMessage(?::GetFocus(?)?,?WM_PASTE,?0?,?0?);?return?TRUE;?}
????}
????return?CWinApp::PreTranslateMessage(pMsg);
}
需要注意的是:在 WM_KEYDOWN 消息中的字符都是大寫的,小寫字母是在 WM_CHAR 中結(jié)合 CAPS LOCK 和 SHIFT 按鍵的狀態(tài)轉(zhuǎn)換出來的,所以上面代碼中的按鍵判斷只需要判斷大寫字母即可(實(shí)際情況中小寫字母是不會(huì)進(jìn)來的)
?
轉(zhuǎn)載于:https://www.cnblogs.com/WonKerr/archive/2009/09/11/MFC_OCX_SHORTCUT.html
總結(jié)
以上是生活随笔為你收集整理的DELPHI 开发的 OCX 控件在 MFC 程序中编辑框快捷键不好使的解决的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于HttpModule
- 下一篇: 创新工场董事长兼首席执行官 李开复 发