C++ 调整列表列大小时HDN_ENDTRACK出现问题
我在处理从CListCtrl派生的自定义类的HDN_ENDTRACKW消息时遇到了一点问题 从本质上讲,似乎在发送此消息时,存储列宽度的实际值在执行处理代码之后才会更新 句柄中的代码只是指示进度条调整大小,以填充调整大小的列的宽度。 守则:C++ 调整列表列大小时HDN_ENDTRACK出现问题,c++,mfc,event-handling,clistctrl,C++,Mfc,Event Handling,Clistctrl,我在处理从CListCtrl派生的自定义类的HDN_ENDTRACKW消息时遇到了一点问题 从本质上讲,似乎在发送此消息时,存储列宽度的实际值在执行处理代码之后才会更新 句柄中的代码只是指示进度条调整大小,以填充调整大小的列的宽度。 守则: void ProgListCtrl::OnEndTrack(NMHDR* pNMHDR, LRESULT* pResult) { int width = ListView_GetColumnWidth(GetSafeHwnd(), m_nProgressC
void ProgListCtrl::OnEndTrack(NMHDR* pNMHDR, LRESULT* pResult)
{
int width = ListView_GetColumnWidth(GetSafeHwnd(), m_nProgressColumn);
ResizeProgressbar();
}
ListView_GetColumnWidth目前只是为了帮助调试
我正在更改的特定列的默认值为150,当我在UI中调整列的大小时,会调用此方法,但宽度保持不变150,进度条不会调整大小。只有重新调整列的大小时,宽度值才会反映第一次调整大小后的列的值,ResizeProgressBar方法然后正确更改progbar大小以填充它所在的列。这是连续的,宽度值似乎总是比实际值落后一步
我非常感激任何帮助。干杯。使用
HDN\u ENDTRACK
本身提供给您的信息,即:
void ProgListCtrl::OnEndTrack(NMHDR* pNMHDR, LRESULT* pResult)
{
NMHEADER *pHdr = (NMHEADER*) pNMHDR;
if ((pHdr->iItem == m_nProgressColumn) &&
(pHdr->pitem) &&
(pHdr->pitem->mask & HDI_WIDTH))
{
int width = pHdr->pitem->cxy;
ResizeProgressbar();
}
}
或者,查看
HDN\u项目更改
和HDN\u项目更改
通知,而不是HDN\u尾迹
使用HDN\u尾迹
本身提供给您的信息,即:
void ProgListCtrl::OnEndTrack(NMHDR* pNMHDR, LRESULT* pResult)
{
NMHEADER *pHdr = (NMHEADER*) pNMHDR;
if ((pHdr->iItem == m_nProgressColumn) &&
(pHdr->pitem) &&
(pHdr->pitem->mask & HDI_WIDTH))
{
int width = pHdr->pitem->cxy;
ResizeProgressbar();
}
}
或者,查看
HDN\u项目更改
和HDN\u项目更改
通知,而不是HDN\u结束跟踪
HDN\u项目更改!除了消息映射之外,它不需要我做任何更改。谢谢你的帮助!NMHEADER和NMHDR是两种不同的结构。你怎么能把一个抛给另一个?NMHDR不指定强制转换运算符。@SahilSingh通过WM\u NOTIFY
交付的所有结构都以NMHDR
字段开始。这在“lParam
:指向包含通知代码和附加信息的NMHDR
结构的指针。对于某些通知消息,此参数指向将NMHDR
结构作为其第一个成员的较大结构。”指向第一个成员的指针也是指向整个结构的指针,因此类型转换是安全的,只要您对转换使用正确的结构类型。@SahilSinghHDN_ENDTRACK
将指针发送到NMHEADER
结构的NMHDR
成员,根据:“lParam
:指向NMHEADER
结构的指针,该结构包含有关头控件和其分隔符被拖动的项的信息。“HDN_成功了!除了消息映射之外,它不需要我做任何更改。谢谢你的帮助!NMHEADER和NMHDR是两种不同的结构。你怎么能把一个抛给另一个?NMHDR不指定强制转换运算符。@SahilSingh通过WM\u NOTIFY
交付的所有结构都以NMHDR
字段开始。这在“lParam
:指向包含通知代码和附加信息的NMHDR
结构的指针。对于某些通知消息,此参数指向将NMHDR
结构作为其第一个成员的较大结构。”指向第一个成员的指针也是指向整个结构的指针,因此类型转换是安全的,只要您对转换使用正确的结构类型。@SahilSinghHDN_ENDTRACK
将指针发送到NMHEADER
结构的NMHDR
成员,根据:“lParam
:指向NMHEADER
结构的指针,该结构包含有关header控件和其分隔符被拖动的项的信息。”