OSDN Git Service

2012/01/28 22:22:30
[nlite/nlite.git] / nlite / nlite.cpp
1 // nlite.cpp : \83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Ì\83G\83\93\83g\83\8a \83|\83C\83\93\83g\82ð\92è\8b`\82µ\82Ü\82·\81B
2 //
3
4 #include "stdafx.h"
5 #include "nlite_include.h"
6 using namespace nlite;
7 CAppModule _Module;
8
9
10
11 namespace nlite{
12
13 Property nliteProperty; 
14
15 const CApplicationInfo * appInfo = NULL;
16
17 }
18 static TCHAR localAppDataPath[_MAX_PATH];
19
20 static WSAData wsaData;                                                 //winsockdata
21 static HINTERNET hInternet = NULL;
22
23 static BOOL InitializeNlite();                                  //\83A\83v\83\8a\83P\81[\83V\83\87\83\93\8f\89\8aú\89»
24 static VOID FinalizeNlite();                                    //\83A\83v\83\8a\83P\81[\83V\83\87\83\93\8fI\97¹\8f\88\97\9d
25 static CNliteMainFrame wnd;                                             //\83\81\83C\83\93\83t\83\8c\81[\83\80\83E\83B\83\93\83h\83E
26
27 //\83\81\83C\83\93\8aÖ\90\94
28 int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE,
29         LPTSTR lpCmdLine, int nCmdShow)
30 {
31    
32         int nRet = -1;
33         try{
34
35                 //
36                 //\83A\83v\83\8a\83P\83P\81[\83V\83\87\83\93\8f\89\8aú\89»\8f\88\97\9d
37                 //
38
39                 InitCommonControls();
40
41                 if(_Module.Init(NULL, hInstance) != S_OK){
42                         throw AppInitException(__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
43                 }
44                         
45                 if(InitializeNlite() != TRUE){
46                         throw AppInitException(__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
47                 }
48                 
49                 
50
51                 
52                 
53                 //\83\81\83b\83Z\81[\83W\83\8b\81[\83v\93o\98^
54                 CMessageLoop theLoop;
55                 _Module.AddMessageLoop(&theLoop);
56
57
58                 //\83\81\83C\83\93\83E\83B\83\93\83h\83E\8f\89\8aú\89»
59                 wnd.Initialize(localAppDataPath);
60                 wnd.CreateEx(0,0,WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN);
61
62                 //\83\81\83C\83\93\83E\83B\83\93\83h\83E\95\\8e¦
63                 wnd.ShowWindow(nCmdShow);
64                 wnd.UpdateWindow();
65                 
66                 //\97]\95ª\82É\8am\95Û\82µ\82Ä\82¢\82é\83q\81[\83v\82ð\8aJ\95ú
67                 _heapmin();
68
69                 
70                 //\83\81\83b\83Z\81[\83W\83\8b\81[\83v\8aJ\8en
71                 nRet = theLoop.Run();
72
73                 //\8fI\97¹\8cã\83\81\83\82\83\8a\83`\83F\83b\83N
74                 vcassert(_heapchk() == _HEAPOK,TEXT("\83q\81[\83v\83G\83\89\81[\82Å\82·"));
75
76                 goto nliteend;
77                 
78         } catch(nlite::Exception &e){
79                 
80                 UnexpectedErrorMessageShow(TEXT("\83n\83\93\83h\83\8b\82³\82ê\82Ä\82¢\82È\82¢\83G\83\89\81["),e.what(),e.getLineNo(),e.getFileName(),e.getFunctionName());
81                 
82
83                 goto nlitefinally;
84         }catch(std::exception &e){
85                 UnexpectedErrorMessageShow(TEXT("\83n\83\93\83h\83\8b\82³\82ê\82Ä\82¢\82È\82¢\83G\83\89\81["),CComBSTR(e.what()),-1,TEXT("\94­\90\83t\83@\83C\83\8b\82ª\93Á\92è\8fo\97\88\82Ü\82¹\82ñ"),TEXT("\94­\90\8aÖ\90\94\82ª\93Á\92è\82Å\82«\82Ü\82¹\82ñ"));
86
87                 
88
89                 goto nlitefinally;
90         } 
91
92 nlitefinally:
93         wnd.OnException();
94         wnd.DestroyWindow();
95
96
97 nliteend:
98
99         _Module.RemoveMessageLoop();
100         FinalizeNlite();
101         _Module.Term();
102
103
104         return nRet;
105 }
106
107 static BOOL InitializeNlite(){
108
109         BOOL rslt = FALSE;
110
111         try{
112                 
113                 nlite::appInfo = &CApplicationInfo::getInstance();
114                 INT_PTR err;
115                 INT_PTR count = 0;
116
117                 //WSAData\82ð\8f\89\8aú\89»
118                 while((err = WSAStartup(MAKEWORD(2,0),&wsaData)) == WSASYSNOTREADY){
119
120                         count++;
121                         if(count >= 5)break;
122                         Sleep(500);
123
124
125
126                 }
127                 
128                 if(err != ERROR_SUCCESS){
129
130                         throw AppInitException(__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
131                 }
132
133                 const CApplicationInfo &appInfo = CApplicationInfo::getInstance();
134                 CNLiteString userAgent;
135                 userAgent = appInfo.getProcuctName();
136                 userAgent += TEXT("/");
137                 userAgent += appInfo.getProductVersion();
138
139
140                 hInternet = WinHttpOpen(userAgent,WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,(LPCWSTR)WINHTTP_NO_PROXY_NAME,(LPCWSTR)WINHTTP_NO_PROXY_BYPASS,0);
141
142                 if(hInternet == NULL){
143
144                         throw AppInitException(__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
145
146                 }
147
148                 InitializeNLIB(hInternet);
149
150                 if(SHGetFolderPathW(0,CSIDL_LOCAL_APPDATA,0,SHGFP_TYPE_CURRENT,localAppDataPath) != S_OK){
151
152                         throw AppInitException(__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
153                 }
154
155
156                 SystemParametersInfo (SPI_SETLISTBOXSMOOTHSCROLLING,FALSE,FALSE,0);
157
158
159         }catch (AppInitException e){
160
161                 return rslt;
162
163         }
164
165
166
167         rslt = TRUE;
168
169
170         return rslt;
171 }
172
173
174  VOID FinalizeNlite(){
175
176          wnd.Finalaize();
177          FinalizeNLIB();
178          WinHttpCloseHandle(hInternet);
179          WSACleanup();
180
181          return;
182  }
183
184  VOID nlite::UnexpectedErrorMessageShow(LPCTSTR headMessage,LPCTSTR summary,UINT line,LPCTSTR fileName,LPCTSTR function){
185         tstring errMessage;
186         errMessage = headMessage;
187         errMessage += TEXT("\91z\92è\82³\82ê\82Ä\82¢\82È\82¢\83G\83\89\81[\82ª\94­\90\82µ\82Ü\82µ\82½\81B\83A\83v\83\8a\83P\81[\83V\83\87\83\93\94z\92u\83t\83H\83\8b\83_\82É\8dì\90¬\82³\82ê\82½\83\8d\83O\83t\83@\83C\83\8b\82ð\93n\82µ\82Ä\82à\82ç\82¦\82é\82Æ\8aJ\94­\8eÒ\82ª\94ñ\8fí\82É\8aì\82Ñ\82Ü\82·");
188         errMessage += TEXT("\r\n\83G\83\89\81[\83\81\83b\83Z\81[\83W:");
189         errMessage += summary;
190         DebugOutW(fileName,function,line,DUMPING__DEBUGER__ | LINEFEAD__DEBUGER__ ,ERRORMODE__DEBUGER__,TEXT("%s"),errMessage);
191         ::MessageBox(NULL,errMessage.c_str(),TEXT("\91z\92è\82³\82ê\82Ä\82¢\82È\82¢\83G\83\89\81["),MB_ICONERROR | MB_OK);
192         
193
194
195          return;
196  }