本文整理汇总了C++中CVConGuard类的典型用法代码示例。如果您正苦于以下问题:C++ CVConGuard类的具体用法?C++ CVConGuard怎么用?C++ CVConGuard使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了CVConGuard类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: RaiseTestException
void ConEmuAbout::OnInfo_ThrowTrapException(bool bMainThread)
{
if (bMainThread)
{
if (MsgBox(L"Are you sure?\nApplication will terminates after that!\nThrow exception in ConEmu's main thread?", MB_ICONEXCLAMATION|MB_YESNO|MB_DEFBUTTON2)==IDYES)
{
//#ifdef _DEBUG
//MyAssertTrap();
//#else
//DebugBreak();
//#endif
// -- trigger division by 0
RaiseTestException();
}
}
else
{
if (MsgBox(L"Are you sure?\nApplication will terminates after that!\nThrow exception in ConEmu's monitor thread?", MB_ICONEXCLAMATION|MB_YESNO|MB_DEFBUTTON2)==IDYES)
{
CVConGuard VCon;
if ((gpConEmu->GetActiveVCon(&VCon) >= 0) && VCon->RCon())
VCon->RCon()->MonitorAssertTrap();
}
}
}
开发者ID:Alexander-Shukaev,项目名称:ConEmu,代码行数:25,代码来源:AboutDlg.cpp
示例2: ChooseTabFromMenu
void CConEmuCtrl::ChooseTabFromMenu(BOOL abFirstTabOnly, POINT pt, DWORD Align /*= TPM_CENTERALIGN|TPM_VCENTERALIGN*/)
{
HMENU hPopup = gpConEmu->mp_Menu->CreateVConListPopupMenu(NULL, abFirstTabOnly);
if (!Align)
Align = TPM_LEFTALIGN|TPM_TOPALIGN;
int nTab = gpConEmu->mp_Menu->trackPopupMenu(tmp_TabsList, hPopup, Align|TPM_RETURNCMD,
pt.x, pt.y, ghWnd);
if (nTab >= IDM_VCON_FIRST && nTab <= IDM_VCON_LAST)
{
int nNewV = ((int)HIWORD(nTab))-1;
int nNewR = ((int)LOWORD(nTab))-1;
CVConGuard VCon;
if (CVConGroup::GetVCon(nNewV, &VCon))
{
CRealConsole* pRCon = VCon->RCon();
if (pRCon)
{
CTab tab(__FILE__,__LINE__);
if (pRCon->GetTab(nNewR, tab))
pRCon->ActivateFarWindow(tab->Info.nFarWindowID);
}
if (!VCon->isActive(false))
gpConEmu->Activate(VCon.VCon());
}
}
DestroyMenu(hPopup);
}
开发者ID:negadj,项目名称:ConEmu,代码行数:32,代码来源:ConEmuCtrl.cpp
示例3: CountActiveTabs
int CTabBarClass::CountActiveTabs(int nMax /*= 0*/)
{
int nTabs = 0;
bool bHideInactiveConsoleTabs = gpSet->bHideInactiveConsoleTabs;
for (int V = 0; V < MAX_CONSOLE_COUNT; V++)
{
CVConGuard guard;
if (!CVConGroup::GetVCon(V, &guard))
continue;
CVirtualConsole* pVCon = guard.VCon();
if (bHideInactiveConsoleTabs)
{
if (!pVCon->isVisible())
continue;
}
nTabs += pVCon->RCon()->GetTabCount(TRUE);
if ((nMax > 0) && (nTabs >= nMax))
break;
}
return nTabs;
}
开发者ID:negadj,项目名称:ConEmu,代码行数:26,代码来源:TabBar.cpp
示例4: SetForegroundWindow
void CEFindDlg::FindTextDialog()
{
if (mh_FindDlg && IsWindow(mh_FindDlg))
{
SetForegroundWindow(mh_FindDlg);
return;
}
CVConGuard VCon;
CRealConsole* pRCon = (CVConGroup::GetActiveVCon(&VCon) >= 0) ? VCon->RCon() : NULL;
// Создаем диалог поиска только для консольных приложений
if (!pRCon || (pRCon->GuiWnd() && !pRCon->isBufferHeight()) || !pRCon->GetView())
{
//DisplayLastError(L"No RealConsole, nothing to find");
return;
}
gpConEmu->SkipOneAppsRelease(true);
mh_FindDlg = CreateDialogParam((HINSTANCE)GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_FIND), ghWnd, findTextProc, 0/*Param*/);
if (!mh_FindDlg)
{
DisplayLastError(L"Can't create Find text dialog", GetLastError());
}
}
开发者ID:G-VAR,项目名称:ConEmu,代码行数:26,代码来源:FindDlg.cpp
示例5: tab
bool CTabBarClass::GetVConFromTab(int nTabIdx, CVConGuard* rpVCon, DWORD* rpWndIndex)
{
bool lbRc = false;
CTab tab(__FILE__,__LINE__);
CVConGuard VCon;
DWORD wndIndex = 0;
if (m_Tabs.GetTabByIndex(nTabIdx, tab))
{
wndIndex = tab->Info.nFarWindowID;
if (!gpConEmu->isValid((CVirtualConsole*)tab->Info.pVCon))
{
RequestPostUpdate();
}
else
{
VCon = (CVirtualConsole*)tab->Info.pVCon;
lbRc = true;
}
}
if (rpVCon)
rpVCon->Attach(VCon.VCon());
if (rpWndIndex)
*rpWndIndex = lbRc ? wndIndex : 0;
return lbRc;
}
开发者ID:negadj,项目名称:ConEmu,代码行数:30,代码来源:TabBar.cpp
示例6: ProcessMove
// This function is called throughout the duration of the panning/inertia gesture
bool CGestures::ProcessMove(HWND hWnd, const LONG ldx, const LONG ldy)
{
bool lbSent = false;
if (ldy)
{
CVConGuard VCon;
CRealConsole* pRCon = (CVConGroup::GetActiveVCon(&VCon) >= 0) ? VCon->RCon() : NULL;
if (pRCon)
{
TODO("Если можно будет задавать разный шрифт для разных консолей - заменить gpSet->FontSizeY");
// Соотнести Pan с высотой шрифта
int dy = ((ldy < 0) ? -ldy : ldy) / gpSet->FontSizeY;
if (dy > 0)
{
short Delta = ((ldy < 0) ? -120 : 120) * dy;
#ifdef _DEBUG
wchar_t szDbg[128]; _wsprintf(szDbg, SKIPLEN(countof(szDbg)) L" ProcessMove(%i,%i), WheelDelta=%i\n", ldx, ldy, (int)Delta);
DEBUGSTRPAN(szDbg);
#endif
POINT pt = _ptBegin;
if (hWnd != VCon->GetView())
MapWindowPoints(hWnd, VCon->GetView(), &pt, 1);
pRCon->OnMouse(WM_MOUSEWHEEL, MAKELPARAM(0,Delta), pt.x, pt.y, true, true);
lbSent = true; // Запомнить обработанную координату
}
}
}
return lbSent;
}
开发者ID:bradgearon,项目名称:ConEmu,代码行数:36,代码来源:GestureEngine.cpp
示例7: key_WinSize
// Общая для key_WinWidthDec/key_WinWidthInc/key_WinHeightDec/key_WinHeightInc
// pRCon may be NULL
bool CConEmuCtrl::key_WinSize(BYTE vk)
{
if (gpConEmu->isFullScreen() || gpConEmu->isZoomed() || gpConEmu->isIconic())
{
// ничего не делать
}
else
{
CVConGuard VCon;
CVirtualConsole* pVCon = (CVConGroup::GetActiveVCon(&VCon) >= 0) ? VCon.VCon() : NULL;
RECT rcWindow = {};
if (GetWindowRect(ghWnd, &rcWindow))
{
RECT rcMon = gpConEmu->CalcRect(CER_MONITOR, rcWindow, CER_MONITOR, pVCon);
int nX = gpSetCls->FontWidth();
int nY = gpSetCls->FontHeight();
if (vk == VK_LEFT)
{
rcWindow.right = rcWindow.right - nX;
}
else if (vk == VK_RIGHT)
{
if ((rcWindow.right + nX) < rcMon.right)
rcWindow.right = rcWindow.right + nX;
}
else if (vk == VK_UP)
{
rcWindow.bottom = rcWindow.bottom - nY;
}
else if (vk == VK_DOWN)
{
if ((rcWindow.bottom + nY) < rcMon.bottom)
rcWindow.bottom = rcWindow.bottom + nY;
}
if (rcWindow.right > rcWindow.left && rcWindow.bottom > rcWindow.top)
{
MoveWindowRect(ghWnd, rcWindow, TRUE);
}
}
//
//CRealConsole* pRCon = pVCon ? pVCon->RCon() : NULL;
//if (pRCon)
//{
//
// //if (!pRCon->GuiWnd())
// //{
// //
// //}
// //else
// //{
// // // Ресайз в ГУИ режиме
// //}
//}
}
return true;
}
开发者ID:negadj,项目名称:ConEmu,代码行数:59,代码来源:ConEmuCtrl.cpp
示例8: InsideUpdateDir
void CConEmuInside::InsideUpdateDir()
{
CVConGuard VCon;
if (mh_InsideParentPath && IsWindow(mh_InsideParentPath) && (gpConEmu->GetActiveVCon(&VCon) >= 0) && VCon->RCon())
{
wchar_t szCurText[512] = {};
DWORD_PTR lRc = 0;
if (SendMessageTimeout(mh_InsideParentPath, WM_GETTEXT, countof(szCurText), (LPARAM)szCurText, SMTO_ABORTIFHUNG|SMTO_NORMAL, 300, &lRc))
{
if (gnOsVer < 0x600)
{
// Если в заголовке нет полного пути
if (wcschr(szCurText, L'\\') == NULL)
{
// Сразу выходим
return;
}
}
LPCWSTR pszPath = NULL;
// Если тут уже путь - то префикс не отрезать
if ((szCurText[0] == L'\\' && szCurText[1] == L'\\' && szCurText[2]) // сетевой путь
|| (szCurText[0] && szCurText[1] == L':' && szCurText[2] == L'\\' /*&& szCurText[3]*/)) // Путь через букву диска
{
pszPath = szCurText;
}
else
{
// Иначе - отрезать префикс. На английской винде это "Address: D:\dir1\dir2"
pszPath = wcschr(szCurText, L':');
if (pszPath)
pszPath = SkipNonPrintable(pszPath+1);
}
// Если успешно - сравниваем с ms_InsideParentPath
if (pszPath && *pszPath && (lstrcmpi(ms_InsideParentPath, pszPath) != 0))
{
int nLen = lstrlen(pszPath);
if (nLen >= (int)countof(ms_InsideParentPath))
{
_ASSERTE((nLen<countof(ms_InsideParentPath)) && "Too long path?");
}
else //if (VCon->RCon())
{
// Запомнить для сравнения
lstrcpyn(ms_InsideParentPath, pszPath, countof(ms_InsideParentPath));
// Подготовить команду для выполнения в Shell
VCon->RCon()->PostPromptCmd(true, pszPath);
}
}
}
}
}
开发者ID:Alexander-Shukaev,项目名称:ConEmu,代码行数:54,代码来源:Inside.cpp
示例9: DoEndFindText
void CConEmuCtrl::DoEndFindText(CRealConsole* pRCon /*= NULL*/)
{
CVConGuard VCon;
if (!pRCon)
{
pRCon = (CVConGroup::GetActiveVCon(&VCon) >= 0) ? VCon->RCon() : NULL;
if (!pRCon)
return;
}
pRCon->DoEndFindText();
}
开发者ID:negadj,项目名称:ConEmu,代码行数:12,代码来源:ConEmuCtrl.cpp
示例10: key_ChildSystemMenu
bool CConEmuCtrl::key_ChildSystemMenu(const ConEmuChord& VkState, bool TestOnly, const ConEmuHotKey* hk, CRealConsole* pRCon)
{
if (TestOnly)
return true;
// Должно обрабатываться через WM_HOTKEY
CVConGuard VCon;
if (gpConEmu->GetActiveVCon(&VCon) >= 0)
{
VCon->RCon()->ChildSystemMenu();
}
return true;
}
开发者ID:negadj,项目名称:ConEmu,代码行数:13,代码来源:ConEmuCtrl.cpp
示例11: CanActivateTab
bool CTabBarClass::CanActivateTab(int nTabIdx)
{
CVConGuard VCon;
DWORD wndIndex = 0;
if (!GetVConFromTab(nTabIdx, &VCon, &wndIndex))
return false;
if (!VCon->RCon()->CanActivateFarWindow(wndIndex))
return false;
return true;
}
开发者ID:negadj,项目名称:ConEmu,代码行数:13,代码来源:TabBar.cpp
示例12: SendRClick
void CGestures::SendRClick(HWND hWnd, const LONG ldx, const LONG ldy)
{
CVConGuard VCon;
CRealConsole* pRCon = (CVConGroup::GetActiveVCon(&VCon) >= 0) ? VCon->RCon() : NULL;
if (pRCon)
{
POINT pt = {ldx, ldy};
if (hWnd != VCon->GetView())
MapWindowPoints(hWnd, VCon->GetView(), &pt, 1);
pRCon->OnMouse(WM_RBUTTONDOWN, MK_RBUTTON, pt.x, pt.y);
pRCon->OnMouse(WM_RBUTTONUP, 0, pt.x, pt.y);
}
}
开发者ID:rheostat2718,项目名称:conemu-maximus5,代码行数:13,代码来源:GestureEngine.cpp
示例13: OnPostLocalize
void CSetPgInfo::OnPostLocalize(HWND hDlg)
{
CVirtualConsole* pVCon = NULL;
CVConGuard VCon;
if (CVConGroup::GetActiveVCon(&VCon) >= 0)
pVCon = VCon.VCon();
// Performance
gpSetCls->Performance(gbPerformance, TRUE);
if (pVCon)
{
FillConsoleMode(hDlg, pVCon->RCon());
}
}
开发者ID:2asoft,项目名称:ConEmu,代码行数:15,代码来源:SetPgInfo.cpp
示例14: GetOpenedPanels
size_t CConEmuCtrl::GetOpenedPanels(wchar_t*& pszDirs, int& iCount, int& iCurrent)
{
CmdArg szActiveDir, szPassive;
CVConGuard VCon;
MArray<wchar_t*> Dirs;
size_t cchAllLen = 1;
iCount = iCurrent = 0;
for (int V = 0; CVConGroup::GetVCon(V, &VCon, true); V++)
{
VCon->RCon()->GetPanelDirs(szActiveDir, szPassive);
if (VCon->isActive(false))
iCurrent = iCount;
LPCWSTR psz[] = {szActiveDir.ms_Arg, szPassive.ms_Arg};
for (int i = 0; i <= 1; i++)
{
if (psz[i] && psz[i][0])
{
int iLen = lstrlen(psz[i]);
cchAllLen += (iLen+1);
Dirs.push_back(lstrdup(psz[i]));
iCount++;
}
}
}
_ASSERTE(pszDirs == NULL);
pszDirs = (wchar_t*)malloc(cchAllLen*sizeof(*pszDirs));
if (!pszDirs)
return 0;
wchar_t* psz = pszDirs;
for (int i = 0; i < Dirs.size(); i++)
{
wchar_t* p = Dirs[i];
_wcscpy_c(psz, cchAllLen, p);
psz += lstrlen(psz)+1;
free(p);
}
return cchAllLen;
}
开发者ID:negadj,项目名称:ConEmu,代码行数:42,代码来源:ConEmuCtrl.cpp
示例15: if
INT_PTR CSetDlgColors::ColorCtlStatic(HWND hWnd2, WORD c, HWND hItem)
{
if (GetDlgItem(hWnd2, c) == hItem)
{
if (mh_CtlColorBrush) DeleteObject(mh_CtlColorBrush);
COLORREF cr = 0;
if (c >= c32 && c <= c34)
{
ThumbColor *ptc = NULL;
if (c == c32) ptc = &gpSet->ThSet.crBackground;
else if (c == c33) ptc = &gpSet->ThSet.crPreviewFrame;
else ptc = &gpSet->ThSet.crSelectFrame;
//
if (ptc->UseIndex)
{
if (ptc->ColorIdx >= 0 && ptc->ColorIdx <= 15)
{
cr = gpSet->Colors[ptc->ColorIdx];
}
else
{
CVConGuard VCon;
const CEFAR_INFO_MAPPING *pfi = (CVConGroup::GetActiveVCon(&VCon) >= 0) ? VCon->RCon()->GetFarInfo() : NULL;
if (pfi && pfi->cbSize>=sizeof(CEFAR_INFO_MAPPING))
{
cr = gpSet->Colors[(pfi->nFarColors[col_PanelText] & 0xF0)>>4];
}
else
{
cr = gpSet->Colors[1];
}
}
}
开发者ID:xianjiaodahe91,项目名称:ConEmu,代码行数:38,代码来源:SetDlgColors.cpp
示例16: SetForegroundWindow
void CEFindDlg::FindTextDialog()
{
if (mh_FindDlg && IsWindow(mh_FindDlg))
{
SetForegroundWindow(mh_FindDlg);
return;
}
CVConGuard VCon;
CRealConsole* pRCon = (CVConGroup::GetActiveVCon(&VCon) >= 0) ? VCon->RCon() : NULL;
// Создаем диалог поиска только для консольных приложений
if (!pRCon || (pRCon->GuiWnd() && !pRCon->isBufferHeight()) || !pRCon->GetView())
{
//DisplayLastError(L"No RealConsole, nothing to find");
return;
}
if (gpConEmu->mp_TabBar && gpConEmu->mp_TabBar->ActivateSearchPane(true))
{
// Контрол поиска встроен и показан в панели инструментов
return;
}
gpConEmu->SkipOneAppsRelease(true);
if (!mp_DpiAware)
mp_DpiAware = new CDpiForDialog();
// (CreateDialog)
mp_Dlg = CDynDialog::ShowDialog(IDD_FIND, ghWnd, findTextProc, 0/*Param*/);
mh_FindDlg = mp_Dlg ? mp_Dlg->mh_Dlg : NULL;
if (!mh_FindDlg)
{
DisplayLastError(L"Can't create Find text dialog", GetLastError());
}
}
开发者ID:ChunHungLiu,项目名称:ConEmu,代码行数:37,代码来源:FindDlg.cpp
示例17: OnInitDialog
LRESULT CSetPgInfo::OnInitDialog(HWND hDlg, bool abInitial)
{
CVirtualConsole* pVCon = NULL;
CVConGuard VCon;
if (CVConGroup::GetActiveVCon(&VCon) >= 0)
pVCon = VCon.VCon();
SetDlgItemText(hDlg, tCurCmdLine, GetCommandLine());
gpConEmu->UpdateProcessDisplay(TRUE);
gpConEmu->UpdateSizes();
if (pVCon)
{
ConsoleInfoArg cursorInfo = {};
pVCon->RCon()->GetConsoleInfo(&cursorInfo);
FillCursorInfo(hDlg, &cursorInfo);
}
FillFontInfo(hDlg);
return 0;
}
开发者ID:2asoft,项目名称:ConEmu,代码行数:24,代码来源:SetPgInfo.cpp
示例18: _ASSERTE
//.........这里部分代码省略.........
int nTabs = CountActiveTabs(2);
if (nTabs <= 1)
{
Deactivate();
}
}
// Validation?
#ifdef _DEBUG
if (this != gpConEmu->mp_TabBar)
{
_ASSERTE(this == gpConEmu->mp_TabBar);
}
#endif
MCHKHEAP
HANDLE hUpdate = m_Tabs.UpdateBegin();
_ASSERTE(hUpdate!=NULL);
bool bStackChanged = false;
/* ********************* */
/* Go */
/* ********************* */
{
MMap<CVConGroup*,CVirtualConsole*> Groups; Groups.Init(MAX_CONSOLE_COUNT, true);
for (V = 0; V < MAX_CONSOLE_COUNT; V++)
{
//if (!(pVCon = gpConEmu->GetVCon(V))) continue;
CVConGuard guard;
if (!CVConGroup::GetVCon(V, &guard))
continue;
CVirtualConsole* pVCon = guard.VCon();
BOOL lbActive = pVCon->isActive(false);
if (gpSet->bHideInactiveConsoleTabs && !lbActive)
continue;
if (gpSet->isOneTabPerGroup)
{
CVConGroup *pGr;
CVConGuard VGrActive;
if (CVConGroup::isGroup(pVCon, &pGr, &VGrActive))
{
CVirtualConsole* pGrVCon;
if (Groups.Get(pGr, &pGrVCon))
continue; // эта группа уже есть
pGrVCon = VGrActive.VCon();
Groups.Set(pGr, pGrVCon);
// И показывать таб нужно от "активной" консоли, а не от первой в группе
if (pVCon != pGrVCon)
{
guard = pGrVCon;
pVCon = pGrVCon;
}
if (!lbActive)
{
开发者ID:negadj,项目名称:ConEmu,代码行数:67,代码来源:TabBar.cpp
示例19: _ASSERTE
size_t CConEmuCtrl::GetOpenedTabs(CESERVER_REQ_GETALLTABS::TabInfo*& pTabs)
{
_ASSERTE(pTabs==NULL);
int nConCount = gpConEmu->GetConCount();
int nActiveCon = gpConEmu->ActiveConNum();
size_t cchMax = nConCount*16;
size_t cchCount = 0;
CVConGuard VCon;
pTabs = (CESERVER_REQ_GETALLTABS::TabInfo*)calloc(cchMax, sizeof(*pTabs));
for (int V = 0; CVConGroup::GetVCon(V, &VCon, true); V++)
{
if (!pTabs)
{
_ASSERTE(pTabs!=NULL);
break;
}
CRealConsole* pRCon = VCon->RCon();
if (!pRCon)
continue;
CTab tab(__FILE__,__LINE__);
wchar_t szMark[6];
for (int t = 0; pRCon->GetTab(t, tab); t++)
{
int T = t; //tab->Info.nFarWindowID; -- В Far3 номер из nFarWindowID стал бесполезным для пользователя
if (cchCount >= cchMax)
{
pTabs = (CESERVER_REQ_GETALLTABS::TabInfo*)realloc(pTabs, (cchMax+32)*sizeof(*pTabs));
if (!pTabs)
{
_ASSERTE(pTabs!=NULL);
break;
}
cchMax += 32;
_ASSERTE(cchCount<cchMax);
}
pTabs[cchCount].ActiveConsole = (V == nActiveCon);
pTabs[cchCount].ActiveTab = ((tab->Flags() & fwt_CurrentFarWnd) == fwt_CurrentFarWnd);
pTabs[cchCount].Disabled = ((tab->Flags() & fwt_Disabled) == fwt_Disabled);
pTabs[cchCount].ConsoleIdx = V;
pTabs[cchCount].TabNo = T;
pTabs[cchCount].FarWindow = tab->Info.nFarWindowID;
// Text
//wcscpy_c(szMark, tab.Modified ? L" * " : L" ");
switch (tab->Type())
{
case fwt_Editor:
wcscpy_c(szMark, (tab->Flags() & fwt_ModifiedFarWnd) ? L" * " : L" E "); break;
case fwt_Viewer:
wcscpy_c(szMark, L" V "); break;
default:
wcscpy_c(szMark, L" ");
}
if ((V == nActiveCon) && (T <= 9))
_wsprintf(pTabs[cchCount].Title, SKIPLEN(countof(pTabs[cchCount].Title)) L"[%i/&%i]%s", V+1, T, szMark);
else
_wsprintf(pTabs[cchCount].Title, SKIPLEN(countof(pTabs[cchCount].Title)) L"[%i/%i]%s", V+1, T, szMark);
#ifdef _DEBUG
if (pRCon->IsFarLua())
_wsprintf(pTabs[cchCount].Title+lstrlen(pTabs[cchCount].Title), SKIPLEN(30) L"{%i} ", tab->Info.nFarWindowID);
#endif
int nCurLen = lstrlen(pTabs[cchCount].Title);
lstrcpyn(pTabs[cchCount].Title+nCurLen, pRCon->GetTabTitle(tab), countof(pTabs[cchCount].Title)-nCurLen);
cchCount++;
}
}
return cchCount;
}
开发者ID:negadj,项目名称:ConEmu,代码行数:78,代码来源:ConEmuCtrl.cpp
示例20: ChildWndProc
LRESULT CConEmuChild::ChildWndProc(HWND hWnd, UINT messg, WPARAM wParam, LPARAM lParam)
{
LRESULT result = 0;
// Logger
MSG msgStr = {hWnd, messg, wParam, lParam};
ConEmuMsgLogger::Log(msgStr, ConEmuMsgLogger::msgCanvas);
if (gpSetCls->isAdvLogging >= 4)
{
gpConEmu->LogMessage(hWnd, messg, wParam, lParam);
}
CVConGuard guard;
CVirtualConsole* pVCon = NULL;
if (messg == WM_CREATE || messg == WM_NCCREATE)
{
LPCREATESTRUCT lp = (LPCREATESTRUCT)lParam;
guard = (CVirtualConsole*)lp->lpCreateParams;
pVCon = guard.VCon();
if (pVCon)
{
gVConDcMap.Set(hWnd, pVCon);
pVCon->m_TAutoCopy.Init(hWnd, TIMER_AUTOCOPY, TIMER_AUTOCOPY_DELAY);
pVCon->m_TScrollShow.Init(hWnd, TIMER_SCROLL_SHOW, TIMER_SCROLL_SHOW_DELAY);
pVCon->m_TScrollHide.Init(hWnd, TIMER_SCROLL_HIDE, TIMER_SCROLL_HIDE_DELAY);
#ifndef SKIP_HIDE_TIMER
pVCon->m_TScrollCheck.Init(hWnd, TIMER_SCROLL_CHECK, TIMER_SCROLL_CHECK_DELAY);
#endif
}
}
else if (hWnd != ghDcInDestroing)
{
if (!gVConDcMap.Get(hWnd, &pVCon) || !guard.Attach(pVCon))
pVCon = NULL;
}
if (messg == WM_SYSCHAR)
{
_ASSERTE(FALSE); // по идее, фокуса тут быть не должно
// Чтобы не пищало
result = TRUE;
goto wrap;
}
if (!pVCon)
{
_ASSERTE(pVCon!=NULL || hWnd==ghDcInDestroing);
result = DefWindowProc(hWnd, messg, wParam, lParam);
goto wrap;
}
switch (messg)
{
case WM_SHOWWINDOW:
{
#ifdef _DEBUG
HWND hGui = pVCon->GuiWnd();
if (hGui)
{
_ASSERTE(((wParam==0) || pVCon->RCon()->isGuiForceConView()) && "Show DC while GuiWnd exists");
}
#endif
result = DefWindowProc(hWnd, messg, wParam, lParam);
break;
}
case WM_SETFOCUS:
// Если в консоли работает "GUI" окно (GUI режим), то фокус нужно отдать туда.
{
// Фокус должен быть в главном окне! За исключением случая работы в GUI режиме.
pVCon->setFocus();
}
return 0;
case WM_ERASEBKGND:
result = 0;
break;
case WM_PAINT:
result = pVCon->OnPaint();
break;
case WM_PRINTCLIENT:
if (wParam && (lParam & PRF_CLIENT))
{
pVCon->PrintClient((HDC)wParam, false, NULL);
}
break;
case WM_SIZE:
#ifdef _DEBUG
{
RECT rc; GetClientRect(hWnd, &rc);
short cx = LOWORD(lParam);
rc.left = rc.left;
}
#endif
result = pVCon->OnSize(wParam, lParam);
break;
case WM_MOVE:
result = pVCon->OnMove(wParam, lParam);
//.........这里部分代码省略.........
开发者ID:havocbane,项目名称:ConEmu,代码行数:101,代码来源:VConChild.cpp
注:本文中的CVConGuard类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论