【发布时间】:2013-12-10 06:31:22
【问题描述】:
我有一个 CFormView,上面有一些控件。我在 CFormView 上实现了 OnKeyDown 事件。一切都很好,除了我的事件从未被触发,因为焦点位于我的 CFormView 中的组合框上。我不希望组合框接收事件。我希望 CFormView 接收它。所以我实现了 PreTranslateMessage(MSG* pMsg),它从组合框中删除了事件,但它从不将它提供给 CFormView。代码如下:
BOOL CfinalprojView::PreTranslateMessage(MSG* pMsg) {
if( pMsg->message == WM_KEYDOWN ) {
SendMessage( WM_COMMAND, MAKEWPARAM( IDD_FINALPROJ_FORM, BN_CLICKED ), ( LPARAM )0 );
return TRUE;
} else if( pMsg->message == WM_KEYUP ) {
return TRUE;
} else {
return CFormView::PreTranslateMessage( pMsg );
}}
我做错了什么?
提前谢谢你,
科尼柳
【问题讨论】:
-
为什么不希望组合框处理事件?
-
因为我想在用户按键时在 CFormView 上绘制东西。
-
如果组合框是窗体的子控件,是什么阻止您执行父(窗体)方法进行绘制?
-
我的 CFormView 上的组合框或任何其他组件应该与 CFormView 特定的内容无关。我只是想让我的 CFormView 接收一个可以绘制它的事件。如果我在组合框中实现表单绘制,那么我必须在每个控件中实现它,因为我不知道哪个控件将获得焦点。
-
另外,我是 MFC 的新手,我不知道如何处理父级。但我认为整个设计会很糟糕。这是我要做的最后一件事。