-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPicStand.cpp
161 lines (117 loc) · 3.22 KB
/
PicStand.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
// PicStand.cpp : アプリケーション用クラスの定義を行います。
//
#include "stdafx.h"
#include "PicStand.h"
#include "PicStandWnd.h"
#include "Global.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CPicStandApp
BEGIN_MESSAGE_MAP(CPicStandApp, CWinApp)
//{{AFX_MSG_MAP(CPicStandApp)
// メモ - ClassWizard はこの位置にマッピング用のマクロを追加または削除します。
// この位置に生成されるコードを編集しないでください。
//}}AFX_MSG
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CPicStandApp クラスの構築
CPicStandApp::CPicStandApp()
{
m_bSharedFileExist = FALSE;
m_pSharedData = NULL;
m_hMap = NULL;
}
/////////////////////////////////////////////////////////////////////////////
// 唯一の CPicStandApp オブジェクト
CPicStandApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CPicStandApp クラスの初期化
BOOL CPicStandApp::InitInstance()
{
CString CommandString( m_lpCmdLine );
CommandString.MakeUpper();
// アンインストール処理
if( CommandString == "REMOVE" ){
Global_Initialize();
CString PicturePath = Global_GetCurrentDir();
PicturePath = PicturePath + PICTURE_FOLDER;
ITech_RemoveFiles( PicturePath );
ITech_RemoveAllUserAppPathOnTempFile();
HANDLE hMap = OpenFileMapping( FILE_MAP_READ, TRUE, MAPPED_FILE_NAME );
if( hMap ){
SharedData* pSharedData = (SharedData*)MapViewOfFile(
hMap, FILE_MAP_READ, 0, 0, sizeof(SharedData) );
if( pSharedData ){
::SendMessage( pSharedData->hWnd, WM_CLOSE, NULL, NULL );
}
UnmapViewOfFile( pSharedData );
CloseHandle( hMap );
}
return FALSE;
}
// Shared File Mapping の生成
m_hMap = CreateFileMapping(
(HANDLE)0xffffffff,
NULL,
PAGE_READWRITE | SEC_COMMIT,
0, sizeof( SharedData ),
MAPPED_FILE_NAME );
if( GetLastError() == ERROR_ALREADY_EXISTS ){
m_bSharedFileExist = TRUE;
}
if( !m_hMap ){
return FALSE;
}
m_pSharedData = (SharedData*)MapViewOfFile(
m_hMap, FILE_MAP_ALL_ACCESS, 0, 0, sizeof(SharedData) );
// 既に立ち上がっている場合の処理
if( m_bSharedFileExist ){
if( IsWindow( m_pSharedData->hWnd ) ){
SetForegroundWindow( m_pSharedData->hWnd );
}
UnmapViewOfFile( m_pSharedData );
m_pSharedData = NULL;
CloseHandle( m_hMap );
m_hMap = NULL;
return FALSE;
}
// RegistryKeyのルート設定
SetRegistryKey( _T( "IdeaTech" ) );
// Global データの初期化
Global_Initialize();
// Window の生成
CPicStandWnd* pPicStandWnd = new CPicStandWnd;
m_pMainWnd = pPicStandWnd;
if( !pPicStandWnd->Create() ){ return FALSE; }
pPicStandWnd->ShowWindow(SW_SHOW);
pPicStandWnd->UpdateWindow();
return TRUE;
}
int CPicStandApp::ExitInstance()
{
if( !m_bSharedFileExist ){
// ファイルマッピングの削除
if( m_pSharedData ){
UnmapViewOfFile( m_pSharedData );
m_pSharedData = NULL;
}
if( m_hMap ){
CloseHandle( m_hMap );
m_hMap = NULL;
}
// Global データ終了処理
Global_Finalize();
}
return CWinApp::ExitInstance();
}
void CPicStandApp::SetHandleToSharedData(HWND hWnd)
{
if( !m_bSharedFileExist ){
m_pSharedData->hWnd = hWnd;
}
}