Header resize notification
Alexander Stigsen -- ccc4864@vip.cybercity.dk Friday, May 03, 1996 Win95 / VC++ 4.0 How do I recieve notification when the Headers of a CListCtrl is resized? I need this becourse I have an CListCtrl in Report mode with two columns. And I would like for these two columns to fill the entire control no matter how it is resized. The resizing of the control is no problem as I get that takes my OnSize care of. But when the user resizes one of the Headers I would like to be able to resize the other accordingly. Thanks for any help you can give... Alexander Stigsen
Peter Moss -- pmoss@bbn.com Thursday, May 09, 1996 >Win95 / VC++ 4.0 >How do I recieve notification when the Headers of a CListCtrl is resized? >I need this becourse I have an CListCtrl in Report mode with two columns. And >I would like for these two columns to fill the entire control no matter how >it is resized. The resizing of the control is no problem as I get that takes my >OnSize care of. But when the user resizes one of the Headers I would like to be >able to resize the other accordingly. >Thanks for any help you can give... >Alexander Stigsen I have been bothered by this as well. I solved the problem by overriding OnEraseBkgndas seen in the following snippet. The member variable m_cwidth[] is the array of column widths which I store. In OnEraseBkgnd, I test to see if the col widths have changed, if so, cflag becomes TRUE and I then adjust the width of the last col. Hope this helps, Pete Moss pmoss@bbn.com /************************************************************************** * * Name: OnEraseBkgnd * Func: This is a kludge to assure that the Col widths do not grow or shrink * beyond the client rect width. It will adjust the col width of the last * col to exactly match the edge of the client rect. * ***************************************************************************/ BOOL CDSIDListCtrl::OnEraseBkgnd(CDC* pDC) { int n,twidth; // TODO: Add your message handler code here and/or call default // Test to see if the col posns have changed BOOL cflag = FALSE; int tcwidth = 0; // Total computed col width // Get client rect to recompute m_tcwidth (vert scroll bar may change total width) CRect LCRect; GetClientRect(LCRect); int CRWidth = LCRect.Width(); if (m_tcwidth != CRWidth) { // Client window has changed: scroll bar added/removed m_tcwidth = CRWidth; cflag = TRUE; // This will force an adjustment of the last col width } for (n = 0; n < NUM_COLUMNS; n++) { twidth = GetColumnWidth(n); if (twidth != m_cwidth[n]) { m_cwidth[n] = twidth; cflag = TRUE; } tcwidth += twidth; } if (cflag) { // User has changed col widths if (tcwidth != m_tcwidth) { // New total width does not fit so adjust LAST_COL m_cwidth[LAST_COL] -= (tcwidth - m_tcwidth); SetColumnWidth(LAST_COL, m_cwidth[LAST_COL]); } } return CListCtrl::OnEraseBkgnd(pDC); }
| Вернуться в корень Архива |