对话框中有一个 滑块控件, 一个VIEW(嵌入)……想实现滑动滑块view里的图片缩放显示。滑块控件自身是响应方向键的事件的,通过方向键能滑动。但是点击view之后,再按方向键,滑块不滑动。想在对话框中响应 OnKeyDown事件,达到理想效果。但不知道OnKeyDown函数的具体实现。滑块滑动事件实现如下:
void CMyDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_nZoom = m_Slider.GetPos(); m_pView->m_nZoom = m_nZoom; //m_pView为对话框中的view的指针
m_pView->OnUpdate(NULL, 0, NULL);
m_pView->Invalidate(); CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
void CMyDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
m_nZoom = m_Slider.GetPos(); m_pView->m_nZoom = m_nZoom; //m_pView为对话框中的view的指针
m_pView->OnUpdate(NULL, 0, NULL);
m_pView->Invalidate(); CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}
解决方案 »
- 网络流量监控 源码 谁无私一下
- 一个截图程序,在使用LockWindowUpdate和SetCapture时遇到的问题
- 【求教】关于故障信号作频谱分析(FFT)采样点数过大的问题
- xxxx.exe 中的 0x00414589 处未处理的异常: 0xC00000FD: Stack overflow问题
- 如何清除用Polygon()生成的图形?
- 请问哪里可以找到简单的串口驱动的例子?
- 用VC初写console程序的问题
- 图象拉伸问题,高手救命啊!!!给你我所有的分数。
- 如何获取窗体上的Button的句柄
- 救命啊!! 我快要烦死了!!还是老问题,我自己生成了一个LIST VIEW 的窗口,然后往里面添加数据,可是我怎么能发送一个类似于COMBO BOX 的CB_SETCURSEL 的LVM_****消息啊!!不用MFC的类库! 用SHELL的消息和函数!
- ListControl取消选中行
- CListCtrl::SetItemText读出数据乱码
消息触发时候
m_nZoom 减少一定的比例
就可以了
BOOL CXXXDlg::PreTranslateMessage(MSG* pMsg)
{
if(WM_KEYDOWN == pMsg->message)
{
// ...
}
return CDialog::PreTranslateMessage(pMsg);
}
{
if(WM_KEYDOWN == pMsg->message)
{
SendMessage(WM_KEYDOWN,pMsg->wParam,pMsg->lParam);
return TRUE;
}
return CDialog::PreTranslateMessage(pMsg);
}这样OnKeyDown消息就能响应了!
现在的关键是:点击VIEW之后,滑块就不再响应方向键的事件了。是不是因为 点击VIEW之后,焦点已经从窗口转到VIEW里了,所以即使在窗口中实现PreTranslateMessage()和Onkeydown(),也得不到响应?如果从在VIEW中的Onkeydown,向窗口发WM_KEYDOWN消息
是不是能实现点击VIWE之后,窗口依然能响应WM_KEYDOWN事件呢?
在view的Onkeydown向窗口发消息,但dialog好像没接收到。
extern HWND g_Hwnd; //g_Hwnd是在 dialog的OnInitDialog中通过GetSafeHwnd得到的。
void CMyViewEx::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
::SendMessage(g_PreHwnd, WM_KEYDOWN,(WPARAM)0,(LPARAM)0); CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
}BOOL CMyViewEx::PreTranslateMessage(MSG* pMsg)
{
if (pMsg->message == WM_KEYDOWN)
{
OnKeyDown((UINT)pMsg->wParam, (UINT)pMsg->lParam, (UINT)pMsg->lParam);
return TRUE;
} return CScrollView::PreTranslateMessage(pMsg);
}
注意【view是嵌在dialog里的,不是MFC生成的 文档/视图 结构中的视图,】
【此处的CMyViewEx 是我自定义的继承CScrollView】现在这是头疼呀……问题重述一遍:
在对话框dialog中嵌入一个view,在view上显示图片; 通过dialog中的滑块滚动,设定view中显示内容的缩放。滑块的位置是在dialog中的OnHScroll事件中通过 GetPos得到的。问题就是,点击view之后,再按方向键,滑块不会滚动。如何在点击VIEW之后再按方向键,滑块依然滚动呢?就像在dialog中按方向键一样。