예제 #1
0
///////////////////////////////////////////////////////////////////////////////
// OnKillFocus
void XComboList::OnKillFocus(CWnd* pNewWnd) 
{
	//TRACE0("in XComboList::OnKillFocus\n");
	CWnd::OnKillFocus(pNewWnd);

	m_nCount++;
	if (m_nCount > 2)
	{
		SendRegisteredMessage(WM_XCOMBOLIST_VK_ESCAPE, 0, 0);
	}
}
예제 #2
0
///////////////////////////////////////////////////////////////////////////////
// OnChar
void CXEdit::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	// handle escape and return, in case edit does NOT have focus

	if (m_pParent)
	{
		if (nChar == VK_ESCAPE)
		{
			SendRegisteredMessage(WM_XEDIT_VK_ESCAPE);
			return;
		}
		else if (nChar == VK_RETURN)
		{
			SendRegisteredMessage(WM_XEDIT_KILL_FOCUS);
			return;
		}
	}

	CEdit::OnChar(nChar, nRepCnt, nFlags);
}
예제 #3
0
///////////////////////////////////////////////////////////////////////////////
// PreTranslateMessage
BOOL CXEdit::PreTranslateMessage(MSG* pMsg)
{
	// handle WM_KEYDOWN in case the edit has focus - otherwise
	// it will be sent to parent, bypassing WM_CHAR
	if (pMsg->message == WM_KEYDOWN)
	{
		if (pMsg->wParam == VK_RETURN)
		{
			SendRegisteredMessage(WM_XEDIT_KILL_FOCUS);
			return TRUE;
		}
		else if (pMsg->wParam == VK_ESCAPE)
		{
			SendRegisteredMessage(WM_XEDIT_VK_ESCAPE);
			return TRUE;
		}
	}

	return CEdit::PreTranslateMessage(pMsg);
}
예제 #4
0
///////////////////////////////////////////////////////////////////////////////
// PreTranslateMessage
BOOL XComboList::PreTranslateMessage(MSG* pMsg) 
{
	switch (pMsg->message)
	{
		case WM_KEYDOWN:
		{
			///////////////////////////////////////////////////////////////////
			// we need to trap all cursor keys & alpha keys to reposition the 
			// scroll bar
			///////////////////////////////////////////////////////////////////

			//TRACE("   WM_KEYDOWN\n");

			SCROLLINFO si = 
			{
				sizeof(SCROLLINFO),
				SIF_ALL | SIF_DISABLENOSCROLL,
			};
			m_wndSBVert.GetScrollInfo(&si);
			BOOL bSetScrollInfo = FALSE;
			int nIndex = 0;
			if (::IsWindow(m_ListBox.m_hWnd))
				nIndex = m_ListBox.GetCurSel();
			if (nIndex == LB_ERR || nIndex < 0)
				nIndex = 0;

			// use index from listbox, because scroll position cannot be relied
			// upon here

			switch (pMsg->wParam)
			{
				case VK_RETURN:
					SendRegisteredMessage(WM_XCOMBOLIST_VK_RETURN, 0, 0);
					break;

				case VK_ESCAPE:
					SendRegisteredMessage(WM_XCOMBOLIST_VK_ESCAPE, 0, 0);
					break;

				// handle scrolling messages
				case VK_DOWN:
					si.nPos = nIndex + 1;
					bSetScrollInfo = TRUE;
					break;

				case VK_END:
					si.nPos = si.nMax;
					bSetScrollInfo = TRUE;
					break;

				case VK_HOME:
					si.nPos = 0;
					bSetScrollInfo = TRUE;
					break;

				case VK_NEXT:			// PAGE DOWN
					si.nPos = nIndex + (si.nPage-1);
					bSetScrollInfo = TRUE;
					break;

				case VK_PRIOR:			// PAGE UP
					si.nPos = nIndex - (si.nPage - 1);
					bSetScrollInfo = TRUE;
					break;

				case VK_UP:
					si.nPos = nIndex - 1;
					bSetScrollInfo = TRUE;
					break;

				default:
					if (pMsg->wParam >= 0x41/*VK_A*/ && pMsg->wParam <= 0x5A/*VK_Z*/)
					{
						// this was an alpha key - try to find listbox index
						CString strAlpha;
						strAlpha = (_TCHAR) pMsg->wParam;
						int nIndex2 = 0;
						if (::IsWindow(m_ListBox.m_hWnd))
							nIndex2 = m_ListBox.FindString(nIndex, strAlpha);
						if (nIndex2 != LB_ERR)
						{
							si.nPos = nIndex2;
							bSetScrollInfo = TRUE;
						}
					}
					break;
			}

			if (bSetScrollInfo)
			{
				// let parent know the selection has changed
				SendRegisteredMessage(WM_XCOMBOLIST_KEYDOWN, 0, 0);

				// update scrollbar
				if (si.nPos < 0)
					si.nPos = 0;
				if (si.nPos > si.nMax)
					si.nPos = si.nMax;
				m_wndSBVert.SetScrollInfo(&si);
			}

			break;
		}

		case WM_LBUTTONUP:
			SendRegisteredMessage(WM_XCOMBOLIST_LBUTTONUP, 0, 0);
			break;
	}
	
	return CWnd::PreTranslateMessage(pMsg);
}
예제 #5
0
///////////////////////////////////////////////////////////////////////////////
// OnLButtonDown
void XComboList::OnLButtonUp(UINT nFlags, CPoint point) 
{
	SendRegisteredMessage(WM_XCOMBOLIST_LBUTTONUP, 0, 0);
	CWnd::OnLButtonUp(nFlags, point);
}
예제 #6
0
///////////////////////////////////////////////////////////////////////////////
// OnKillFocus
void CXEdit::OnKillFocus(CWnd* pNewWnd)
{
	CEdit::OnKillFocus(pNewWnd);

	SendRegisteredMessage(WM_XEDIT_KILL_FOCUS);
}