// anConEmuOnly // 0 - если в ConEmu - вернуть окно отрисовки, иначе - вернуть окно консоли // 1 - вернуть окно отрисовки // 2 - вернуть главное окно ConEmu // 3 - вернуть окно консоли HWND WINAPI GetFarHWND2(int anConEmuOnly) { // Если просили реальное окно консоли - вернем сразу if (anConEmuOnly == 3) { return FarHwnd; } if (ghConEmuWndDC) { if (IsWindow(ghConEmuWndDC)) { if (anConEmuOnly == 2) return GetConEmuHWND(1); return ghConEmuWndDC; } // ghConEmuWndDC = NULL; // SetConEmuEnvVar(NULL); SetConEmuEnvVarChild(NULL,NULL); } if (anConEmuOnly) return NULL; return FarHwnd; }
HWND CConEmuChild::CreateView() { if (!this) { _ASSERTE(this!=NULL); return NULL; } if (mh_WndDC || mh_WndBack) { _ASSERTE(mh_WndDC == NULL && mh_WndBack == NULL); return mh_WndDC; } if (!gpConEmu->isMainThread()) { // Окно должно создаваться в главной нити! HWND hCreate = gpConEmu->PostCreateView(this); UNREFERENCED_PARAMETER(hCreate); _ASSERTE(hCreate && (hCreate == mh_WndDC)); return mh_WndDC; } CVirtualConsole* pVCon = (CVirtualConsole*)this; _ASSERTE(pVCon!=NULL); //-- тут консоль только создается, guard не нужен //CVConGuard guard(pVCon); TODO("Заменить ghWnd на ghWndWork"); HWND hParent = ghWnd; // Имя класса - то же самое, что и у главного окна DWORD style = /*WS_VISIBLE |*/ WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN; DWORD styleEx = 0; RECT rcBack = gpConEmu->CalcRect(CER_BACK, pVCon); RECT rc = gpConEmu->CalcRect(CER_DC, rcBack, CER_BACK, pVCon); mh_WndBack = CreateWindowEx(styleEx, gsClassNameBack, L"BackWND", style, rcBack.left, rcBack.top, rcBack.right - rcBack.left, rcBack.bottom - rcBack.top, hParent, NULL, (HINSTANCE)g_hInstance, pVCon); mn_WndDCStyle = style; mn_WndDCExStyle = styleEx; mh_WndDC = CreateWindowEx(styleEx, gsClassName, L"DrawWND", style, rc.left, rc.top, rc.right - rc.left, rc.bottom - rc.top, hParent, NULL, (HINSTANCE)g_hInstance, pVCon); if (!mh_WndDC || !mh_WndBack) { DisplayLastError(L"Can't create DC window!"); return NULL; // } SetWindowPos(mh_WndDC, HWND_TOP, 0,0,0,0, SWP_NOMOVE|SWP_NOSIZE); // Установить переменную среды с дескриптором окна SetConEmuEnvVar(mh_WndDC); return mh_WndDC; }