182 lines
3.8 KiB
C++
182 lines
3.8 KiB
C++
// CPRobot.cpp : 응용 프로그램에 대한 클래스 동작을 정의합니다.
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "CPRobot.h"
|
|
#include "CPRobotDlg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#endif
|
|
|
|
|
|
#define IDR_VCOPT 103
|
|
|
|
CVCOptModule _Module;
|
|
|
|
BEGIN_OBJECT_MAP(ObjectMap)
|
|
END_OBJECT_MAP()
|
|
|
|
LONG CVCOptModule::Unlock()
|
|
{
|
|
AfxOleUnlockApp();
|
|
return 0;
|
|
}
|
|
|
|
LONG CVCOptModule::Lock()
|
|
{
|
|
AfxOleLockApp();
|
|
return 1;
|
|
}
|
|
LPCTSTR CVCOptModule::FindOneOf(LPCTSTR p1, LPCTSTR p2)
|
|
{
|
|
while (*p1 != NULL)
|
|
{
|
|
LPCTSTR p = p2;
|
|
while (*p != NULL)
|
|
{
|
|
if (*p1 == *p)
|
|
return CharNext(p1);
|
|
p = CharNext(p);
|
|
}
|
|
p1++;
|
|
}
|
|
return NULL;
|
|
}
|
|
|
|
|
|
|
|
// CCPRobotApp
|
|
|
|
BEGIN_MESSAGE_MAP(CCPRobotApp, CWinAppEx)
|
|
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
// CCPRobotApp 생성
|
|
|
|
CCPRobotApp::CCPRobotApp()
|
|
{
|
|
// TODO: 여기에 생성 코드를 추가합니다.
|
|
// InitInstance에 모든 중요한 초기화 작업을 배치합니다.
|
|
}
|
|
|
|
|
|
// 유일한 CCPRobotApp 개체입니다.
|
|
|
|
CCPRobotApp theApp;
|
|
|
|
|
|
// CCPRobotApp 초기화
|
|
BOOL CCPRobotApp::InitATL()
|
|
{
|
|
m_bATLInited = TRUE;
|
|
|
|
#if _WIN32_WINNT >= 0x0400
|
|
HRESULT hRes = CoInitializeEx(NULL, COINIT_MULTITHREADED);
|
|
#else
|
|
HRESULT hRes = CoInitialize(NULL);
|
|
#endif
|
|
|
|
if (FAILED(hRes))
|
|
{
|
|
m_bATLInited = FALSE;
|
|
return FALSE;
|
|
}
|
|
|
|
_Module.Init(ObjectMap, AfxGetInstanceHandle());
|
|
_Module.dwThreadID = GetCurrentThreadId();
|
|
|
|
LPTSTR lpCmdLine = GetCommandLine(); //this line necessary for _ATL_MIN_CRT
|
|
TCHAR szTokens[] = _T("-/");
|
|
|
|
BOOL bRun = TRUE;
|
|
LPCTSTR lpszToken = _Module.FindOneOf(lpCmdLine, szTokens);
|
|
while (lpszToken != NULL)
|
|
{
|
|
if (lstrcmpi(lpszToken, _T("UnregServer"))==0)
|
|
{
|
|
_Module.UpdateRegistryFromResource(IDR_VCOPT, FALSE);
|
|
_Module.UnregisterServer(TRUE); //TRUE means typelib is unreg'd
|
|
bRun = FALSE;
|
|
break;
|
|
}
|
|
if (lstrcmpi(lpszToken, _T("RegServer"))==0)
|
|
{
|
|
_Module.UpdateRegistryFromResource(IDR_VCOPT, TRUE);
|
|
_Module.RegisterServer(TRUE);
|
|
bRun = FALSE;
|
|
break;
|
|
}
|
|
lpszToken = _Module.FindOneOf(lpszToken, szTokens);
|
|
}
|
|
|
|
if (!bRun)
|
|
{
|
|
m_bATLInited = FALSE;
|
|
_Module.Term();
|
|
CoUninitialize();
|
|
return FALSE;
|
|
}
|
|
|
|
hRes = _Module.RegisterClassObjects(CLSCTX_LOCAL_SERVER,
|
|
REGCLS_MULTIPLEUSE);
|
|
if (FAILED(hRes))
|
|
{
|
|
m_bATLInited = FALSE;
|
|
CoUninitialize();
|
|
return FALSE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CCPRobotApp::InitInstance()
|
|
{
|
|
if (!InitATL())
|
|
return FALSE;
|
|
|
|
// InitCommonControlsEx() is required on Windows XP if an application
|
|
// manifest specifies use of ComCtl32.dll version 6 or later to enable
|
|
// visual styles. Otherwise, any window creation will fail.
|
|
INITCOMMONCONTROLSEX InitCtrls;
|
|
InitCtrls.dwSize = sizeof(InitCtrls);
|
|
// Set this to include all the common control classes you want to use
|
|
// in your application.
|
|
InitCtrls.dwICC = ICC_WIN95_CLASSES;
|
|
InitCtrls.dwICC = ICC_COOL_CLASSES;
|
|
InitCommonControlsEx(&InitCtrls);
|
|
|
|
CWinAppEx::InitInstance();
|
|
|
|
|
|
AfxEnableControlContainer();
|
|
|
|
// 표준 초기화
|
|
// 이들 기능을 사용하지 않고 최종 실행 파일의 크기를 줄이려면
|
|
// 아래에서 필요 없는 특정 초기화
|
|
// 루틴을 제거해야 합니다.
|
|
// 해당 설정이 저장된 레지스트리 키를 변경하십시오.
|
|
// TODO: 이 문자열을 회사 또는 조직의 이름과 같은
|
|
// 적절한 내용으로 수정해야 합니다.
|
|
SetRegistryKey(_T("로컬 응용 프로그램 마법사에서 생성된 응용 프로그램"));
|
|
|
|
CCPRobotDlg dlg;
|
|
m_pMainWnd = &dlg;
|
|
INT_PTR nResponse = dlg.DoModal();
|
|
if (nResponse == IDOK)
|
|
{
|
|
// TODO: 여기에 [확인]을 클릭하여 대화 상자가 없어질 때 처리할
|
|
// 코드를 배치합니다.
|
|
}
|
|
else if (nResponse == IDCANCEL)
|
|
{
|
|
// TODO: 여기에 [취소]를 클릭하여 대화 상자가 없어질 때 처리할
|
|
// 코드를 배치합니다.
|
|
}
|
|
|
|
// 대화 상자가 닫혔으므로 응용 프로그램의 메시지 펌프를 시작하지 않고 응용 프로그램을 끝낼 수 있도록 FALSE를
|
|
// 반환합니다.
|
|
return FALSE;
|
|
}
|