예제 #1
0
void CTabPanelWin::ShowSearchPane(bool bShow)
{
	if (bShow && gpSet->isMultiShowSearch)
	{
		_ASSERTE(isMainThread());
		if (!IsSearchShownInt(false))
		{
			REBARBANDINFO rbBand = {REBARBANDINFO_SIZE}; // не используем size, т.к. приходит "новый" размер из висты и в XP обламываемся

			HWND hFindPane = NULL;
			if (!mp_Find)
				mp_Find = new CFindPanel(gpConEmu);

			int iPaneHeight;
			SIZE sz = {0,0};
			if (mn_TabHeight > 0)
			{
				iPaneHeight = mn_TabHeight;
			}
			else if (mh_Toolbar)
			{
				SendMessage(mh_Toolbar, TB_GETMAXSIZE, 0, (LPARAM)&sz);
				iPaneHeight = sz.cy;
			}
			else
			{
				iPaneHeight = QueryTabbarHeight() - 4;
			}

			hFindPane = mp_Find->CreatePane(mh_Rebar, iPaneHeight);

			if (hFindPane)
			{
				rbBand.fMask  = RBBIM_SIZE | RBBIM_CHILD | RBBIM_CHILDSIZE | RBBIM_ID | RBBIM_STYLE;
				rbBand.fStyle = RBBS_CHILDEDGE | RBBS_FIXEDSIZE /*| RBBS_VARIABLEHEIGHT*/;

				#if 0
				rbBand.fMask |= RBBIM_COLORS;
				rbBand.clrFore = RGB(255,255,255);
				rbBand.clrBack = RGB(0,255,0);
				#endif

				rbBand.wID        = rbi_FindBar;
				rbBand.hwndChild  = hFindPane;
				rbBand.cx = rbBand.cxMinChild = rbBand.cxIdeal = mp_Find->GetMinWidth();
				rbBand.cyChild = rbBand.cyMinChild = rbBand.cyMaxChild = iPaneHeight; // + mn_ThemeHeightDiff;
			}

			// Insert before toolbar
			INT_PTR nPaneIndex = SendMessage(mh_Rebar, RB_IDTOINDEX, rbi_ToolBar, 0);
			if (nPaneIndex < 0) nPaneIndex = -1;

			if (!hFindPane
				|| !SendMessage(mh_Rebar, RB_INSERTBAND, nPaneIndex, (LPARAM)&rbBand)
				|| !mp_Find->OnCreateFinished())
			{
				DisplayLastError(_T("Can't initialize rebar (searchbar)"));
				bShow = false;
			}
		}
	}

	// Delete band?
	if (!bShow)
	{
		_ASSERTEX(!bShow);
		INT_PTR nPaneIndex = SendMessage(mh_Rebar, RB_IDTOINDEX, rbi_FindBar, 0);
		if (nPaneIndex >= 0)
		{
			SendMessage(mh_Rebar, RB_DELETEBAND, nPaneIndex, 0);
			SafeDelete(mp_Find);
		}
	}
}
예제 #2
0
HWND CTabPanelWin::CreateTabbar()
{
	gpSetCls->CheckTheming();

	if (!mh_Rebar)
		return NULL; // создаётся только как Band в ReBar

	if (mh_Tabbar)
		return mh_Tabbar; // Уже создали

	// Важно проверку делать после создания главного окна, иначе IsAppThemed будет возвращать FALSE
	BOOL bAppThemed = FALSE, bThemeActive = FALSE;
	FAppThemed pfnThemed = NULL;
	HMODULE hUxTheme = LoadLibrary(L"UxTheme.dll");

	if (hUxTheme)
	{
		pfnThemed = (FAppThemed)GetProcAddress(hUxTheme, "IsAppThemed");

		if (pfnThemed) bAppThemed = pfnThemed();

		pfnThemed = (FAppThemed)GetProcAddress(hUxTheme, "IsThemeActive");

		if (pfnThemed) bThemeActive = pfnThemed();

		FreeLibrary(hUxTheme); hUxTheme = NULL;
	}

	if (!bAppThemed || !bThemeActive)
		mn_ThemeHeightDiff = 2;

	RECT rcClient = {-32000, -32000, -32000+300, -32000+100};
	if (ghWnd)
	{
		rcClient = gpConEmu->GetGuiClientRect();
	}
	else
	{
		_ASSERTE(ghWnd!=NULL && "ConEmu main window must be created already!");
	}

	DWORD nPlacement = TCS_SINGLELINE|WS_VISIBLE|WS_CHILD;

	mh_Tabbar = CreateWindow(WC_TABCONTROL, NULL, nPlacement | WS_CLIPSIBLINGS | TCS_FOCUSNEVER, 0, 0,
	                         rcClient.right, 0, mh_Rebar, NULL, g_hInstance, NULL);

	if (mh_Tabbar == NULL)
	{
		return NULL;
	}


	// Надо
	TabPanelWinMap map = {this}; //{ CTabPanelWin* object; HWND hWnd; WNDPROC defaultProc; };
	map.defaultProc = (WNDPROC)SetWindowLongPtr(mh_Tabbar, GWLP_WNDPROC, (LONG_PTR)_TabProc);
	map.hWnd = mh_Tabbar;
	gp_TabPanelWinMap->Set(mh_Tabbar, map);


	SendMessage(mh_Tabbar, TCM_SETIMAGELIST, 0, (LPARAM)mp_Owner->GetTabIcons());

	if (!mh_TabTip || !IsWindow(mh_TabTip))
		InitTooltips(mh_Tabbar);
	TabCtrl_SetToolTips(mh_Tabbar, mh_TabTip);

	UpdateTabFontInt();

	if (!mh_Balloon || !IsWindow(mh_Balloon))
	{
		InitTooltips(mh_Tabbar);
	}

	// Добавляет закладку, или меняет (при необходимости) заголовок существующей
	AddTabInt(gpConEmu->GetDefaultTabLabel(), 0, gpConEmu->mb_IsUacAdmin, -1);

	// нас интересует смещение клиентской области. Т.е. начало - из 0. Остальное не важно
	rcClient = MakeRect(600, 400);
	QueryTabbarHeight();
	return mh_Tabbar;
}
예제 #3
0
HWND CTabPanelWin::CreateTabbar()
{
	gpSetCls->CheckTheming();

	if (!mh_Rebar)
		return NULL; // Табы создаются только как Band в ReBar

	if (mh_Tabbar)
		return mh_Tabbar; // Уже создали

	//if (!m_TabIcons.IsInitialized())
	//{
	//	InitIconList();
	//}

	// Важно проверку делать после создания главного окна, иначе IsAppThemed будет возвращать FALSE
	BOOL bAppThemed = FALSE, bThemeActive = FALSE;
	FAppThemed pfnThemed = NULL;
	HMODULE hUxTheme = LoadLibrary(L"UxTheme.dll");

	if (hUxTheme)
	{
		pfnThemed = (FAppThemed)GetProcAddress(hUxTheme, "IsAppThemed");

		if (pfnThemed) bAppThemed = pfnThemed();

		pfnThemed = (FAppThemed)GetProcAddress(hUxTheme, "IsThemeActive");

		if (pfnThemed) bThemeActive = pfnThemed();

		FreeLibrary(hUxTheme); hUxTheme = NULL;
	}

	if (!bAppThemed || !bThemeActive)
		mn_ThemeHeightDiff = 2;

	/*mh_TabbarP = CreateWindow(_T("VirtualConsoleClassBar"), _T(""),
	        WS_VISIBLE|WS_CHILD, 0,0,340,22, ghWnd, 0, 0, 0);
	if (!mh_TabbarP) return NULL;*/
	RECT rcClient = {-32000, -32000, -32000+300, -32000+100};
	if (ghWnd)
	{
		rcClient = gpConEmu->GetGuiClientRect();
	}
	else
	{
		_ASSERTE(ghWnd!=NULL && "ConEmu main window must be created already!");
	}

	DWORD nPlacement = TCS_SINGLELINE|WS_VISIBLE|WS_CHILD/*|TCS_BUTTONS*//*|TCS_TOOLTIPS*/;
			//|((gpSet->nTabsLocation == 1) ? TCS_BOTTOM : 0);

	mh_Tabbar = CreateWindow(WC_TABCONTROL, NULL, nPlacement | WS_CLIPSIBLINGS | TCS_FOCUSNEVER, 0, 0,
	                         rcClient.right, 0, mh_Rebar, NULL, g_hInstance, NULL);

	if (mh_Tabbar == NULL)
	{
		return NULL;
	}


	//#if !defined(__GNUC__)
	//#pragma warning (disable : 4312)
	//#endif

	// Надо
	TabPanelWinMap map = {this}; //{ CTabPanelWin* object; HWND hWnd; WNDPROC defaultProc; };
	map.defaultProc = (WNDPROC)SetWindowLongPtr(mh_Tabbar, GWLP_WNDPROC, (LONG_PTR)_TabProc);
	map.hWnd = mh_Tabbar;
	gp_TabPanelWinMap->Set(mh_Tabbar, map);


	SendMessage(mh_Tabbar, TCM_SETIMAGELIST, 0, (LPARAM)mp_Owner->GetTabIcons());

	if (!mh_TabTip || !IsWindow(mh_TabTip))
		InitTooltips(mh_Tabbar);
	TabCtrl_SetToolTips(mh_Tabbar, mh_TabTip);

	UpdateTabFontInt();
	//HFONT hFont = CreateFont(gpSet->nTabFontHeight, 0, 0, 0, FW_DONTCARE, FALSE, FALSE, FALSE, gpSet->nTabFontCharSet, OUT_DEFAULT_PRECIS,
	//                         CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, gpSet->sTabFontFace);
	//SendMessage(mh_Tabbar, WM_SETFONT, WPARAM(hFont), TRUE);

	if (!mh_Balloon || !IsWindow(mh_Balloon))
	{
		InitTooltips(mh_Tabbar);
	}

	// Добавляет закладку, или меняет (при необходимости) заголовок существующей
	//AddTab(gpConEmu->isFar() ? gpSet->szTabPanels : gpSet->pszTabConsole, 0);
	AddTabInt(gpConEmu->GetDefaultTabLabel(), 0, gpConEmu->mb_IsUacAdmin, -1);
	// нас интересует смещение клиентской области. Т.е. начало - из 0. Остальное не важно
	rcClient = MakeRect(600, 400);
	QueryTabbarHeight();
	return mh_Tabbar;
}