void CACListWnd::OnSize(UINT nType, int cx, int cy) { CWnd::OnSize(nType, cx, cy); SetScroller(); SetProp(); if (!m_LastSize.IsRectEmpty()) GetWindowRect(m_LastSize); }
void CACListWnd::Init(CWnd *pWnd) { VERIFY(m_VertBar.Create(WS_VISIBLE | SBS_VERT | SBS_LEFTALIGN, CRect(0, 0, GetSystemMetrics(SM_CYVSCROLL), 100), this, 0)); SetScroller(); m_pEditParent = (CEdit *)pWnd; m_lCount = m_DisplayList.size(); m_VertBar.SetScrollPos(0, FALSE); SetProp(); CDC *m_pDC; m_pDC = GetDC(); if (m_pDC) { m_pDC->SelectObject(GetStockObject(DEFAULT_GUI_FONT)); CSize m_Size = m_pDC->GetOutputTextExtent("Hg"); m_ItemHeight = m_Size.cy; ReleaseDC(m_pDC); } }
int CACListWnd::FindString(int nStartAfter, LPCTSTR lpszString) { CString m_Str1, m_Str2 = lpszString; long m_AktCount = m_DisplayList.size(); if (!m_pEditParent) { ShowWindow(SW_HIDE); return -1; } if (nStartAfter > (int)m_SearchList.size()) { ShowWindow(SW_HIDE); return -1; } if (m_Str2.IsEmpty()) { ShowWindow(SW_HIDE); return -1; } m_DisplayList.clear(); m_Str2.MakeUpper(); for (int i = nStartAfter + 1; i < (int)m_SearchList.size(); i++) { if (m_PrefixChar) m_Str1 = m_PrefixChar; else m_Str1 = EMPTYSTR; m_Str1 += m_SearchList[i]; m_Str1.MakeUpper(); if (m_Str1.Find(m_Str2) == 0) { m_DisplayList.push_back(m_SearchList[i]); } } m_lCount = m_DisplayList.size(); if (m_lCount) { CRect rcWnd; int iHeight; m_pEditParent->GetWindowRect(rcWnd); SetScroller(); SetProp(); ShowWindow(SW_SHOWNORMAL); Invalidate(); iHeight = m_lCount * m_ItemHeight + (GetSystemMetrics(SM_CYBORDER) * 2); if (m_lCount > _MAX_ENTRYS_) iHeight = _MAX_ENTRYS_ * m_ItemHeight + (GetSystemMetrics(SM_CYBORDER) * 2); if (!m_LastSize.IsRectEmpty()) { int iWight = m_LastSize.Width(); iHeight = m_LastSize.Height(); rcWnd.top += rcWnd.Height(); rcWnd.right = rcWnd.left + iWight; rcWnd.bottom = rcWnd.top + iHeight; SetWindowPos(&CWnd::wndTopMost, rcWnd.left, rcWnd.top, rcWnd.Width(), rcWnd.Height(), 0); } else { SetWindowPos(&CWnd::wndTopMost, rcWnd.left, rcWnd.top + rcWnd.Height(), rcWnd.Width(), iHeight, 0); } if (m_AktCount != static_cast<long>(m_DisplayList.size())) m_lSelItem = -1; SortList(m_DisplayList); } else { ShowWindow(SW_HIDE); } return 1; }
/* ** Vers. 1.1 * NEW: m_bDisplayOnly */ int CACListWnd::FindString(int nStartAfter, LPCTSTR lpszString, bool m_bDisplayOnly) { long m_AktCount = (long)m_DisplayList.GetSize(); if(!m_bDisplayOnly) { CString m_Str1,m_Str2 = lpszString; if(!m_pEditParent) { ShowWindow(false); return -1; } if(nStartAfter > m_SearchList.GetSize()) { ShowWindow(false); return -1; } if(m_Str2.IsEmpty()) { ShowWindow(false); return -1; } m_DisplayList.RemoveAll(); m_Str2.MakeUpper(); for(int i = nStartAfter+1; i < m_SearchList.GetSize(); i++) { if(m_PrefixChar) m_Str1 = m_PrefixChar; else m_Str1 = _T(""); m_Str1 += m_SearchList.GetAt(i); m_Str1.MakeUpper(); if(m_lMode & _MODE_FIND_ALL_) { if(m_Str1.Find(m_Str2) >= 0) { m_DisplayList.Add(m_SearchList.GetAt(i)); } } else // _MODE_FIND_EXACT_ { if(m_Str1.Find(m_Str2) == 0) { m_DisplayList.Add(m_SearchList.GetAt(i)); } } } } m_lCount = (long)m_DisplayList.GetSize(); if(m_lCount) { CRect rcWnd; int iHeight,iWight; m_pEditParent->GetWindowRect(rcWnd); SetScroller(); SetProp(); ShowWindow(true); Invalidate(); iHeight = m_lCount*m_ItemHeight+(GetSystemMetrics(SM_CYBORDER)*2); if(m_lCount > _MAX_ENTRYS_) iHeight = _MAX_ENTRYS_*m_ItemHeight+(GetSystemMetrics(SM_CYBORDER)*2); if(!m_LastSize.IsRectEmpty()) { iWight = m_LastSize.Width(); iHeight = m_LastSize.Height(); rcWnd.top += rcWnd.Height(); rcWnd.right = rcWnd.left+iWight; rcWnd.bottom = rcWnd.top+iHeight; SetWindowPos(&CWnd::wndTopMost, rcWnd.left, rcWnd.top, rcWnd.Width(), rcWnd.Height(), 0); } else { SetWindowPos(&CWnd::wndTopMost, rcWnd.left, rcWnd.top + rcWnd.Height(), rcWnd.Width(), iHeight, 0); } if(m_AktCount != m_DisplayList.GetSize()) m_lSelItem = -1; SortList(m_DisplayList); } else { ShowWindow(false); } return 1; }