📄 ctrlsearchpanel.cpp
字号:
m_wndSearch.SetFont( &theApp.m_gdiFont );
m_wndSearch.ModifyStyleEx( 0, WS_EX_CLIENTEDGE );
if ( ! m_wndSchemas.Create( WS_TABSTOP, rc, this, IDC_SCHEMAS ) ) return -1;
LoadString( m_wndSchemas.m_sNoSchemaText, IDS_SEARCH_PANEL_AFT );
m_wndSchemas.Load( Settings.Search.LastSchemaURI );
m_wndSchemas.SendMessage( CB_SETDROPPEDWIDTH, 200 );
if ( Settings.General.GUIMode != GUI_BASIC && GetSystemMetrics( SM_CYSCREEN ) > 600 )
{
if ( ! m_wndNetworks.Create( WS_TABSTOP, this, IDC_SEARCH_NETWORKS ) ) return -1;
}
LoadString( strCaption, IDS_SEARCH_PANEL_START );
m_wndStart.Create( rc, this, IDC_SEARCH_START );
m_wndStart.SetWindowText( strCaption );
m_wndStart.SetIcon( CoolInterface.ExtractIcon( ID_SEARCH_SEARCH ) );
m_wndStart.SetHandCursor( TRUE );
LoadString( strCaption, IDS_SEARCH_PANEL_STOP );
m_wndStop.Create( rc, this, IDC_SEARCH_STOP );
m_wndStop.SetWindowText( strCaption );
m_wndStop.SetIcon( CoolInterface.ExtractIcon( ID_SEARCH_STOP ) );
m_wndStop.SetHandCursor( TRUE );
SetPrimary( TRUE );
return 0;
}
void CSearchInputBox::OnSkinChange()
{
CString strCaption;
LoadString( m_wndSchemas.m_sNoSchemaText, IDS_SEARCH_PANEL_AFT );
m_wndSchemas.Load( Settings.Search.LastSchemaURI );
if ( m_wndNetworks.m_hWnd != NULL ) m_wndNetworks.OnSkinChange();
LoadString( strCaption, IDS_SEARCH_PANEL_START );
m_wndStart.SetWindowText( strCaption );
m_wndStart.SetIcon( CoolInterface.ExtractIcon( ID_SEARCH_SEARCH ) );
LoadString( strCaption, IDS_SEARCH_PANEL_STOP );
m_wndStop.SetWindowText( strCaption );
m_wndStop.SetIcon( CoolInterface.ExtractIcon( ID_SEARCH_STOP ) );
}
void CSearchInputBox::OnSize(UINT nType, int cx, int cy)
{
CTaskBox::OnSize( nType, cx, cy );
HDWP hDWP = BeginDeferWindowPos( 5 );
DeferWindowPos( hDWP, m_wndSearch, NULL, BOX_MARGIN, 27, cx - BOX_MARGIN * 2, 19, SWP_SHOWWINDOW|SWP_NOZORDER );
DeferWindowPos( hDWP, m_wndSchemas, NULL, BOX_MARGIN, 71, cx - BOX_MARGIN * 2, 256, SWP_SHOWWINDOW|SWP_NOZORDER );
if ( m_wndNetworks.m_hWnd != NULL )
{
DeferWindowPos( hDWP, m_wndNetworks, NULL, BOX_MARGIN, 118, cx - BOX_MARGIN * 2, 256, SWP_SHOWWINDOW|SWP_NOZORDER );
DeferWindowPos( hDWP, m_wndStart, NULL, BOX_MARGIN, 152, 94, 24, SWP_SHOWWINDOW|SWP_NOZORDER );
DeferWindowPos( hDWP, m_wndStop, NULL, cx - BOX_MARGIN - 52, 152, 52, 24, SWP_SHOWWINDOW|SWP_NOZORDER );
}
else
{
DeferWindowPos( hDWP, m_wndStart, NULL, BOX_MARGIN, 106, 94, 24, SWP_SHOWWINDOW|SWP_NOZORDER );
DeferWindowPos( hDWP, m_wndStop, NULL, cx - BOX_MARGIN - 52, 106, 52, 24, SWP_SHOWWINDOW|SWP_NOZORDER );
}
EndDeferWindowPos( hDWP );
}
void CSearchInputBox::OnPaint()
{
CPaintDC dc( this );
CRect rc, rct;
CString str;
UINT nFlags = ETO_CLIPPED;
CDC* pDC = &dc;
GetClientRect( &rc );
if ( m_bmWatermark.m_hObject != NULL )
{
pDC = CoolInterface.GetBuffer( dc, rc.Size() );
CoolInterface.DrawWatermark( pDC, &rc, &m_bmWatermark );
pDC->SetBkMode( TRANSPARENT );
}
else
{
pDC->SetBkMode( OPAQUE );
pDC->SetBkColor( CoolInterface.m_crTaskBoxClient );
nFlags |= ETO_OPAQUE;
}
CFont* pOldFont = (CFont*)pDC->SelectObject( &CoolInterface.m_fntNormal );
pDC->SetTextColor( 0 );
LoadString( str, IDS_SEARCH_PANEL_INPUT_1 );
rct.SetRect( BOX_MARGIN + 1, BOX_MARGIN, rc.right - BOX_MARGIN, BOX_MARGIN + 16 );
pDC->ExtTextOut( rct.left, rct.top, nFlags, &rct, str, NULL );
pDC->ExcludeClipRect( &rct );
LoadString( str, IDS_SEARCH_PANEL_INPUT_2 );
rct.OffsetRect( 0, 54 - rct.top );
pDC->ExtTextOut( rct.left, rct.top, nFlags, &rct, str, NULL );
pDC->ExcludeClipRect( &rct );
if ( m_wndNetworks.m_hWnd != NULL )
{
LoadString( str, IDS_SEARCH_PANEL_INPUT_3 );
rct.OffsetRect( 0, 102 - rct.top );
pDC->ExtTextOut( rct.left, rct.top, nFlags, &rct, str, NULL );
pDC->ExcludeClipRect( &rct );
}
pDC->SelectObject( pOldFont );
if ( pDC != &dc )
{
dc.BitBlt( 0, 0, rc.Width(), rc.Height(), pDC, 0, 0, SRCCOPY );
pDC->SelectClipRgn( NULL );
}
else
{
pDC->FillSolidRect( &rc, CoolInterface.m_crTaskBoxClient );
}
}
void CSearchInputBox::OnSelChangeSchemas()
{
CSearchPanel* pPanel = (CSearchPanel*)GetPanel();
pPanel->OnSchemaChange();
}
void CSearchInputBox::OnCloseUpSchemas()
{
}
void CSearchInputBox::OnSearchStart()
{
CSearchPanel* pPanel = (CSearchPanel*)GetPanel();
pPanel->ExecuteSearch();
}
void CSearchInputBox::OnSearchStop()
{
CString strCaption, strTest;
LoadString( strTest, IDS_SEARCH_PANEL_CLEAR );
m_wndStop.GetWindowText( strCaption );
CWnd* pTarget = GetPanel()->GetParent();
if ( strCaption == strTest )
pTarget->PostMessage( WM_COMMAND, ID_SEARCH_CLEAR );
else
pTarget->PostMessage( WM_COMMAND, ID_SEARCH_STOP );
}
/////////////////////////////////////////////////////////////////////////////
// CSearchSchemaBox construction
CSearchSchemaBox::CSearchSchemaBox()
{
}
CSearchSchemaBox::~CSearchSchemaBox()
{
}
/////////////////////////////////////////////////////////////////////////////
// CSearchSchemaBox message handlers
int CSearchSchemaBox::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if ( CTaskBox::OnCreate( lpCreateStruct ) == -1 ) return -1;
CRect rc;
if ( ! m_wndSchema.Create( WS_VISIBLE, rc, this, IDC_SCHEMAS ) ) return -1;
m_wndSchema.m_nCaptionWidth = 0;
m_wndSchema.m_nItemHeight = 42;
m_wndSchema.m_bShowBorder = FALSE;
return 0;
}
void CSearchSchemaBox::OnSize(UINT nType, int cx, int cy)
{
CTaskBox::OnSize( nType, cx, cy );
m_wndSchema.SetWindowPos( NULL, 0, 1, cx, cy - 1, SWP_NOZORDER );
}
BOOL CSearchSchemaBox::PreTranslateMessage(MSG* pMsg)
{
if ( pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_TAB )
{
if ( m_wndSchema.OnTab() ) return TRUE;
}
return CTaskBox::PreTranslateMessage( pMsg );
}
/////////////////////////////////////////////////////////////////////////////
// CSearchResultsBox
CSearchResultsBox::CSearchResultsBox()
{
Expand( theApp.GetProfileInt( _T("Settings"), _T("SearchPanelResults"), TRUE ) );
m_bActive = FALSE;
m_nFiles = 0;
m_nHits = 0;
m_nHubs = 0;
m_nLeaves = 0;
}
CSearchResultsBox::~CSearchResultsBox()
{
}
/////////////////////////////////////////////////////////////////////////////
// CSearchResultsBox message handlers
void CSearchResultsBox::Update(BOOL bSearching, DWORD nFiles, DWORD nHits, DWORD nHubs, DWORD nLeaves)
{
m_bActive = bSearching;
m_nFiles = nFiles;
m_nHits = nHits;
m_nHubs = nHubs;
m_nLeaves = nLeaves;
Invalidate();
}
void CSearchResultsBox::OnPaint()
{
CString strFormat, strText;
CPaintDC dc( this );
CRect rc;
UINT nFlags = ETO_CLIPPED;
CDC* pDC = &dc;
GetClientRect( &rc );
if ( m_bmWatermark.m_hObject )
{
pDC = CoolInterface.GetBuffer( dc, rc.Size() );
CoolInterface.DrawWatermark( pDC, &rc, &m_bmWatermark );
pDC->SetBkMode( TRANSPARENT );
}
else
{
pDC->SetBkMode( OPAQUE );
pDC->SetBkColor( CoolInterface.m_crTaskBoxClient );
nFlags |= ETO_OPAQUE;
}
CFont* pOldFont = (CFont*)pDC->SelectObject( &theApp.m_gdiFontBold );
pDC->SetTextColor( 0 );
LoadString( strText, IDS_SEARCH_PANEL_RESULTS_STATUS );
DrawText( pDC, BOX_MARGIN, BOX_MARGIN, nFlags, strText );
LoadString( strText, IDS_SEARCH_PANEL_RESULTS_FOUND );
DrawText( pDC, BOX_MARGIN, BOX_MARGIN + 32, nFlags, strText );
pDC->SelectObject( &theApp.m_gdiFont );
if ( m_bActive )
{
LoadString( strFormat, IDS_SEARCH_PANEL_RESULTS_ACTIVE );
strText.Format( strFormat, m_nHubs, m_nLeaves );
}
else
{
LoadString( strText, IDS_SEARCH_PANEL_RESULTS_INACTIVE );
}
DrawText( pDC, BOX_MARGIN + 8, BOX_MARGIN + 14, nFlags, strText );
if ( m_nFiles )
{
LoadString( strFormat, IDS_SEARCH_PANEL_RESULTS_FORMAT );
if ( strFormat.Find( '|' ) >= 0 )
{
if ( m_nFiles == 1 && m_nHits == 1 )
Skin.SelectCaption( strFormat, 0 );
else if ( m_nFiles == 1 )
Skin.SelectCaption( strFormat, 1 );
else
Skin.SelectCaption( strFormat, 2 );
strText.Format( strFormat,
m_nFiles, m_nHits );
}
else
{
strText.Format( strFormat,
m_nFiles, m_nFiles != 1 ? _T("s") : _T(""),
m_nHits, m_nHits != 1 ? _T("s") : _T("") );
}
}
else
{
LoadString( strText, IDS_SEARCH_PANEL_RESULTS_NONE );
}
DrawText( pDC, BOX_MARGIN + 8, BOX_MARGIN + 32 + 14, nFlags, strText );
pDC->SelectObject( pOldFont );
if ( pDC != &dc )
{
dc.BitBlt( 0, 0, rc.Width(), rc.Height(), pDC, 0, 0, SRCCOPY );
pDC->SelectClipRgn( NULL );
}
else
{
pDC->FillSolidRect( &rc, CoolInterface.m_crTaskBoxClient );
}
}
void CSearchResultsBox::DrawText(CDC* pDC, int nX, int nY, UINT nFlags, LPCTSTR pszText)
{
CSize cz = pDC->GetTextExtent( pszText, _tcslen( pszText ) );
CRect rc( nX, nY, nX + cz.cx, nY + cz.cy );
pDC->ExtTextOut( nX, nY, nFlags, &rc, pszText, _tcslen( pszText ), NULL );
pDC->ExcludeClipRect( nX, nY, nX + cz.cx, nY + cz.cy );
}
void CSearchResultsBox::OnExpanded(BOOL bOpen)
{
theApp.WriteProfileInt( _T("Settings"), _T("SearchPanelResults"), bOpen );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -