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; }
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); //rcClient = gpConEmu->GetGuiClientRect(); TabCtrl_AdjustRect(mh_Tabbar, FALSE, &rcClient); mn_TabHeight = rcClient.top - mn_ThemeHeightDiff; return mh_Tabbar; }