只是想知道前面带有以下内容的MFC控制消息之间的区别是:
LVN (e.g. LVN_ITEMCHANGED)
HDN (e.g. HDN_TRACK)
NM (e.g. NM_HOVER)
此外,当用户使用NM_CLICK消息点击某个项目时,我正在使用ListControl和陷印。我还想在用户选择新项目时捕获一个键,例如上/下箭头键。任何人都可以告诉我应该为此捕获哪条消息吗?
由于
答案 0 :(得分:4)
答案 1 :(得分:2)
要更改选择,您需要处理LVN_ITEMCHANGED通知:
NMLISTVIEW & nm = *(NMLISTVIEW *) pnmh;
if ( (nm.uNewState ^ nm.uOldState) & LVIS_SELECTED)
{
// nm.iItem was selected or deselected
if (!m_internalUIChange)
{
// see below
}
}
第一个“if”检查“selected”状态是否已更改。请注意,在列表中选择其他项目时,仍然会触发两次:一次取消选择旧项目,一次选择新项目。但是,这对于获取“完全取消选择”是必要的。
此通知经常触发 - 即使您以编程方式修改控件也是如此。如果你的处理程序只对用户事件作出反应,你至少需要一个你设置的标志来进行这些操作(我使用一个类和一个RAII-Lock,所以我不会忘记重置它)