📄 subject_37537.htm
字号:
<p>
序号:37537 发表者:最后疯狂 发表日期:2003-04-25 16:47:13
<br>主题:一个关于窗口滚动条和滚动条控件的问题。
<br>内容:示例程序如图所示。(视图窗口有滚动条,并且在视图中创建了滚动条控件)<BR><BR>Windows会把属于窗口一部分的滚动条和滚动条控件的消息绑定到一个WM_HSCROLL、WM_VSRCOLL消息中,发送给父窗口。现在出现了一个问题:<BR><BR>我想把窗口滚动条和在窗口中创建的滚动条控件消息分开处理,该怎么么?<BR><BR>我的代码如下:<BR><BR>void CTestView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) <BR>{<BR> if (pScrollBar->GetDlgCtrlID() == 101) // 垂直滚动条控件的ID为101<BR> {<BR> // 如果是滚动条控件发送的消息<BR> // 就这样处理<BR> ...<BR> TRACE("Sending WM_VSCROLL for ScrollContrl\n") ;<BR> }<BR> else<BR> {<BR> // 如果是属于窗口一部分的滚动条发送的消息<BR> // 我们就这样处理<BR> ...<BR> TRACE("Sending WM_VSCROLL for WindowScroll\n") ;<BR> }<BR><BR>}<BR><BR>但这些代码有一个问题:当消息是滚动条控件所发送,pScrollBar->GetDlgCtrlID()函数能正确调用,程序能确定消息为滚动条控件所发,作进一步处理。<BR>如果消息为窗口滚动条所发送,pScrollBar->GetDlgCtrlID()函数会出错。因为窗口滚动条并不是一个窗口,在GetDlgCtrlID()内部的::IsWindow()函数调用返回FALSE。<BR><BR>我的问题是,如何区分开WM_VSCROLL、WM_HSCROLL消息是谁所发(是窗口滚动条还是滚动条控件)?并想作进一步处理。
<br><a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p>
<hr size=1>
<blockquote><p>
回复者:最后疯狂 回复日期:2003-04-27 11:45:26
<br>内容:难道...难道就没有人能解决?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
<hr size=1>
<blockquote><p>
<font color=red>答案被接受</font><br>回复者:擎天柱 回复日期:2003-04-27 12:43:36
<br>内容:最好使用窗体句柄进行比较,pScrollBar->GetSafeHwnd() == ?
<br>
<a href="javascript:history.go(-1)">返回上页</a><br><a href=http://www.copathway.com/cndevforum/>访问论坛</a></p></blockquote>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -