コード例 #1
0
ファイル: duSplitter.cpp プロジェクト: tantaishan/MyEcho
void duSplitter::OnMouseLUp(POINT pt)
{
	duPlugin *pFPlugin = GetPluginByName(m_szFName);
	duPlugin *pSPlugin = GetPluginByName(m_szSName);
	
	if (!Plugin_IsValid(pFPlugin) || !Plugin_IsValid(pSPlugin))
		return;

	if (m_fTracking)
	{
		Plugin_ReleaseCapture(this);
		m_fTracking = FALSE;

		duRect rectFirst;
		Plugin_GetRect(pFPlugin, &rectFirst);
		
		duRect rectSplitter;
		Plugin_GetRect(this, &rectSplitter);
		
		duRect rectSecond;
		Plugin_GetRect(pSPlugin, &rectSecond);

		int nDistance = 0;
		if (m_fVert)
		{
			int nFirstMinY  = rectFirst.top + m_nFMinPixel + (m_ptStart.y - rectSplitter.top);
			int nSecondMinY = rectSecond.bottom - m_nSMinPixel - (rectSplitter.bottom - m_ptStart.y);

			if (pt.y < nFirstMinY)
				nDistance = m_ptStart.y - nFirstMinY;
			else if (pt.y >= nFirstMinY && pt.y <= m_ptStart.y)
				nDistance = m_ptStart.y - pt.y;
			else if (pt.y >= m_ptStart.y && pt.y <= nSecondMinY)
				nDistance = m_ptStart.y - pt.y;
			else if (pt.y > nSecondMinY)
				nDistance =  m_ptStart.y - nSecondMinY;

			MoveVert(nDistance);
		}
		else
		{
			int nFirstMinX  = rectFirst.left   + m_nFMinPixel + (m_ptStart.x - rectSplitter.left);
			int nSecondMinX = rectSecond.right - m_nSMinPixel - (rectSplitter.right - m_ptStart.x);

			if (pt.x < nFirstMinX)
				nDistance = m_ptStart.x - nFirstMinX;
			else if (pt.x >= nFirstMinX && pt.x <= m_ptStart.x)
				nDistance = m_ptStart.x - pt.x;
			else if (pt.x >= m_ptStart.x && pt.x <= nSecondMinX)
				nDistance = m_ptStart.x - pt.x;
			else if (pt.x > nSecondMinX)
				nDistance =  m_ptStart.x - nSecondMinX;

			MoveHorz(nDistance);
		}
	}

	Plugin_SetState(this, DU_STATE_NORMAL);
	::InvalidateRect(m_hWnd, NULL, TRUE);
}
コード例 #2
0
ファイル: duListBox.cpp プロジェクト: blueantst/dulib
void WINAPI duListBox::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	int nItemCount = GetItemCount();
	if (nItemCount == 0)
		return;

	if (nChar == VK_UP)
	{
		int nSel = GetSel();
		nSel--;
		if (nSel < 0)
			nSel = 0;
		if (nSel >= nItemCount)
			nSel = nItemCount - 1;

		SetSel(nSel);
		duScroll *pScroll = (duScroll *)GetPluginByName(m_szVertScroll);
		if (pScroll)
		{
			pScroll->SetPos(m_nItemHeight * nSel);
			UpdateScroll();
		}
		if (!m_fCombobox)
		{
			m_pHotItem = NULL;
			Plugin_Redraw(this, TRUE);
		}
		else
		{
			FadeRedraw();
		}
	}
	else if (nChar == VK_DOWN)
	{
		int nSel = GetSel();
		_TRACE(_T("nSel :%d\n"), nSel);
		nSel++;
		if (nSel >= nItemCount)
			nSel = nItemCount - 1;
		if (nSel < 0)
			nSel = 0;

		SetSel(nSel);
		duScroll *pScroll = (duScroll *)GetPluginByName(m_szVertScroll);
		if (pScroll)
		{
			pScroll->SetPos(m_nItemHeight * nSel);
			UpdateScroll();
		}
		if (!m_fCombobox)
		{
			m_pHotItem = NULL;
			Plugin_Redraw(this, TRUE);
		}
		else
			FadeRedraw();
	}
}
コード例 #3
0
ファイル: TransChatWebWnd.cpp プロジェクト: tantaishan/MyEcho
void CTransChatWebWnd::OnTimer(UINT_PTR nIDEvent)
{
	// TODO:  在此添加消息处理程序代码和/或调用默认值
	switch (nIDEvent)
	{
	case TIMER_AUTO_CLOSE:
	{
		if (m_nSecCount == AUTO_CLOSE_WND_TIME)
		{
			KillTimer(nIDEvent);
			EndDialog(0);
		}
		else
		{
			m_nSecCount++;
			TCHAR szTitle[MAX_PATH] = { 0 };
			_stprintf_s(szTitle, _countof(szTitle), _T("会话已结束,%d 秒自动关闭"), AUTO_CLOSE_WND_TIME - m_nSecCount);
			duWindow* pWnd = (duWindow*)GetPluginByName(GetSafeHwnd(), _T("trans_chat_web_wnd"));
			if (pWnd)
			{
				pWnd->SetText(szTitle);
				Plugin_Redraw(pWnd, FALSE);
			}

		}

		break;
	}
	default:
		break;
	}
	CDialogEx::OnTimer(nIDEvent);
}
コード例 #4
0
ファイル: CtxFeedbackWnd.cpp プロジェクト: tantaishan/MyEcho
int CCtxFeedbackWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	if (!theApp.GetWindowManager()->Attach(GetSafeHwnd(), _T("feedback_wnd")))
		return -1;

	// TODO:  在此添加您专用的创建代码

	TransnBizApi::GetFeedbackItems(TT_IMG, m_vtFeedbackItems);
	
	for (unsigned int i = 0; i < m_vtFeedbackItems.size(); i++)
	{
		TCHAR szBtnName[MAX_PATH] = { 0 };
		_stprintf_s(szBtnName, MAX_PATH, _T("%s%d"), _T("feedback_btn"), i);
		duButton* pBtn = (duButton*)GetPluginByName(GetSafeHwnd(), szBtnName);
		if (pBtn)
		{
			pBtn->SetText(base::stdcxx_s2ws(m_vtFeedbackItems[i].msg).c_str());
			pBtn->SetParam(m_vtFeedbackItems[i].code);
			Plugin_Redraw(pBtn, FALSE);
		}
	}

	return 0;
}
コード例 #5
0
ファイル: duListCtrl.cpp プロジェクト: blueantst/dulib
void WINAPI duListCtrl::HorzScroll(int nPos)
{
	int i;
	int nLineCount = m_vtLines.size();
	
	for (i = 0;i < nLineCount; i++)
	{
		duPlugin *pTemp = m_vtLines[i];
		pTemp->SetPosLeft( - nPos );
	}

	duHeaderCtrl *pHeaderCtrl = (duHeaderCtrl *)GetPluginByName(m_szHeaderCtrl);
	if (pHeaderCtrl)
	{
		//CRect rc;
		//GetRect(&rc);

		//_TRACE(_T("HorzScroll %d TotalWidth %d ListCtrlWidth :%d\n"), nPos, pHeaderCtrl->GetTotalWidth(), rc.Width());


		//duScroll *p = (duScroll *)GetPluginByName(m_szHorzScroll);
		//_TRACE(_T("maxpos :%d page :%d pos :%d\n"), p->GetMaxPos(), p->GetPage(), p->GetPos());

		pHeaderCtrl->SetOffsetX(nPos);
		Plugin_Redraw(pHeaderCtrl, TRUE);
	}

	Resize(NULL);
}
コード例 #6
0
ファイル: duListBox.cpp プロジェクト: blueantst/dulib
void WINAPI duListBox::OnMouseWheel(UINT fwKeys, int zDelta, POINT pt)
{
	duScroll *pVScroll = (duScroll *)GetPluginByName(m_szVertScroll);
	if (pVScroll == NULL)
		return;

	if (m_fVert)
		pVScroll->OnMouseWheel(fwKeys, zDelta, pt);
}
コード例 #7
0
ファイル: duListCtrl.cpp プロジェクト: blueantst/dulib
void WINAPI duListCtrl::GetViewSize(LPSIZE lpSize)
{
	lpSize->cx = 0;
	duHeaderCtrl *pHeaderCtrl = (duHeaderCtrl *)GetPluginByName(m_szHeaderCtrl);
	if (pHeaderCtrl)
		lpSize->cx = pHeaderCtrl->GetTotalWidth();
	
	lpSize->cy = m_nViewCy;
}
コード例 #8
0
ファイル: duTreeListCtrl.cpp プロジェクト: tantaishan/MyEcho
void duTreeListCtrl::SetHeaderCtrlCheckBoxState(UINT uState)
{
	duHeaderCtrl *pHeaderCtrl = (duHeaderCtrl *)GetPluginByName(m_szHeaderCtrl);
	if (pHeaderCtrl == NULL)
		return;
		
	pHeaderCtrl->SetCheckBoxState(uState);
	Plugin_Redraw(pHeaderCtrl, TRUE);
}
コード例 #9
0
ファイル: TransChatWebWnd.cpp プロジェクト: tantaishan/MyEcho
int CTransChatWebWnd::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
	if (CWnd::OnCreate(lpCreateStruct) == -1)
		return -1;

	if (!theApp.GetWindowManager()->Attach(GetSafeHwnd(), _T("trans_chat_web_wnd")))
		return -1;
	
	SetWindowText(_T("专人翻译"));

	g_SessionData.chat_hwnd = GetSafeHwnd();

	m_shadow_win.create(GetSafeHwnd());

	m_Recorder.Attach(GetSafeHwnd());

	//m_pV8Exthandler = new ClientV8ExtHandler(this);

	CefRefPtr<CefWebClient> client(new CefWebClient());
	m_cWebClient = client;

	CefSettings cSettings;
	CefSettingsTraits::init(&cSettings);
	cSettings.multi_threaded_message_loop = true;
	CefRefPtr<CefApp> spApp;
	CefInitialize(cSettings, spApp);

	//CefRegisterExtension("v8/Ext", s_JsExt, m_pV8Exthandler);

	duHwndObj* pWebHwndobj = (duHwndObj*)GetPluginByName(GetSafeHwnd(), _T("chat_web_hwndobj"));
	RECT rc = { 0, 0, 0, 0 };
	pWebHwndobj->GetRect(&rc);
	CefWindowInfo info;
	info.SetAsChild(GetSafeHwnd(), rc);

	TCHAR szHtml[MAX_PATH] = { 0 };
	::GetModuleFileName(GetModuleHandle(NULL), szHtml, _countof(szHtml));
	::PathRemoveFileSpec(szHtml);
	::PathAppend(szHtml, _T("html\\trans.html"));

	CefBrowserSettings browserSettings;
	CefBrowser::CreateBrowser(info, static_cast<CefRefPtr<CefClient>>(client),
		szHtml, browserSettings);

	InitExtension();
	//RunExtensionTest(m_cWebClient->GetBrowser());

	//pWebHwndobj->Attach(m_cWebClient->GetBrowser()->GetWindowHandle());

	//m_Recorder.StartRecord();
	
	//StrCpy(m_szVoicePath, _T("C:\\Users\\Administrator\\AppData\\Roaming\\MyEcho\\oDHO7Q3LRUtxLg4E9R1adjrsv5irzYa8\\task\\test.amr"));

	return 0;
}
コード例 #10
0
ファイル: duSplitter.cpp プロジェクト: tantaishan/MyEcho
void duSplitter::OnMouseLDown(POINT pt)
{
	duPlugin *pFPlugin = GetPluginByName(m_szFName);
	duPlugin *pSPlugin = GetPluginByName(m_szSName);
	
	if (!Plugin_IsValid(pFPlugin) || !Plugin_IsValid(pSPlugin))
		return;

	duRect rectSplitter;
	Plugin_GetRect(this, &rectSplitter);
	if (rectSplitter.PtInRect(pt))
	{
		m_ptStart = pt;
		m_rectLast.SetRectEmpty();
		m_fTracking = TRUE;
		Plugin_SetState(this, DU_STATE_PRESS);
		Plugin_SetCapture(this);
		Plugin_Redraw(this, TRUE);
	}
}
コード例 #11
0
ファイル: duListCtrl.cpp プロジェクト: blueantst/dulib
void WINAPI duListCtrl::AdjustColumn()
{
	duHeaderCtrl *pHeaderCtrl = (duHeaderCtrl *)GetPluginByName(m_szHeaderCtrl);
	if (pHeaderCtrl == NULL)
		return;

	int nItemCount = pHeaderCtrl->GetItemCount();
	if (nItemCount <= 0)
		return;

	int i, j;
	vector<int> vtColWidth;
	vtColWidth.clear();
	vector<HeaderCtrlItem *> &vtItems = pHeaderCtrl->m_vtItems;
	for (i = 0;i < nItemCount; i++)
	{
		HeaderCtrlItem *pItem = vtItems[i];
		if (pItem)
			vtColWidth.push_back(pItem->nWidth);
	}

	int nSepWidth = pHeaderCtrl->GetSepWidth();
	int nLineWidth = pHeaderCtrl->GetTotalWidth();
	int nLineCount = m_vtLines.size();
	for (i = 0;i < nLineCount; i++)
	{
		duPlugin *pTemp = m_vtLines[i];
		if (pTemp == NULL)
			continue;

		pTemp->SetPosWidth(nLineWidth);

		j = 0;
		duPlugin *pColumn = pTemp->GetFirstChild();
		while (pColumn)
		{
			pColumn->SetPosWidth(vtColWidth[j] + nSepWidth);

			j++;
			pColumn = pColumn->GetNextSibling();
		}
	}

	vtColWidth.clear();
	Resize(NULL);
	
	VertScroll(0);
}
コード例 #12
0
        PluginPtr Application::LoadPlugin( const std::wstring& filename )
        {            
            fs::wpath filePath( filename );
            fs::wpath pluginName = filePath.stem();
            PluginPtr pluginPtr = GetPluginByName( pluginName.wstring() );

            if ( !pluginPtr )
            {
                // Try to load the dynamic lib from the provided filename.
                DynamicLibPtr pluginLib = m_DynamicLibSubsystem->Load( filename );
                if ( pluginLib )
                {
                    CreatePluginFP createPluginFunc = (CreatePluginFP)pluginLib->GetSymbol( "CreatePlugin" );
                    if ( createPluginFunc != NULL )
                    {
                        pluginPtr = createPluginFunc();
                        if ( pluginPtr != NULL )
                        {
                            pluginPtr->FileName = filePath.wstring();
                            pluginPtr->PluginName = filePath.stem().wstring();
                            if ( m_IsInitialized )
                            {
                                pluginPtr->Initialize();
                            }

                            AddPlugin( pluginPtr );
                        }
                        else
                        {
                            std::cerr << "Application::LoadPlugin: Plug-in creation failed in library \"";
                            std::wcerr << filename;
                            std::wcerr << "\"" << std::endl;
                        }
                    }
                    else
                    {

                        std::cerr << "Application::LoadPlugin: Could not find symbol \"CreatePlugin\" in library \"";
                        std::wcerr << filename;
                        std::cerr << "\"" << std::endl;
                    }
                }
            }

            return pluginPtr;
        }
コード例 #13
0
ファイル: duListBox.cpp プロジェクト: blueantst/dulib
void WINAPI duListBox::OnMouseMove(POINT pt)
{
	duRect rcListBox;
	Plugin_GetRect(this, &rcListBox);
	
	pt.x -= rcListBox.left;
	pt.y -= rcListBox.top;

	duPlugin *pScroll = GetPluginByName(m_szVertScroll);

	
	duRect rcItem;
	rcItem.SetRectEmpty();
	if(pScroll != NULL && Plugin_IsVisible(pScroll))
		rcItem.right = rcListBox.Width() - pScroll->GetPosWidth();
	else
		rcItem.right = rcListBox.Width();
	
	rcItem.OffsetRect(0, -m_nYOffset);
	
	int i;
	int nItemCount = GetItemCount();
	ListBoxItem *pItem = NULL;
	for (i = 0;i < nItemCount; i++)
	{
		rcItem.top = rcItem.bottom;
		rcItem.bottom = rcItem.top + m_nItemHeight;
		pItem = m_vtItem[i];
		
		if (rcItem.PtInRect(pt) && m_pHotItem != pItem)
		{
			if (pItem->fDisable)
			{
				m_pHotItem = NULL;
				Plugin_Redraw(this, TRUE);
			}
			else
			{
				m_pHotItem = pItem;
				if (m_pHotItem != m_pSelItem)
					FadeRedraw();
			}
			break;
		}
	}
}
コード例 #14
0
ファイル: duListBox.cpp プロジェクト: blueantst/dulib
BOOL WINAPI duListBox::UpdateScroll()
{
	duScroll *pVScroll = (duScroll *)GetPluginByName(m_szVertScroll);
	if (pVScroll == NULL)
		return FALSE;
	
	int nItemCount = GetItemCount();
	int nViewHeight = nItemCount * m_nItemHeight;
	
	duRect rcListBox;
	Plugin_GetRect(this, &rcListBox);
	
	duRect rcVScroll;
	Plugin_GetRect(pVScroll, &rcVScroll);
	
	if (nViewHeight > rcListBox.Height())
	{
		int nPage = rcListBox.Height();

		pVScroll->SetVisible(TRUE);
		pVScroll->SetMaxPos(nViewHeight);
		pVScroll->SetPage(nPage);
		if (pVScroll->GetPos() > (nViewHeight-nPage))
			pVScroll->SetPos(nViewHeight-nPage);

		//pVScroll->SetPosBottom(0);
		pVScroll->Resize(NULL);
		m_nYOffset = pVScroll->GetPos();
		m_fVert = TRUE;
	}
	else
	{
		pVScroll->SetVisible(FALSE);
		m_nYOffset = 0;
		m_fVert = FALSE;
	}
	
	return TRUE;
}
コード例 #15
0
ファイル: duListCtrl.cpp プロジェクト: blueantst/dulib
void WINAPI duListCtrl::AdjustColumnWidth(int nCol, int nWidth)
{
	duHeaderCtrl *pHeaderCtrl = (duHeaderCtrl *)GetPluginByName(m_szHeaderCtrl);
	if (pHeaderCtrl == NULL)
		return;

	int nSepWidth = pHeaderCtrl->GetSepWidth();
	int i,j;
	int nLineWidth = pHeaderCtrl->GetTotalWidth();
	int nLineCount = m_vtLines.size();
	for (i = 0;i < nLineCount; i++)
	{
		duPlugin *pTemp = m_vtLines[i];
		if (pTemp == NULL)
			continue;

		pTemp->SetPosWidth(nLineWidth);

		j = 0;
		duPlugin *pColumn = pTemp->GetFirstChild();
		while (pColumn)
		{
			if (j == nCol)
			{
				pColumn->SetPosWidth(nWidth + nSepWidth);
				break;
			}

			j++;
			pColumn = pColumn->GetNextSibling();
		}
	}
	
	Resize(NULL);
	UpdateScroll();
	Plugin_Redraw(this, TRUE);
}
コード例 #16
0
ファイル: duListCtrl.cpp プロジェクト: blueantst/dulib
LRESULT WINAPI duListCtrl::OnWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
	if (!Plugin_IsVisible(this))
	{
		m_fDispMouseWheel = FALSE;
		return 0;
	}

	if (uMsg == WM_LBUTTONDOWN)
	{
		POINT pointClient; 
		pointClient.x = GET_X_LPARAM(lParam);
		pointClient.y = GET_Y_LPARAM(lParam);

		duRect rcListCtrl;
		GetRect(&rcListCtrl);

		if (!rcListCtrl.PtInRect(pointClient))
		{
			m_fDispMouseWheel = FALSE;
			return 0;
		}

		m_fDispMouseWheel = TRUE;

		//pointClient.Offset(-rcListCtrl.left, -rcListCtrl.top);
		duScroll *pVertScroll = (duScroll *)GetPluginByName(m_szVertScroll);
		if (pVertScroll && pVertScroll->IsVisible())
		{
			duRect rcVertScroll;
			pVertScroll->GetRect(&rcVertScroll);

			if (rcVertScroll.PtInRect(pointClient))
			{
				m_fDispMouseWheel = FALSE;
				return 0;
			}
		}

		duScroll *pHorzScroll = (duScroll *)GetPluginByName(m_szHorzScroll);
		if (pHorzScroll && pHorzScroll->IsVisible())
		{
			duRect rcHorzScroll;
			pHorzScroll->GetRect(&rcHorzScroll);

			if (rcHorzScroll.PtInRect(pointClient))
			{
				m_fDispMouseWheel = FALSE;
				return 0;
			}
		}

		int nHeight = rcListCtrl.Height();
		int i;
		int nLineCount = GetLineCount();
		for (i = m_nFirstLine;i < nLineCount; i++)
		{
			duPlugin *pTemp = m_vtLines[i];
			if (pTemp)
			{
				duRect rc;
				pTemp->GetRect(&rc);

				if (rc.PtInRect(pointClient))
				{
					if (m_pSel != pTemp)
					{
						if (Plugin_IsValid(m_pSel))
						{
							m_pSel->SetState(DU_STATE_NORMAL);
							Plugin_Redraw(m_pSel, TRUE);
						}

						pTemp->SetState(DU_STATE_PRESS);
						m_pSel = pTemp;
						Plugin_Redraw(pTemp, TRUE);
					}	
					break;
				}

				if (rc.top >= rcListCtrl.bottom)
					break;
			}
		}
	}
	else if (uMsg == WM_MOUSEWHEEL)
	{
		POINT pt;
		pt.x = GET_X_LPARAM(lParam);
		pt.y = GET_Y_LPARAM(lParam);

		UINT fwKeys = (UINT)(short)LOWORD(wParam);
		int  zDelta = (int)(short)HIWORD(wParam);

		duScroll *pVertScrollBar = (duScroll *)GetPluginByName(m_szVertScroll);
		if (Plugin_IsValid(pVertScrollBar) && pVertScrollBar->IsVisible() && m_fDispMouseWheel)
			pVertScrollBar->OnMouseWheel(fwKeys, zDelta, pt);
	}
	else if (uMsg == WM_MOUSEMOVE)
	{
		POINT pointClient; 
		pointClient.x = GET_X_LPARAM(lParam);
		pointClient.y = GET_Y_LPARAM(lParam);

		duRect rcListCtrl;
		GetRect(&rcListCtrl);

		if (!rcListCtrl.PtInRect(pointClient))
		{
			if (Plugin_IsValid(m_pHot))
			{
				if (m_pHot != m_pSel)
				{
					m_pHot->SetState(DU_STATE_NORMAL);
					Plugin_Redraw(m_pHot, TRUE);
					m_pHot = NULL;
				}
			}

			return 0;
		}

		duScroll *pVertScroll = (duScroll *)GetPluginByName(m_szVertScroll);
		if (pVertScroll && pVertScroll->IsVisible())
		{
			duRect rcVertScroll;
			pVertScroll->GetRect(&rcVertScroll);

			if (rcVertScroll.PtInRect(pointClient))
			{
				if (Plugin_IsValid(m_pHot))
				{
					if (m_pHot != m_pSel)
					{
						m_pHot->SetState(DU_STATE_NORMAL);
						Plugin_Redraw(m_pHot, TRUE);
						m_pHot = NULL;
					}
				}

				return 0;
			}
		}

		duScroll *pHorzScroll = (duScroll *)GetPluginByName(m_szHorzScroll);
		if (pHorzScroll && pHorzScroll->IsVisible())
		{
			duRect rcHorzScroll;
			pHorzScroll->GetRect(&rcHorzScroll);

			if (rcHorzScroll.PtInRect(pointClient))
			{
				if (Plugin_IsValid(m_pHot))
				{
					if (m_pHot != m_pSel)
					{
						m_pHot->SetState(DU_STATE_NORMAL);
						Plugin_Redraw(m_pHot, TRUE);
						m_pHot = NULL;
					}
				}

				return 0;
			}
		}

		BOOL fNeedRedraw = FALSE;
		BOOL fMouseIn = FALSE;

		int nHeight = rcListCtrl.Height();
		int i;
		int nLineCount = GetLineCount();
		for (i = m_nFirstLine;i < nLineCount; i++)
		{
			duPlugin *pTemp = m_vtLines[i];
			if (pTemp)
			{
				duRect rc;
				pTemp->GetRect(&rc);

				if (rc.PtInRect(pointClient))
				{
					fMouseIn = TRUE;

					if (pTemp == m_pSel)
					{
						if (Plugin_IsValid(m_pHot))
						{
							if (m_pHot == m_pSel)
								break;

							m_pHot->SetState(DU_STATE_NORMAL);
							m_pHot = NULL;
							fNeedRedraw = TRUE;
						}
						
						m_pHot = NULL;
					}
					else
					{
						if (m_pHot != pTemp)
						{
							if (Plugin_IsValid(m_pHot))
							{
								if (m_pHot != m_pSel)
								{
									m_pHot->SetState(DU_STATE_NORMAL);
									m_pHot = NULL;
									fNeedRedraw = TRUE;
								}
							}

							pTemp->SetState(DU_STATE_OVER);
							m_pHot = pTemp;
							fNeedRedraw = TRUE;
						}
					}
					break;
				}

				if (rc.top >= rcListCtrl.bottom)
					break;
			}
		}

		if (!fMouseIn)
		{
			if (Plugin_IsValid(m_pHot))
			{
				if (m_pHot != m_pSel)
				{
					m_pHot->SetState(DU_STATE_NORMAL);
					m_pHot = NULL;
					fNeedRedraw = TRUE;
				}
			}
		}

		if (fNeedRedraw)
			Plugin_Redraw(this, TRUE);
	}

	return 0;
}
コード例 #17
0
ファイル: duListBox.cpp プロジェクト: blueantst/dulib
duScroll *WINAPI duListBox::GetVertScrollBar()
{
	return (duScroll *)GetPluginByName(m_szVertScroll);
}
コード例 #18
0
ファイル: duSplitter.cpp プロジェクト: tantaishan/MyEcho
void duSplitter::MoveVert(int nDistance)
{
	duPlugin *pFPlugin = GetPluginByName(m_szFName);
	duPlugin *pSPlugin = GetPluginByName(m_szSName);
	duPlugin *pParent = GetParent();
	
	if (!Plugin_IsValid(pFPlugin) || !Plugin_IsValid(pSPlugin) || !Plugin_IsValid(pParent))
		return;

	duRect rectFirst, rectSplitter, rectSecond, rectParent;
	Plugin_GetRect(pFPlugin, &rectFirst);
	Plugin_GetRect(pSPlugin, &rectSecond);
	Plugin_GetRect(this, &rectSplitter);
	Plugin_GetRect(pParent, &rectParent);

	// Move first
	int nFirstHeight = rectFirst.Height() - nDistance;
	int nFirstBottom = rectParent.bottom - (rectFirst.top + nFirstHeight);
	int nFirstRatio = 0;
	if (rectParent.Height() > 0)
		nFirstRatio = (int) nFirstHeight / (float)rectParent.Height();

	int first_VertType = pFPlugin->GetPosVertAnchor();
	if (first_VertType == 0)
		pFPlugin->SetPosHeight(nFirstHeight);
	else if (first_VertType == 1)
		pFPlugin->SetPosHeight(nFirstRatio);
	else if (first_VertType == 2)
		pFPlugin->SetPosBottom(nFirstBottom);

	Plugin_Resize(pFPlugin, NULL);

	// Move splitter
	Plugin_GetRect(pFPlugin, &rectFirst);
	int splitter_VertType = GetPosVertAnchor();
	if (splitter_VertType != 0)
	{
		SetPosVertAnchor(0);
		SetPosHeight(rectSplitter.Height());
	}

	int nSplitterTop = rectFirst.bottom - rectParent.top;
	SetPosTop(nSplitterTop);
	Plugin_Resize(this, NULL);

	// Move second
	Plugin_GetRect(this, &rectSplitter);

	int nSecondTop_positive = max(0, rectSplitter.bottom - rectParent.top);
	int nSecondTop_negative = min(0, nSecondTop_positive - rectParent.Height());
	int nSecondHeight = rectSecond.bottom - rectSplitter.bottom;
	int nSecondBottom = rectParent.bottom - (rectSplitter.bottom + nSecondHeight);
	int nSecondRatio = 0;
	if (rectSecond.Height())
		nSecondRatio = (int)nSecondHeight / (float)rectSecond.Height();

	if (pSPlugin->GetPosTop() < 0)
		pSPlugin->SetPosTop( nSecondTop_negative );
	else
		pSPlugin->SetPosTop( nSecondTop_positive );

	int second_VertType = pSPlugin->GetPosVertAnchor();
	if (second_VertType == 0)
		pSPlugin->SetPosHeight(nSecondHeight);
	else if (second_VertType == 1)
		pSPlugin->SetPosHeight(nSecondRatio);
	else if (second_VertType == 2)
		pSPlugin->SetPosBottom(nSecondBottom);

	Plugin_Resize(pSPlugin, NULL);
	NotifyUser(DUM_SPLITTERMOVED, NULL, NULL);
}
コード例 #19
0
ファイル: duSplitter.cpp プロジェクト: tantaishan/MyEcho
void duSplitter::MoveHorz(int nDistance)
{
	duPlugin *pFPlugin = GetPluginByName(m_szFName);
	duPlugin *pSPlugin = GetPluginByName(m_szSName);
	duPlugin *pParent = GetParent();
	
	if (!Plugin_IsValid(pFPlugin) || !Plugin_IsValid(pSPlugin) || !Plugin_IsValid(pParent))
		return;

	duRect rectFirst, rectSplitter, rectSecond, rectParent;
	Plugin_GetRect(pFPlugin, &rectFirst);
	Plugin_GetRect(pSPlugin, &rectSecond);
	Plugin_GetRect(this, &rectSplitter);
	Plugin_GetRect(pParent, &rectParent);
	
	// Move first
	int nFirstWidth = rectFirst.Width() - nDistance;
	int nFirstRight = rectParent.right - (rectFirst.left + nFirstWidth);
 	int nFirstRatio = 0;
	if (rectParent.Width() > 0)
		nFirstRatio = (int)nFirstWidth / (float)rectParent.Width();
	
	int first_HorzType = pFPlugin->GetPosHorzAnchor();
	if (first_HorzType == 0)
		pFPlugin->SetPosWidth(nFirstWidth);
	else if (first_HorzType == 1)
		pFPlugin->SetPosWidth(nFirstRatio);
	else if (first_HorzType == 2)
		pFPlugin->SetPosRight(nFirstRight);
	
	Plugin_Resize(pFPlugin, NULL);

	// Move splitter
	Plugin_GetRect(pFPlugin, &rectFirst);
	int splitter_HorzType = GetPosHorzAnchor();
	if (splitter_HorzType != 0)
	{
		SetPosHorzAnchor(0);
		SetPosWidth(rectSplitter.Width());
	}

	int nSplitterLeft = rectFirst.right - rectParent.left;
	SetPosLeft(nSplitterLeft);
	Plugin_Resize(this, NULL);

	// Move second
	Plugin_GetRect(this, &rectSplitter);
	int nSecondLeft_positive = max(0, rectSplitter.right - rectParent.left);
	int nSecondLeft_negative = min(0, nSecondLeft_positive - rectParent.Width());

	int nSecondWidth = rectSecond.right - rectSplitter.right;
	int nSecondRight = rectParent.right - (rectSplitter.right + nSecondWidth);
	int nSecondRatio = 0;
	if (rectSecond.Width())
		nSecondRatio = (int)nSecondWidth / (float)rectSecond.Width();

	if (pSPlugin->GetPosLeft() < 0)
		pSPlugin->SetPosLeft(nSecondLeft_negative);
	else
		pSPlugin->SetPosLeft(nSecondLeft_positive);

	int second_HorzType = pSPlugin->GetPosHorzAnchor();
	if (second_HorzType == 0)
		pSPlugin->SetPosWidth(nSecondWidth);
	else if (second_HorzType == 1)
		pSPlugin->SetPosWidth(nSecondRatio);
	else if (second_HorzType == 2)
		pSPlugin->SetPosRight(nSecondRight);
	
	Plugin_Resize(pSPlugin, NULL);
	NotifyUser(DUM_SPLITTERMOVED, NULL, NULL);
}
コード例 #20
0
ファイル: duSplitter.cpp プロジェクト: tantaishan/MyEcho
void duSplitter::OnMouseMove(POINT pt)
{
	duPlugin *pFPlugin = GetPluginByName(m_szFName);
	duPlugin *pSPlugin = GetPluginByName(m_szSName);
	
	if (!Plugin_IsValid(pFPlugin) || !Plugin_IsValid(pSPlugin))
		return;

	if (GetState() == DU_STATE_NORMAL)
	{
		Plugin_SetState(this, DU_STATE_OVER);
		Plugin_Redraw(this, TRUE);
	}

	if (m_fTracking)
	{
		duRect rectFirst;
		Plugin_GetRect(pFPlugin, &rectFirst);
		
		duRect rectSplitter;
		Plugin_GetRect(this, &rectSplitter);
		
		duRect rectSecond;
		Plugin_GetRect(pSPlugin, &rectSecond);
		duRect rectTracking = rectSplitter;

		if (m_fVert)
		{
			int yOffset = pt.y - m_ptStart.y;
			rectTracking.OffsetRect(0, yOffset);

			int nFirstMinY = rectFirst.top + m_nFMinPixel + (m_ptStart.y - rectSplitter.top);
			int nSecondMinY = rectSecond.bottom - m_nSMinPixel - (rectSplitter.bottom - m_ptStart.y);
            if (pt.y >= nFirstMinY && pt.y <= nSecondMinY)
			{
				OnInvertTracker(m_rectLast);
				OnInvertTracker(rectTracking);
				m_rectLast = rectTracking;
			}
			else
			{
				if (pt.y < nFirstMinY && m_rectLast.top != (rectFirst.top + m_nFMinPixel))
				{
					int nSplitterHeight = m_rectLast.Height();
					rectTracking.top = rectFirst.top + m_nFMinPixel;
					rectTracking.bottom = rectTracking.top + nSplitterHeight;
					OnInvertTracker(m_rectLast);
					OnInvertTracker(rectTracking);
					m_rectLast = rectTracking;
				}

				if (pt.y > nSecondMinY && m_rectLast.bottom != (rectSecond.bottom - m_nSMinPixel))
				{
					int nSplitterHeight = m_rectLast.Height();
					rectTracking.bottom = rectSecond.bottom - m_nSMinPixel;
					rectTracking.top = rectTracking.bottom - nSplitterHeight;
					OnInvertTracker(m_rectLast);
					OnInvertTracker(rectTracking);
					m_rectLast = rectTracking;
				}
			}
		}
		else
		{
			int xOffset = pt.x - m_ptStart.x;
			rectTracking.OffsetRect(xOffset, 0);
			int nFirstMinX  = rectFirst.left   + m_nFMinPixel + (m_ptStart.x - rectSplitter.left);
			int nSecondMinX = rectSecond.right - m_nSMinPixel - (rectSplitter.right - m_ptStart.x);
			if (pt.x >= nFirstMinX && pt.x <= nSecondMinX)
			{
				OnInvertTracker(m_rectLast);
				OnInvertTracker(rectTracking);
				m_rectLast = rectTracking;
			}
			else
			{
				if (pt.x < nFirstMinX && m_rectLast.left != (rectFirst.left + m_nFMinPixel))
				{
					int nSplitterWidth = m_rectLast.Width();
					rectTracking.left = rectFirst.left + m_nFMinPixel;
					rectTracking.right = rectTracking.left + nSplitterWidth;
					OnInvertTracker(m_rectLast);
					OnInvertTracker(rectTracking);
					m_rectLast = rectTracking;
				}

				if (pt.x > nSecondMinX && m_rectLast.right != (rectSecond.right - m_nSMinPixel))
				{
					int nSplitterWidth = m_rectLast.Width();
					rectTracking.right = rectSecond.right - m_nSMinPixel;
					rectTracking.left = rectTracking.right - nSplitterWidth;
					OnInvertTracker(m_rectLast);
					OnInvertTracker(rectTracking);
					m_rectLast = rectTracking;
				}
			}
		}
	
		//static int count = 0;

		//if (rectTracking.Height() != 10)
		//{
		//	__asm int 3;

		//_TRACE("[%d] pointClient  (%d, %d)\r\n", count, pointClient.x, pointClient.y);
		//_TRACE("[%d] m_ptStart (%d, %d)\r\n", count, m_ptStart.x, m_ptStart.y);

		//_TRACE("[%d] rectFirst   (%d, %d, %d, %d)\r\n", count, rectFirst.left, rectFirst.top, rectFirst.right, rectFirst.bottom);
		//_TRACE("[%d] rectSecond  (%d, %d, %d, %d)\r\n", count, rectSecond.left, rectSecond.top, rectSecond.right, rectSecond.bottom);
		//_TRACE("[%d] rectTracking(%d, %d, %d, %d,) Width : %d, Height : %d\r\n", 
		//	count, rectTracking.left, rectTracking.top, rectTracking.right, rectTracking.bottom, rectTracking.Width(), rectTracking.Height());

		//	count++;
		//}
	}
}
コード例 #21
0
ファイル: duListCtrl.cpp プロジェクト: blueantst/dulib
duPlugin *WINAPI duListCtrl::InsertLine(int nIndex, LPCTSTR lpszTemplate)
{
	int nLineCount = m_vtLines.size();
	if (nIndex == -1)
		nIndex = nLineCount;

	if (nIndex < 0 || nIndex > nLineCount || lpszTemplate == NULL)
		return NULL;
	
	duPlugin *pTemplate = GetPluginByName(lpszTemplate);
	if (pTemplate == NULL)
		return NULL;

	duCtrlManager *pCtrlManager = GetCtrlManager(m_hWnd);
	duPlugin *pNewPlugin = pCtrlManager->Clone(pTemplate, this, NULL, m_nCloneIndex);
	if (pNewPlugin == NULL)
		return NULL;

	m_nCloneIndex++;
	pNewPlugin->SetVisible(FALSE); // 初始化隐藏
	m_vtLines.insert(m_vtLines.begin() + nIndex, pNewPlugin);
	
	duRect rcNewPlugin;
	pNewPlugin->GetRect(&rcNewPlugin);
	m_nViewCy += rcNewPlugin.Height();
	nLineCount = m_vtLines.size();
	
	duRect rcListCtrl;
	GetRect(&rcListCtrl);
	
	if (nIndex < m_nFirstLine)
	{
		int nInsertHeight = rcNewPlugin.Height();
		int nNewFirstLine = m_nFirstLine + 1;
		int nFLTotalHeight = m_nFLTotalHeight;
		
		duPlugin *pOldFirstLine = m_vtLines[nNewFirstLine];
		duRect rcOld;
		pOldFirstLine->GetRect(&rcOld);

		int i;
		for (i = nNewFirstLine; i >= 0; i--)
		{
			duPlugin *pTemp = m_vtLines[i];
			wstring strText = pTemp->GetText();
			if (pTemp)
			{
				duRect rcTemp;
				pTemp->GetRect(&rcTemp);
				
				nNewFirstLine--;
				nInsertHeight -= rcTemp.Height();
				if (nInsertHeight <= rcOld.Height())
				{
					nFLTotalHeight += nInsertHeight;
					break;
				}
			}
		}
		
		m_nFLTotalHeight = nFLTotalHeight;
		m_nFirstLine = nNewFirstLine;
	}

	UpdateScroll();
	
	int nTop = m_nFLTotalHeight - m_nYOffset;
	AdjustVisibleLine(nTop);
	return pNewPlugin;
}
コード例 #22
0
ファイル: duListCtrl.cpp プロジェクト: blueantst/dulib
void duListCtrl::CompleteAdjustLine()
{
	int nLineCount = GetLineCount();
	duRect rcListCtrl;
	GetRect(&rcListCtrl);
	int nHeight = rcListCtrl.Height();
	int nTop = -m_nYOffset;
	int i;

	for (i = 0;i < nLineCount; i++)
	{
		duPlugin *pTemp = m_vtLines[i];
		pTemp->SetVisible(FALSE);
	}

	duHeaderCtrl *pHeaderCtrl = (duHeaderCtrl *)GetPluginByName(m_szHeaderCtrl);
	if (pHeaderCtrl == NULL)
		return;

	int nItemCount = pHeaderCtrl->GetItemCount();
	if (nItemCount <= 0)
		return;

	vector<int> vtColWidth;
	vtColWidth.clear();
	vector<HeaderCtrlItem *> &vtItems = pHeaderCtrl->m_vtItems;
	for (i = 0;i < nItemCount; i++)
	{
		HeaderCtrlItem *pItem = vtItems[i];
		if (pItem)
			vtColWidth.push_back(pItem->nWidth);
	}

	int nLineWidth = pHeaderCtrl->GetTotalWidth();
	BOOL fFirstLine = FALSE;
	int nTotalHeight2 = 0;
	for (i = 0;i < nLineCount; i++)
	{
		duPlugin *pTemp = m_vtLines[i];
	
		duRect rcTemp;
		pTemp->GetRect(&rcTemp);

		nTotalHeight2 += rcTemp.Height();
		nTop += rcTemp.Height();
		if (nTop >= 0)
		{
			if (!fFirstLine)
			{
				fFirstLine = TRUE;
				m_nFirstLine = i;
			}

			pTemp->SetVisible(TRUE);

			int nTop2 = nTop - rcTemp.Height();
			pTemp->SetPosWidth(nLineWidth);
			pTemp->SetPosTop(nTop2);

			//
			//
			int j = 0;
			duPlugin *pColumn = pTemp->GetFirstChild();
			while (pColumn)
			{
				pColumn->SetPosWidth(vtColWidth[j]);

				j++;
				pColumn = pColumn->GetNextSibling();
			}

			pTemp->Resize(NULL);
		}
		if (nTop >= nHeight)
			break;
	}

	if (nLineCount == 0)
	{
		m_nFirstLine = 0;
		m_nFLTotalHeight = 0;
	}
}