⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uiapp.cpp

📁 vc座的资源管理器源代码
💻 CPP
字号:
//*******************************************************************************
// COPYRIGHT NOTES
// ---------------
// You may use this source code, compile or redistribute it as part of your application 
// for free. You cannot redistribute it as a part of a software development 
// library without the agreement of the author. If the sources are 
// distributed along with the application, you should leave the original 
// copyright notes in the source code without any changes.
// This code can be used WITHOUT ANY WARRANTIES at your own risk.
// 
// For the latest updates to this code, check this site:
// http://www.masmex.com 
// after Sept 2000
// 
// Copyright(C) 2000 Philip Oldaker <email: philip@masmex.com>
//*******************************************************************************

#include "stdafx.h"
#include "UIFrameWnd.h"
#include "UIApp.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CUIApp

IMPLEMENT_DYNAMIC(CUIApp,CWinApp)

BEGIN_MESSAGE_MAP(CUIApp, CWinApp)
	//{{AFX_MSG_MAP(CUIApp)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
	// Standard file based document commands
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CUIApp construction

CUIApp::CUIApp()  
{
	// TODO: add construction code here,
	// Place all significant initialization in InitInstance
	m_IDMyIcon = 0;
	m_bMyClassRegistered = false;
}

CDocTemplate *CUIApp::GetFirstDocTemplate()
{
	POSITION posTempl = GetFirstDocTemplatePosition();
	CDocTemplate *pTempl = GetNextDocTemplate(posTempl);
	ASSERT(pTempl);
	return pTempl;
}

CFrameWnd *CUIApp::GetMainFrame(CWnd *pWnd)
{
	if (pWnd)
		return pWnd->GetParentFrame();
	return (CFrameWnd*)m_pMainWnd;
}

CString CUIApp::GetRegAppKey()
{
	CString sKey;
	sKey += _T("Software");
	sKey += _T("\\");
	sKey += m_pszRegistryKey;
	sKey += _T("\\");
	sKey += m_pszProfileName;
	sKey += _T("\\");
	return sKey;
}

BOOL CUIApp::InitInstance()
{	
	if (!m_sMyClassName.IsEmpty() && !RegisterMyClass())
		return FALSE;
	return CWinApp::InitInstance();
}

int CUIApp::ExitInstance() 
{
	// TODO: Add your specialized code here and/or call the base class
    if(m_bMyClassRegistered)
       ::UnregisterClass(m_sMyClassName,AfxGetInstanceHandle());

	return CWinApp::ExitInstance();
}
                                                                      
/////////////////////////////////////////////////////////////////////////////
// The one and only CUIApp object
bool CUIApp::RegisterMyClass()
{
	// Register our unique class name so only one instance can be started
	//////////////////////////////////////////////////////////////
	ASSERT(!m_sMyClassName.IsEmpty());
	if (m_sMyClassName.IsEmpty())
		return false;
	//////////////////////////////////////////////////////////////
    WNDCLASSEX wndcls; 
    memset(&wndcls, 0, sizeof(WNDCLASSEX));    
	wndcls.cbSize = sizeof(WNDCLASSEX);
    wndcls.style = CS_DBLCLKS;// | CS_HREDRAW | CS_VREDRAW;
    wndcls.lpfnWndProc = ::DefWindowProc;
    wndcls.hInstance = AfxGetInstanceHandle();
	if (m_IDMyIcon)
	{
		wndcls.hIcon = LoadIcon(m_IDMyIcon); 
		wndcls.hIconSm = (HICON)LoadImage(AfxGetInstanceHandle(), 
            MAKEINTRESOURCE(m_IDMyIcon),
            IMAGE_ICON,
            GetSystemMetrics(SM_CXSMICON),
            GetSystemMetrics(SM_CYSMICON),
            0);
			if (wndcls.hIconSm == NULL)
			{
				ErrorMessage(_T("LoadImage failed"));
			}
	}
	wndcls.hCursor = LoadStandardCursor(IDC_ARROW);
    wndcls.hbrBackground = NULL; //(HBRUSH) (COLOR_WINDOW + 1);
    wndcls.lpszMenuName = NULL; 
    // Specify our own class name for using FindWindow later to set focus to running app
    wndcls.lpszClassName = m_sMyClassName; 
	WNDCLASSEX wndclsEx;
	if (GetClassInfoEx(wndcls.hInstance, wndcls.lpszClassName, &wndclsEx))
	{
		// class already registered
		return true;
	}
    // Register new class and exit if it fails
    if(!::RegisterClassEx(&wndcls))
    {
		ErrorMessage(_T("Class Registration Failed"));
		return false;
    }
	else
		TRACE(_T("Window class %s was registered in CUIApp\n"),GetMyClass());
	m_bMyClassRegistered = true;
	return true;
}

BOOL CUIApp::FirstInstance()
{
	ASSERT(!m_sMyClassName.IsEmpty());
	if (m_sMyClassName.IsEmpty())
		return TRUE;

	CWnd *pWndPrev, *pWndChild;
	// Determine if another window with our class name exists...
	if (pWndPrev = CWnd::FindWindow(m_sMyClassName,NULL))
	{
		// if so, does it have any popups?
		pWndChild = pWndPrev->GetLastActivePopup();

		// If iconic, restore the main window
		if (pWndPrev->IsIconic())
		   pWndPrev->ShowWindow(SW_RESTORE);

		// Bring the main window or its popup to
		// the foreground
		pWndChild->SetForegroundWindow();

		// and we are done activating the previous one.
		return FALSE;
	}
	return TRUE;
}


/////////////////////////////////////////////////////////////////////////////
// CUIApp initialization
void CUIApp::SetStatusBarText(UINT nPaneID,LPCTSTR Text,UINT nIconID)
{
	if (m_pMainWnd == NULL)
	{
		TRACE1("Warning: '%s' SetStatusBarText called before main frame created!\n",Text);
		return;
	}
	CUIFrameWnd *pMainFrame = (CUIFrameWnd*)m_pMainWnd;
	if (nIconID)
		pMainFrame->GetStatusBar().AddIcon(nPaneID,nIconID,false);
	pMainFrame->GetStatusBar().SetText(nPaneID,Text,true);     
}

void CUIApp::SetStatusBarText(LPCTSTR Text)
{
	SetStatusBarText(0,Text);
}

void CUIApp::SetStatusBarText(UINT nPaneID,LPCTSTR Text,CView *pView,UINT nIconID)
{
	if (m_pMainWnd == NULL)
		return;
	if (((CFrameWnd*)m_pMainWnd)->GetActiveView() == pView)
		SetStatusBarText(nPaneID,Text,nIconID);
}

void CUIApp::SetStatusBarText(UINT nPaneID,UINT nResID,UINT nIconID)
{
	CString str;
	str.LoadString(nResID);
	SetStatusBarText(nPaneID,str,nIconID);
}

void CUIApp::SetStatusBarIcon(UINT nPaneID,UINT nIconID,bool bAdd)
{
	if (m_pMainWnd == NULL)
		return;
	CUIFrameWnd *pMainFrame = (CUIFrameWnd*)m_pMainWnd;
	if (bAdd)
		pMainFrame->GetStatusBar().AddIcon(nPaneID,nIconID);
	else
		pMainFrame->GetStatusBar().RemoveIcon(nPaneID,nIconID);
	pMainFrame->GetStatusBar().RedrawWindow();
}

void CUIApp::SetStatusBarIdleMessage()
{
	if (m_pMainWnd == NULL)
		return;
	CUIFrameWnd *pMainFrame = (CUIFrameWnd*)m_pMainWnd;
	pMainFrame->GetStatusBar().RemoveAllIcons(0);
	SetStatusBarText(0,AFX_IDS_IDLEMESSAGE);
}

CDocument *CUIApp::GetDocument()
{
	CDocTemplate *pTempl = GetFirstDocTemplate();
	POSITION posDoc = pTempl->GetFirstDocPosition();
	CDocument *pDoc = pTempl->GetNextDoc(posDoc);
	ASSERT(pDoc);
	return pDoc; 
}

CView *CUIApp::GetView(CRuntimeClass *pClass)
{
	CDocTemplate *pTemplate = GetFirstDocTemplate();
	POSITION posDoc = pTemplate->GetFirstDocPosition();
	while (posDoc)
	{
		  CDocument *pDoc = pTemplate->GetNextDoc(posDoc); 
		  POSITION posView = pDoc->GetFirstViewPosition();
		  while (posView) 
		  {
				CView *pView = pDoc->GetNextView(posView); 
				if (pView && pView->IsKindOf(pClass))
					return pView;
		  }
    }
	return NULL;
}

void CUIApp::ChangeProfile(LPCTSTR szRegistryKey,LPCTSTR szProfileName)
{
	m_strOldProfileName = m_pszProfileName;
	m_strOldRegistryKey = m_pszRegistryKey;
	free((void*)m_pszRegistryKey);
	m_pszRegistryKey = _tcsdup(szRegistryKey);
	free((void*)m_pszProfileName);
	m_pszProfileName = _tcsdup(szProfileName);
}

void CUIApp::RestoreProfile()
{
	if (!m_strOldProfileName.IsEmpty())
	{
		free((void*)m_pszProfileName);
		m_pszProfileName = _tcsdup(m_strOldProfileName);
	}
	if (!m_strOldRegistryKey.IsEmpty()) 
	{
		free((void*)m_pszRegistryKey);
		m_pszRegistryKey = _tcsdup(m_strOldRegistryKey);
	}
}

/////////////////////////////////////////////////////////////////////////////
// CAppReg
// Tricks MFC into using another application key 
// useful if in HKEY_CURRENT_USER
CAppReg::CAppReg(CWinApp *pApp,LPCTSTR szRegistryKey,LPCTSTR szProfileName) 
{
	ASSERT(pApp);
	m_pApp = (CUIApp*)pApp;
	m_pApp->ChangeProfile(szRegistryKey,szProfileName);
}

CAppReg::~CAppReg()
{
	ASSERT(m_pApp);
	m_pApp->RestoreProfile();
}

//static 
bool CUIApp::COMMessage(HRESULT hr,UINT nID)
{
	CString sMess;
	sMess.LoadString(nID);
	return COMMessage(hr,sMess);
}

bool CUIApp::COMMessage(HRESULT hr,LPCTSTR szText)
{
	if (FAILED(hr))
	{
		ErrorMessage(szText,(DWORD)hr);
		return false;
	}
	return true;
}

void CUIApp::ErrorMessage(UINT nID,DWORD dwError)
{
	CString sMess;
	sMess.LoadString(nID);
	ErrorMessage(sMess);
}

void CUIApp::ErrorMessage(LPCTSTR szText,DWORD dwError)
{
	bool bError=true;
	if (dwError == 0)
	{
		dwError = GetLastError();
		bError = true;
	}
	else
	{
		bError = FAILED(dwError);
	}
	LPVOID lpMsgBuf=NULL;
	if (bError)
	{
		FormatMessage( 
			FORMAT_MESSAGE_ALLOCATE_BUFFER | 
			FORMAT_MESSAGE_FROM_SYSTEM | 
			FORMAT_MESSAGE_IGNORE_INSERTS,
			NULL,
			dwError,
			MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
			(LPTSTR) &lpMsgBuf,
			0,
			NULL 
		);
	}
	// Process any inserts in lpMsgBuf.
	// ...
	// Display the string.
	CString sMess;
	if (lpMsgBuf)
	{
		sMess = (LPCTSTR)lpMsgBuf;
		sMess += _T("\n");
		LocalFree( lpMsgBuf );	
	}
	if (szText)
	{
		sMess += szText;
	}
	AfxMessageBox(sMess, MB_ICONSTOP );
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -