OSDN Git Service

2012/01/17 23:23:16
[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
7
8 CAppModule _Module;
9 SIZE nlite::commentWriteWindowSize;
10 const RECT nlite::COMMENTWRITEWINDOW_SEPARATEFSIZE = {5,5,5,5};
11 const CApplicationInfo* nlite::appInfo = NULL;
12 static TCHAR localAppDataPath[_MAX_PATH];
13
14 static WSAData wsaData;                                                 //winsockdata
15 static HINTERNET hInternet = NULL;
16
17 static BOOL InitializeNlite();                                  //\83A\83v\83\8a\83P\81[\83V\83\87\83\93\8f\89\8aú\89»
18 static VOID FinalizeNlite();                                    //\83A\83v\83\8a\83P\81[\83V\83\87\83\93\8fI\97¹\8f\88\97\9d
19 static CNliteMainFrame wnd;                                             //\83\81\83C\83\93\83t\83\8c\81[\83\80\83E\83B\83\93\83h\83E
20 int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE,
21         LPTSTR lpCmdLine, int nCmdShow)
22 {
23    
24         int nRet = -1;
25         try{
26                 InitCommonControls();
27
28                 if(_Module.Init(NULL, hInstance) != S_OK){
29                         throw AppInitException(__LINE__,TEXT(__FILE__));
30                 }
31                         
32                 if(InitializeNlite() != TRUE){
33                         throw AppInitException(__LINE__,TEXT(__FILE__));
34                 }
35                 
36                 
37
38                 
39                 
40                 CMessageLoop theLoop;
41                 _Module.AddMessageLoop(&theLoop);
42
43
44                 wnd.Initialize(localAppDataPath);
45                 wnd.CreateEx(0,0,WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN);
46                 wnd.ShowWindow(nCmdShow);
47                 wnd.UpdateWindow();
48                 
49                 _heapmin();
50
51                 
52
53                 nRet = theLoop.Run();
54
55                 vcassert(_heapchk() == _HEAPOK,TEXT("\83q\81[\83v\83G\83\89\81[\82Å\82·"));
56
57                 goto nliteend;
58                 
59         } catch(nlite::Exception &e){
60                 CNLiteString errMessage(TEXT("\83G\83\89\81[\83\81\83b\83Z\81[\83W:"));
61                 errMessage += e.what();
62                 errMessage += TEXT("\r\n\8ds\94Ô\8d\86:");
63                 std::wostringstream num;
64                 num << e.getLineNo();
65                 errMessage += num.str().c_str();
66                 errMessage += TEXT("\r\n\83t\83@\83C\83\8b\96¼:");
67                 errMessage += e.getFileName();
68                 
69                 MessageBox(NULL,errMessage,TEXT("\83n\83\93\83h\83\8b\82³\82ê\82Ä\82È\82¢\83G\83\89\81["),MB_ICONERROR | MB_OK);
70                 errprint(TEXT("\83n\83\93\83h\83\8b\82³\82ê\82Ä\82¢\82È\82¢\83G\83\89\81[:%s"),errMessage);
71
72                 goto nlitefinally;
73         }catch(std::exception &e){
74                 
75                 MessageBoxA(NULL,e.what(),"\83n\83\93\83h\83\8b\82³\82ê\82Ä\82È\82¢\95s\96¾\82Ì\83G\83\89\81[",MB_ICONERROR | MB_OK);
76                 errprint_mb(CP_THREAD_ACP,"\83n\83\93\83h\83\8b\82³\82ê\82Ä\82¢\82È\82¢\95s\96¾\82È\83G\83\89\81[:%s",e.what());
77
78                 goto nlitefinally;
79         } 
80
81 nlitefinally:
82         wnd.OnException();
83         wnd.DestroyWindow();
84
85
86 nliteend:
87
88         _Module.RemoveMessageLoop();
89         FinalizeNlite();
90         _Module.Term();
91
92
93         return nRet;
94 }
95
96 static BOOL InitializeNlite(){
97
98         BOOL rslt = FALSE;
99
100         try{
101                 CFont font;
102                 font = AtlGetDefaultGuiFont();
103                 LOGFONT defaultFontLog;
104                 font.GetLogFont(&defaultFontLog);
105                 nlite::commentWriteWindowSize.cx = 0;
106                 nlite::commentWriteWindowSize.cy = defaultFontLog.lfHeight == 0 ? 30 : defaultFontLog.lfHeight < 0 ? (( -1 * defaultFontLog.lfHeight) * 2) + nlite::COMMENTWRITEWINDOW_SEPARATEFSIZE.bottom + nlite::COMMENTWRITEWINDOW_SEPARATEFSIZE.top : (defaultFontLog.lfHeight * 2) + nlite::COMMENTWRITEWINDOW_SEPARATEFSIZE.bottom + nlite::COMMENTWRITEWINDOW_SEPARATEFSIZE.top;
107                 nlite::appInfo = &CApplicationInfo::getInstance();
108                 INT_PTR err;
109                 INT_PTR count = 0;
110
111                 //WSAData\82ð\8f\89\8aú\89»
112                 while((err = WSAStartup(MAKEWORD(2,0),&wsaData)) == WSASYSNOTREADY){
113
114                         count++;
115                         if(count >= 5)break;
116                         Sleep(500);
117
118
119
120                 }
121                 
122                 if(err != ERROR_SUCCESS){
123
124                         throw AppInitException(__LINE__,TEXT(__FILE__));
125                 }
126
127                 const CApplicationInfo &appInfo = CApplicationInfo::getInstance();
128                 CNLiteString userAgent;
129                 userAgent = appInfo.getProcuctName();
130                 userAgent += TEXT("/");
131                 userAgent += appInfo.getProductVersion();
132
133
134                 hInternet = WinHttpOpen(userAgent,WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,(LPCWSTR)WINHTTP_NO_PROXY_NAME,(LPCWSTR)WINHTTP_NO_PROXY_BYPASS,0);
135
136                 if(hInternet == NULL){
137
138                         throw AppInitException(__LINE__,TEXT(__FILE__));
139
140                 }
141
142                 InitializeNLIB(hInternet);
143
144                 if(SHGetFolderPathW(0,CSIDL_LOCAL_APPDATA,0,SHGFP_TYPE_CURRENT,localAppDataPath) != S_OK){
145
146                         throw AppInitException(__LINE__,TEXT(__FILE__));
147                 }
148
149
150                 SystemParametersInfo (SPI_SETLISTBOXSMOOTHSCROLLING,FALSE,FALSE,0);
151
152
153         }catch (AppInitException e){
154
155                 return rslt;
156
157         }
158
159
160
161         rslt = TRUE;
162
163
164         return rslt;
165 }
166
167
168  VOID FinalizeNlite(){
169
170          wnd.Finalaize();
171          FinalizeNLIB();
172          WinHttpCloseHandle(hInternet);
173          WSACleanup();
174
175          return;
176  }