// ScrMain.cpp : implementation of the CScrMain class // #include "stdafx.h" #include "ScrDemo.h" #include "ScrMain.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern CScrDemo theApp; static const WCHAR BASED_CODE _szLicString[] = L"LEADTOOLS OCX Copyright (c) 1991-2004 LEAD Technologies, Inc."; ///////////////////////////////////////////////////////////////////////////// // CScrMain IMPLEMENT_DYNAMIC(CScrMain, CMDIFrameWnd) BEGIN_MESSAGE_MAP(CScrMain, CMDIFrameWnd) //{{AFX_MSG_MAP(CScrMain) ON_WM_CREATE() ON_COMMAND(IDM_CAPTURE_ACTIVECLIENT, OnCaptureActiveclient) ON_COMMAND(IDM_CAPTURE_ACTIVEWINDOW, OnCaptureActivewindow) ON_COMMAND(IDM_CAPTURE_FROMEXEDLGTABBEDVIEW, OnCaptureFromexedlgtabbedview) ON_COMMAND(IDM_CAPTURE_FROMEXEDLGTREE, OnCaptureFromexedlgtree) ON_COMMAND(IDM_CAPTURE_FULLSCREEN, OnCaptureFullscreen) ON_COMMAND(IDM_CAPTURE_MENUUNDERCURSOR, OnCaptureMenuundercursor) ON_COMMAND(IDM_CAPTURE_MOUSECURSOR, OnCaptureMousecursor) ON_COMMAND(IDM_CAPTURE_SELECTEDAREA, OnCaptureSelectedarea) ON_COMMAND(IDM_CAPTURE_SELECTEDOBJECT, OnCaptureSelectedobject) ON_COMMAND(IDM_CAPTURE_WALLPAPER, OnCaptureWallpaper) ON_COMMAND(IDM_CAPTURE_WINDOWUNDERCURSOR, OnCaptureWindowundercursor) ON_COMMAND(IDM_OPTIONS_AREA, OnOptionsArea) ON_COMMAND(IDM_OPTIONS_OBJECT, OnOptionsObject) ON_COMMAND(IDM_OPTIONS_OPTIONS, OnOptionsOptions) ON_UPDATE_COMMAND_UI(IDM_CAPTURE_ACTIVECLIENT, OnUpdateCaptureActiveclient) ON_UPDATE_COMMAND_UI(IDM_CAPTURE_ACTIVEWINDOW, OnUpdateCaptureActivewindow) ON_UPDATE_COMMAND_UI(IDM_CAPTURE_FROMEXEDLGTABBEDVIEW, OnUpdateCaptureFromexedlgtabbedview) ON_UPDATE_COMMAND_UI(IDM_CAPTURE_FROMEXEDLGTREE, OnUpdateCaptureFromexedlgtree) ON_UPDATE_COMMAND_UI(IDM_CAPTURE_FULLSCREEN, OnUpdateCaptureFullscreen) ON_UPDATE_COMMAND_UI(IDM_CAPTURE_MENUUNDERCURSOR, OnUpdateCaptureMenuundercursor) ON_UPDATE_COMMAND_UI(IDM_CAPTURE_MOUSECURSOR, OnUpdateCaptureMousecursor) ON_UPDATE_COMMAND_UI(IDM_CAPTURE_SELECTEDAREA, OnUpdateCaptureSelectedarea) ON_UPDATE_COMMAND_UI(IDM_CAPTURE_SELECTEDOBJECT, OnUpdateCaptureSelectedobject) ON_UPDATE_COMMAND_UI(IDM_CAPTURE_WALLPAPER, OnUpdateCaptureWallpaper) ON_UPDATE_COMMAND_UI(IDM_CAPTURE_WINDOWUNDERCURSOR, OnUpdateCaptureWindowundercursor) ON_COMMAND(IDM_CAPTURE_STOP, OnCaptureStop) ON_UPDATE_COMMAND_UI(IDM_CAPTURE_STOP, OnUpdateCaptureStop) ON_WM_CLOSE() ON_WM_SYSCOLORCHANGE() ON_WM_PALETTEISCHANGING() ON_WM_PALETTECHANGED() ON_WM_QUERYNEWPALETTE() //}}AFX_MSG_MAP END_MESSAGE_MAP() static UINT indicators[] = { ID_SEPARATOR, // status line indicator ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, }; ///////////////////////////////////////////////////////////////////////////// // CScrMain construction/destruction CScrMain::CScrMain() { m_nCapture = SCRCAP_NONE; } CScrMain::~CScrMain() { } int CScrMain::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CMDIFrameWnd::OnCreate(lpCreateStruct) == -1) return -1; // if (!m_wndToolBar.Create(this) || // !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) // { // TRACE0("Failed to create toolbar\n"); // return -1; // fail to create // } if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) { TRACE0("Failed to create status bar\n"); return -1; // fail to create } // TODO: Remove this if you don't want tool tips or a resizeable toolbar m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC); // // TODO: Delete these three lines if you don't want the toolbar to // // be dockable // m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); // EnableDocking(CBRS_ALIGN_ANY); // DockControlBar(&m_wndToolBar); /////////////////////////////////////// // This is my code. CRect rcClient(0,0,1,1); BSTR lpLic = SysAllocString(_szLicString); m_CapOCX.Create(NULL, 0, rcClient, this, IDC_CAPTUREWINDOW, NULL, FALSE, lpLic); m_CapOCX.ShowWindow(SW_HIDE); SysFreeString(lpLic); m_CapOCX.SetEnableMethodErrors(FALSE); m_CapOCX.SetCaptureHotKey(VK_F11); // My code ends here /////////////////////////////////////// return 0; } BOOL CScrMain::PreCreateWindow(CREATESTRUCT& cs) { // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return CMDIFrameWnd::PreCreateWindow(cs); } ///////////////////////////////////////////////////////////////////////////// // CScrMain diagnostics #ifdef _DEBUG void CScrMain::AssertValid() const { CMDIFrameWnd::AssertValid(); } void CScrMain::Dump(CDumpContext& dc) const { CMDIFrameWnd::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CScrMain message handlers void CScrMain::OnCaptureFullscreen() { int nResult, nType=SCRCAP_FULL_SCREEN; if(m_CapOCX.GetCaptureHotKey()!=0) if (m_nCapture == nType) { return; } m_nCapture = nType; m_CapOCX.StopCapture(); if(m_CapOCX.GetCaptureHotKey()!=0) { while (m_nCapture == nType) { nResult = m_CapOCX.CaptureFullScreen(); if (nResult != 0) { m_nCapture = SCRCAP_NONE; } } } else nResult = m_CapOCX.CaptureFullScreen(); } void CScrMain::OnCaptureActiveclient() { int nResult, nType=SCRCAP_ACTIVE_CLIENT; if(m_CapOCX.GetCaptureHotKey()!=0) if (m_nCapture == nType) { return; } m_nCapture = nType; m_CapOCX.StopCapture(); if(m_CapOCX.GetCaptureHotKey()!=0) { while (m_nCapture == nType) { nResult = m_CapOCX.CaptureActiveClient(); if (nResult != 0) { m_nCapture = SCRCAP_NONE; } } } else nResult = m_CapOCX.CaptureActiveClient(); } void CScrMain::OnCaptureActivewindow() { int nResult, nType=SCRCAP_ACTIVE_WINDOW; if(m_CapOCX.GetCaptureHotKey()!=0) if (m_nCapture == nType) { return; } m_nCapture = nType; m_CapOCX.StopCapture(); if(m_CapOCX.GetCaptureHotKey()!=0) { while (m_nCapture == nType) { nResult = m_CapOCX.CaptureActiveWindow(); if (nResult != 0) { m_nCapture = SCRCAP_NONE; } } } else nResult = m_CapOCX.CaptureActiveWindow(); } void CScrMain::OnOptionsArea() { m_nCapture = SCRCAP_NONE; m_CapOCX.StopCapture(); m_CapOCX.CaptureAreaOptionDlg ((short)m_hWnd,0); } void CScrMain::OnCaptureFromexedlgtabbedview() { m_nCapture = SCRCAP_NONE; m_CapOCX.StopCapture(); m_CapOCX.CaptureEXEDlg ((short)m_hWnd,0, NULL, 0, SCR_CAP_EXEDLG_TABVIEW); } void CScrMain::OnCaptureMenuundercursor() { int nResult, nType=SCRCAP_MENU_UNDERCURSOR; if(m_CapOCX.GetCaptureHotKey()!=0) if (m_nCapture == nType) { return; } m_nCapture = nType; m_CapOCX.StopCapture(); if(m_CapOCX.GetCaptureHotKey()!=0) { while (m_nCapture == nType) { nResult = m_CapOCX.CaptureMenuUnderCursor(); if (nResult != 0) { m_nCapture = SCRCAP_NONE; } } } else nResult = m_CapOCX.CaptureMenuUnderCursor(); } void CScrMain::OnOptionsObject() { m_nCapture = SCRCAP_NONE; m_CapOCX.StopCapture(); m_CapOCX.CaptureObjectOptionDlg ((short)m_hWnd,0); } void CScrMain::OnCaptureSelectedobject() { int nResult, nType=SCRCAP_SELECTED_OBJECT; if(m_CapOCX.GetCaptureHotKey()!=0) if (m_nCapture == nType) { return; } m_nCapture = nType; m_CapOCX.StopCapture(); if(m_CapOCX.GetCaptureHotKey()!=0) { while (m_nCapture == nType) { nResult = m_CapOCX.CaptureSelectedObject(); if (nResult != 0) { m_nCapture = SCRCAP_NONE; } } } else nResult = m_CapOCX.CaptureSelectedObject(); } void CScrMain::OnCaptureSelectedarea() { int nResult, nType=SCRCAP_AREA_TRIANGLE; if(m_CapOCX.GetCaptureHotKey()!=0) if (m_nCapture == nType) { return; } m_nCapture = nType; m_CapOCX.StopCapture(); if(m_CapOCX.GetCaptureHotKey()!=0) { while (m_nCapture == nType) { nResult = m_CapOCX.CaptureArea(0); if (nResult != 0) { m_nCapture = SCRCAP_NONE; } } } else nResult = m_CapOCX.CaptureArea(0); } void CScrMain::OnCaptureMousecursor() { int nResult, nType=SCRCAP_MOUSE_CURSOR; if(m_CapOCX.GetCaptureHotKey()!=0) if (m_nCapture == nType) { return; } m_nCapture = nType; m_CapOCX.StopCapture(); if(m_CapOCX.GetCaptureHotKey()!=0) { while (m_nCapture == nType) { nResult = m_CapOCX.CaptureMouseCursor(); if (nResult != 0) { m_nCapture = SCRCAP_NONE; } } } else nResult = m_CapOCX.CaptureMouseCursor(); } void CScrMain::OnOptionsOptions() { m_nCapture = SCRCAP_NONE; m_CapOCX.StopCapture(); m_CapOCX.CaptureOptionDlg ((short)m_hWnd,0); } void CScrMain::OnCaptureWallpaper() { int nResult, nType=SCRCAP_WALLPAPER; if(m_CapOCX.GetCaptureHotKey()!=0) if (m_nCapture == nType) { return; } m_nCapture = nType; m_CapOCX.StopCapture(); if(m_CapOCX.GetCaptureHotKey()!=0) { while (m_nCapture == nType) { nResult = m_CapOCX.CaptureWallPaper(); if (nResult != 0) { m_nCapture = SCRCAP_NONE; } } } else nResult = m_CapOCX.CaptureWallPaper(); } void CScrMain::OnCaptureFromexedlgtree() { m_nCapture = SCRCAP_NONE; m_CapOCX.StopCapture(); m_CapOCX.CaptureEXEDlg ((short)m_hWnd,0, NULL, 0, SCR_CAP_EXEDLG_TREEVIEW); } void CScrMain::OnCaptureWindowundercursor() { int nResult, nType=SCRCAP_WINDOW_UNDER_CURSOR; if(m_CapOCX.GetCaptureHotKey()!=0) if (m_nCapture == nType) { return; } m_nCapture = nType; m_CapOCX.StopCapture(); if(m_CapOCX.GetCaptureHotKey()!=0) { while (m_nCapture == nType) { nResult = m_CapOCX.CaptureWindowUnderCursor(); if (nResult != 0) { m_nCapture = SCRCAP_NONE; } } } else nResult = m_CapOCX.CaptureWindowUnderCursor(); } void CScrMain::OnUpdateCaptureActiveclient(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nCapture == SCRCAP_ACTIVE_CLIENT); } void CScrMain::OnUpdateCaptureActivewindow(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nCapture == SCRCAP_ACTIVE_WINDOW); } void CScrMain::OnUpdateCaptureFromexedlgtabbedview(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nCapture == SCRCAP_FROM_EXE); } void CScrMain::OnUpdateCaptureFromexedlgtree(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nCapture == SCRCAP_FROM_EXE); } void CScrMain::OnUpdateCaptureFullscreen(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nCapture == SCRCAP_FULL_SCREEN); } void CScrMain::OnUpdateCaptureMenuundercursor(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nCapture == SCRCAP_MENU_UNDERCURSOR); } void CScrMain::OnUpdateCaptureMousecursor(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nCapture == SCRCAP_MOUSE_CURSOR); } void CScrMain::OnUpdateCaptureSelectedarea(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nCapture == SCRCAP_AREA_TRIANGLE); } void CScrMain::OnUpdateCaptureSelectedobject(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nCapture == SCRCAP_SELECTED_OBJECT); } void CScrMain::OnUpdateCaptureWallpaper(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nCapture == SCRCAP_WALLPAPER); } void CScrMain::OnUpdateCaptureWindowundercursor(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_nCapture == SCRCAP_WINDOW_UNDER_CURSOR); } void CScrMain::OnCaptureStop() { if (m_nCapture == SCRCAP_NONE) { return; } m_nCapture = SCRCAP_NONE; m_CapOCX.StopCapture(); } void CScrMain::OnUpdateCaptureStop(CCmdUI* pCmdUI) { pCmdUI->Enable(m_nCapture != SCRCAP_NONE); } void CScrMain::OnClose() { if (m_nCapture != SCRCAP_NONE) { MessageBox("The capture must be stopped!", "Warning", MB_ICONWARNING); return; } CMDIFrameWnd::OnClose(); } BOOL CScrMain::OnQueryNewPalette() { CView* pView = GetActiveView(); if( !pView ) return FALSE; return((BOOL) pView->SendMessage(WM_DOREALIZE, (WPARAM)m_hWnd, (LPARAM) FALSE)); } void CScrMain::OnPaletteChanged(CWnd* pFocusWnd) { SendMessageToDescendants(WM_DOREALIZE, (WPARAM)pFocusWnd->m_hWnd, (LPARAM) TRUE); } void CScrMain::OnSysColorChange() { OnQueryNewPalette(); } void CScrMain::OnPaletteIsChanging(CWnd* pRealizeWnd) { OnPaletteChanged(pRealizeWnd); }