Esempio n. 1
0
UINT CEnEdit::TrackPopupMenu(UINT nID, CMenu* pMenu, BOOL bBelow)
{
	if (ButtonHitTest(nID) == -1)
	{
		ASSERT(0);
		return 0;
	}

	ASSERT_VALID(pMenu);

	CRect rButton = GetButtonRect(nID);
	
	TPMPARAMS tpmp;
	tpmp.cbSize = sizeof(TPMPARAMS);
	tpmp.rcExclude = rButton;

	int nX = bBelow ? rButton.left : rButton.right;
	int nY = bBelow ? rButton.bottom : rButton.top;
	
	UINT nCmdID = ::TrackPopupMenuEx(pMenu->GetSafeHmenu(), 
									TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RETURNCMD, 
									nX, nY, ::GetParent(*this), &tpmp);
	
	return nCmdID;
}
Esempio n. 2
0
BOOL CEnEdit::SetButtonCaption(UINT nID, LPCTSTR szCaption)
{
	int nBtn = ButtonHitTest(nID);

	if (nBtn < 0)
		return FALSE;

	EDITBTN& eb = m_aButtons[nBtn];

	if (eb.sCaption.Compare(szCaption) != 0)
	{
		eb.sCaption = szCaption;

		// recalc width?
		if (eb.nWidth == CALC_BTNWIDTH)
			RecalcBtnRects();

		if (GetSafeHwnd())
		{
			// force WM_NCCALCSIZE
			SetWindowPos(NULL, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER); 
			SendMessage(WM_NCPAINT);
		}
	}

	return TRUE;
}
Esempio n. 3
0
void CEnEdit::OnLButtonUp(UINT nFlags, CPoint point) 
{
	CMaskEdit::OnLButtonUp(nFlags, point);

	if (m_nButtonDown == -1)
		return;

	ClientToScreen(&point);
	int nBtnDown = m_nButtonDown;
	int nBtnUp = ButtonHitTest(point);

	// update UI
	ReleaseCapture();
	m_nButtonDown = -1;
	
	SendMessage(WM_NCPAINT);

	// process
	if (nBtnDown == nBtnUp)
	{
		// call derived class first
		OnBtnClick(m_aButtons[nBtnUp].nID);

		// then parent
		GetParent()->SendMessage(WM_EE_BTNCLICK, GetDlgCtrlID(), m_aButtons[nBtnUp].nID);
	}
	
	SendMessage(WM_NCPAINT);
}
Esempio n. 4
0
CRect CEnEdit::GetButtonRect(UINT nID)
{
	int nBtn = ButtonHitTest(nID);

	if (nBtn >= 0)
		return GetButtonRectByIndex(nBtn);

	return CRect(0, 0, 0, 0);
}
Esempio n. 5
0
UINT CEnEdit::OnNcHitTest(CPoint point)
#endif
{
	int nBtn = ButtonHitTest(point);

	if (nBtn >= 0)
		return HTBORDER;

	return (LRESULT)CMaskEdit::OnNcHitTest(point);
}
Esempio n. 6
0
BOOL CEnEdit::CheckButton(UINT nID, BOOL bChecked)
{
	int nBtn = ButtonHitTest(nID);

	if (nBtn < 0)
		return FALSE;

	if (m_aButtons[nBtn].bChecked != bChecked)
	{
		m_aButtons[nBtn].bChecked = bChecked;
		SendMessage(WM_NCPAINT);
	}

	return TRUE;
}
Esempio n. 7
0
BOOL CEnEdit::EnableButton(UINT nID, BOOL bEnable)
{
	int nBtn = ButtonHitTest(nID);

	if (nBtn < 0)
		return FALSE;

	if (m_aButtons[nBtn].bEnabled != bEnable)
	{
		m_aButtons[nBtn].bEnabled = bEnable;
		SendMessage(WM_NCPAINT);
	}

	return TRUE;
}
Esempio n. 8
0
void CEnEdit::OnMouseMove(UINT nFlags, CPoint point) 
{
	CMaskEdit::OnMouseMove(nFlags, point);

	if (m_nButtonDown != -1)
	{
		ClientToScreen(&point);

		if (ButtonHitTest(point) != m_nButtonDown)
		{
			ReleaseCapture();
			m_nButtonDown = -1;
			SendMessage(WM_NCPAINT);
		}
	}
}
Esempio n. 9
0
BOOL CEnEdit::SetDropMenuButton(UINT nID, BOOL bDropMenu)
{
	int nBtn = ButtonHitTest(nID);

	if (nBtn < 0)
		return FALSE;

	if (m_aButtons[nBtn].bDropMenu != bDropMenu)
	{
		m_aButtons[nBtn].bDropMenu = bDropMenu;
	
		if (GetSafeHwnd())
			SendMessage(WM_NCPAINT);
	}

	return TRUE;
}
Esempio n. 10
0
BOOL CEnEdit::SetButtonTip(UINT nID, LPCTSTR szTip)
{
	int nBtn = ButtonHitTest(nID);

	if (nBtn < 0)
		return FALSE;

	if (m_aButtons[nBtn].sTip.Compare(szTip) != 0)
	{
		m_aButtons[nBtn].sTip = szTip;

		if (GetSafeHwnd())
		{
			m_tooltip.UpdateTipText(szTip, this, m_aButtons[nBtn].nID);
			SendMessage(WM_NCPAINT);
		}
	}

	return TRUE;
}
Esempio n. 11
0
void CEnEdit::OnNcLButtonDown(UINT nHitTest, CPoint point) 
{
	CMaskEdit::OnNcLButtonDown(nHitTest, point);

	if (IsWindowEnabled())
	{
		int nBtn = ButtonHitTest(point);

		if (nBtn >= 0)
		{
			if (m_aButtons[nBtn].bEnabled)
			{
				SetCapture();
				m_nButtonDown = nBtn;
				
				SendMessage(WM_NCPAINT);
			}
		}
		else
			SetFocus();
	}
}
Esempio n. 12
0
BOOL CEnEdit::SetButtonWidth(UINT nID, int nWidth)
{
	int nBtn = ButtonHitTest(nID);

	if (nBtn < 0)
		return FALSE;

	if (m_aButtons[nBtn].nWidth != nWidth)
	{
		m_aButtons[nBtn].nWidth = nWidth;

		if (GetSafeHwnd())
		{
			// force WM_NCCALCSIZE
			SetWindowPos(NULL, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER); 

			RecalcBtnRects();
			SendMessage(WM_NCPAINT);
		}
	}

	return TRUE;
}
Esempio n. 13
0
LRESULT CInformationPanel::OnMessage(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	switch (uMsg) {
	case WM_CREATE:
		{
			InitializeUI();

			m_BackBrush.Create(m_Theme.Style.Back.Fill.GetSolidColor());
			m_ProgramInfoBackBrush.Create(m_Theme.ProgramInfoStyle.Back.Fill.GetSolidColor());

			m_HotButton.Item=-1;
			m_HotButton.Button=-1;

			m_Tooltip.Create(hwnd);
			m_Tooltip.SetFont(m_Font.GetHandle());
			for (int i=0;i<NUM_ITEMS;i++) {
				const CItem *pItem=m_ItemList[i];
				const int ButtonCount=pItem->GetButtonCount();
				for (int j=0;j<ButtonCount;j++) {
					RECT rc;
					TCHAR szText[CCommandList::MAX_COMMAND_NAME];
					pItem->GetButtonRect(j,&rc);
					pItem->GetButtonTipText(j,szText,lengthof(szText));
					m_Tooltip.AddTool(GetTooltipID(i,j),rc,szText);
				}
			}

			CProgramInfoItem *pProgramInfoItem=
				static_cast<CProgramInfoItem*>(GetItem(ITEM_PROGRAMINFO));
			CreateProgramInfoEdit();
			if (pProgramInfoItem->IsVisible())
				::ShowWindow(m_hwndProgramInfo,SW_SHOW);
		}
		return 0;

	HANDLE_MSG(hwnd,WM_COMMAND,OnCommand);

	case WM_SIZE:
		{
			for (int i=0;i<NUM_ITEMS;i++) {
				const CItem *pItem=m_ItemList[i];
				const int ButtonCount=pItem->GetButtonCount();
				for (int j=0;j<ButtonCount;j++) {
					RECT rc;
					pItem->GetButtonRect(j,&rc);
					m_Tooltip.SetToolRect(GetTooltipID(i,j),rc);
				}
			}
		}

		if (IsItemVisible(ITEM_PROGRAMINFO)) {
			TVTest::Theme::BorderStyle Style=m_Theme.ProgramInfoStyle.Back.Border;
			ConvertBorderWidthsInPixels(&Style);
			RECT rc;
			GetItemRect(ITEM_PROGRAMINFO,&rc);
			TVTest::Theme::SubtractBorderRect(Style,&rc);
			::MoveWindow(m_hwndProgramInfo,rc.left,rc.top,
						 rc.right-rc.left,rc.bottom-rc.top,TRUE);
		}
		return 0;

	case WM_PAINT:
		{
			PAINTSTRUCT ps;

			::BeginPaint(hwnd,&ps);
			Draw(ps.hdc,ps.rcPaint);
			::EndPaint(hwnd,&ps);
		}
		return 0;

	case WM_CTLCOLORSTATIC:
		{
			HDC hdc=reinterpret_cast<HDC>(wParam);

			::SetTextColor(hdc,m_Theme.ProgramInfoStyle.Fore.Fill.GetSolidColor());
			::SetBkColor(hdc,m_Theme.ProgramInfoStyle.Back.Fill.GetSolidColor());
			return reinterpret_cast<LRESULT>(m_ProgramInfoBackBrush.GetHandle());
		}

	case WM_LBUTTONDOWN:
		{
			ItemButtonNumber Button=ButtonHitTest(GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam));

			if (Button.Item>=0) {
				SetHotButton(Button);
				::SetCapture(hwnd);
			}
		}
		return 0;

	case WM_LBUTTONUP:
		if (::GetCapture()==hwnd) {
			if (m_HotButton.IsValid()) {
				SetHotButton(ButtonHitTest(GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam)));
				ItemButtonNumber Button=m_HotButton;
				::ReleaseCapture();
				if (Button.IsValid())
					m_ItemList[Button.Item]->OnButtonPushed(Button.Button);
			} else {
				::ReleaseCapture();
			}
		}
		return 0;

	case WM_RBUTTONUP:
		{
			HMENU hmenu;
			POINT pt;

			hmenu=::LoadMenu(m_hinst,MAKEINTRESOURCE(IDM_INFORMATIONPANEL));
			for (int i=0;i<NUM_ITEMS;i++)
				CheckMenuItem(hmenu,CM_INFORMATIONPANEL_ITEM_FIRST+i,
							  MF_BYCOMMAND | (IsItemVisible(i)?MFS_CHECKED:MFS_UNCHECKED));
			pt.x=GET_X_LPARAM(lParam);
			pt.y=GET_Y_LPARAM(lParam);
			::ClientToScreen(hwnd,&pt);
			::TrackPopupMenu(::GetSubMenu(hmenu,0),TPM_RIGHTBUTTON,pt.x,pt.y,0,hwnd,NULL);
			::DestroyMenu(hmenu);
		}
		return TRUE;

	case WM_MOUSEMOVE:
		{
			SetHotButton(ButtonHitTest(GET_X_LPARAM(lParam),GET_Y_LPARAM(lParam)));

			if (::GetCapture()==NULL) {
				TRACKMOUSEEVENT tme;
				tme.cbSize=sizeof(TRACKMOUSEEVENT);
				tme.dwFlags=TME_LEAVE;
				tme.hwndTrack=hwnd;
				::TrackMouseEvent(&tme);
			}
		}
		return 0;

	case WM_MOUSELEAVE:
	case WM_CAPTURECHANGED:
		if (m_HotButton.IsValid()) {
			SetHotButton(ItemButtonNumber());
		}
		return 0;

	case WM_SETCURSOR:
		if ((HWND)wParam==hwnd) {
			if (LOWORD(lParam)==HTCLIENT && m_HotButton.IsValid()) {
				::SetCursor(GetActionCursor());
				return TRUE;
			}
		} else if ((HWND)wParam==m_hwndProgramInfo
				&& LOWORD(lParam)==HTCLIENT
				&& m_fUseRichEdit
				&& m_fProgramInfoCursorOverLink) {
			::SetCursor(GetLinkCursor());
			return TRUE;
		}
		break;

	case WM_NOTIFY:
		switch (reinterpret_cast<LPNMHDR>(lParam)->code) {
		case EN_MSGFILTER:
			{
				MSGFILTER *pMsgFilter=reinterpret_cast<MSGFILTER*>(lParam);

				switch (pMsgFilter->msg) {
				case WM_RBUTTONUP:
					TVTest::EventInfoUtil::EventInfoContextMenu(hwnd,m_hwndProgramInfo);
					break;

				case WM_LBUTTONDOWN:
					m_ProgramInfoClickPos.x=GET_X_LPARAM(pMsgFilter->lParam);
					m_ProgramInfoClickPos.y=GET_Y_LPARAM(pMsgFilter->lParam);
					break;

				case WM_MOUSEMOVE:
					m_ProgramInfoClickPos.x=-1;
					m_ProgramInfoClickPos.y=-1;
					{
						POINT pt={GET_X_LPARAM(pMsgFilter->lParam),GET_Y_LPARAM(pMsgFilter->lParam)};

						if (CRichEditUtil::LinkHitTest(m_hwndProgramInfo,pt,m_ProgramInfoLinkList)>=0) {
							m_fProgramInfoCursorOverLink=true;
							::SetCursor(GetLinkCursor());
						} else {
							m_fProgramInfoCursorOverLink=false;
						}
					}
					break;

				case WM_LBUTTONUP:
					{
						POINT pt={GET_X_LPARAM(pMsgFilter->lParam),GET_Y_LPARAM(pMsgFilter->lParam)};

						if (m_ProgramInfoClickPos.x==pt.x && m_ProgramInfoClickPos.y==pt.y)
							CRichEditUtil::HandleLinkClick(m_hwndProgramInfo,pt,m_ProgramInfoLinkList);
					}
					break;
				}
			}
			return 0;

#if 0
		case EN_LINK:
			{
				ENLINK *penl=reinterpret_cast<ENLINK*>(lParam);

				if (penl->msg==WM_LBUTTONUP)
					CRichEditUtil::HandleLinkClick(penl);
			}
			return 0;
#endif
		}
		break;

	case WM_DISPLAYCHANGE:
		m_Offscreen.Destroy();
		return 0;

	case WM_DESTROY:
		m_BackBrush.Destroy();
		m_ProgramInfoBackBrush.Destroy();
		m_Offscreen.Destroy();
		m_IconFont.Destroy();
		m_hwndProgramInfo=NULL;
		return 0;
	}

	return ::DefWindowProc(hwnd,uMsg,wParam,lParam);
}