How to Use CHeaderCtrl Filter
1,添加标准的Filter控件
- // The pointer to my header control.
- extern CHeaderCtrl* pmyHeaderCtrl;
- // HDS_FILTERBAR Is The New Style...
- //
- pHeader -> ModifyStyle( 0, HDS_FILTERBAR ); // Add The FilterBar Style
2,发送HDN_FILTERCHANGE消息
- void OnHdnFilterChange(NMHDR *pNMHDR, LRESULT *pResult)
- {
- // This feature requires Internet Explorer 5 or greater.
- // The symbol _WIN32_IE must be >= 0x0500.
- LPNMHEADER phdr = reinterpret_cast<LPNMHEADER>(pNMHDR);
- // TODO: Add your control notification handler code here
- HDTEXTFILTER hdTFilter;
- CHeaderCtrl *pHeader = GetHeaderCtrl();
- HDITEM hdItem;
- TCHAR cFilter[128];
- ZeroMemory( cFilter, sizeof( cFilter ) );
- hdItem.mask = HDI_FILTER;
- hdTFilter.pszText = cFilter; // Set Buffer For Filter
- hdTFilter.cchTextMax = sizeof( cFilter ); // Set Size Of Buffer
- hdItem.type = HDFT_ISSTRING;
- hdItem.pvFilter = &hdTFilter;
- pHeader->GetItem( 0, &hdItem ); //获取0项的数据
- *pResult = 0;
- }
3,Filter通过响应HDN_FILTERCHANGE消息
- void OnHdnFilterChange(NMHDR *pNMHDR, LRESULT *pResult)
- {
- // This feature requires Internet Explorer 5 or greater.
- // The symbol _WIN32_IE must be >= 0x0500.
- LPNMHEADER phdr = reinterpret_cast<LPNMHEADER>(pNMHDR);
- // TODO: Add your control notification handler code here
- *pResult = 0;
- }
相关的结构体
- typedef struct tagNMHEADER {
- NMHDR hdr;
- int iItem;
- int iButton;
- HDITEM *pitem;
- } NMHEADER, *LPNMHEADER;
- typedef struct _HDITEM {
- UINT mask;
- int cxy;
- LPTSTR pszText;
- HBITMAP hbm;
- int cchTextMax;
- int fmt;
- LPARAM lParam;
- #if (_WIN32_IE >= 0x0300)
- int iImage;
- int iOrder;
- #endif
- #if (_WIN32_IE >= 0x0500)
- UINT type;
- LPVOID pvFilter;
- #endif
- } HDITEM, *LPHDITEM;
- typedef struct tagNMHDR {
- HWND hwndFrom;
- UINT idFrom;
- UINT code;
- } NMHDR;
-
- 添加消息映射ON_NOTIFY(HDN_FILTERCHANGE, 0, OnHdnFilterChange)
- 添加消息函数OnHdnFilterChang