ComboEx.cpp
资源名称:Netmanag.zip [点击查看]
上传用户:geanq888
上传日期:2007-01-03
资源大小:316k
文件大小:2k
源码类别:
Ftp客户端
开发平台:
Visual C++
- // ComboEx.cpp : implementation file
- //
- // Copyright (c) Chris Maunder 1997.
- // Please feel free to use and distribute.
- #include "stdafx.h"
- #include "ComboEx.h"
- #ifdef _DEBUG
- #define new DEBUG_NEW
- #undef THIS_FILE
- static char THIS_FILE[] = __FILE__;
- #endif
- /////////////////////////////////////////////////////////////////////////////
- // CComboEx
- CComboEx::CComboEx()
- {
- m_bAutoComplete = TRUE;
- }
- CComboEx::~CComboEx()
- {
- }
- BEGIN_MESSAGE_MAP(CComboEx, CComboBox)
- //{{AFX_MSG_MAP(CComboEx)
- ON_CONTROL_REFLECT(CBN_EDITUPDATE, OnEditUpdate)
- //}}AFX_MSG_MAP
- END_MESSAGE_MAP()
- /////////////////////////////////////////////////////////////////////////////
- // CComboEx message handlers
- BOOL CComboEx::PreTranslateMessage(MSG* pMsg)
- {
- // Need to check for backspace/delete. These will modify the text in
- // the edit box, causing the auto complete to just add back the text
- // the user has just tried to delete.
- if (pMsg->message == WM_KEYDOWN)
- {
- m_bAutoComplete = TRUE;
- int nVirtKey = (int) pMsg->wParam;
- if (nVirtKey == VK_DELETE || nVirtKey == VK_BACK)
- m_bAutoComplete = FALSE;
- }
- return CComboBox::PreTranslateMessage(pMsg);
- }
- /////////////////////////////////////////////////////////////////////////////
- void CComboEx::OnEditUpdate()
- {
- DWORD dwCurSel = GetEditSel();
- int nStart = dwCurSel >> 16;
- int nEnd = dwCurSel & 0xffff;
- // if we are not to auto update the text, get outta here
- if (!m_bAutoComplete) return;
- // Get the text in the edit box
- CString str;
- GetWindowText(str);
- int nLength = str.GetLength();
- // Search for, and select in, and string in the combo box that is prefixed
- // by the text in the edit box
- if (SelectString(-1, str) == CB_ERR)
- SetWindowText(str); // No text selected, so restore what was there before
- // Set the text selection as the additional text that we have added
- if(nEnd < nLength)
- SetEditSel(nStart, nEnd);
- else
- SetEditSel(nLength, -1);
- }
- /////////////////////////////////////////////////////////////////////////////