OSDN Git Service

URLクリック時リンク機能実装
[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         HINSTANCE hRich = LoadLibrary(CRichEditCtrl::GetLibraryName());
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(nlib::Exception &e){
85                 
86                 UnexpectedErrorMessageShow(TEXT("nlib\82Å\83n\83\93\83h\83\8b\82³\82ê\82Ä\82¢\82È\82¢\83G\83\89\81["),e.what(),e.getLineNo(),e.getFileName(),e.getFunctionName());
87                 
88                 goto nlitefinally;
89         }catch(std::exception &e){
90                 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ñ"));
91
92                 
93
94                 goto nlitefinally;
95         } 
96
97 nlitefinally:
98         wnd.OnException();
99         wnd.DestroyWindow();
100         FreeLibrary(hRich);
101
102 nliteend:
103
104         _Module.RemoveMessageLoop();
105         FinalizeNlite();
106         _Module.Term();
107
108
109         return nRet;
110 }
111
112 static BOOL InitializeNlite(){
113
114         BOOL rslt = FALSE;
115
116         try{
117                 
118                 nlite::appInfo = &CApplicationInfo::getInstance();
119                 INT_PTR err;
120                 INT_PTR count = 0;
121
122                 //WSAData\82ð\8f\89\8aú\89»
123                 while((err = WSAStartup(MAKEWORD(2,0),&wsaData)) == WSASYSNOTREADY){
124
125                         count++;
126                         if(count >= 5)break;
127                         Sleep(500);
128
129
130
131                 }
132                 
133                 if(err != ERROR_SUCCESS){
134
135                         throw AppInitException(__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
136                 }
137
138                 const CApplicationInfo &appInfo = CApplicationInfo::getInstance();
139                 CNLiteString userAgent;
140                 userAgent = appInfo.getProcuctName();
141                 userAgent += TEXT("/");
142                 userAgent += appInfo.getProductVersion();
143
144
145                 hInternet = WinHttpOpen(userAgent,WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,(LPCWSTR)WINHTTP_NO_PROXY_NAME,(LPCWSTR)WINHTTP_NO_PROXY_BYPASS,0);
146
147                 if(hInternet == NULL){
148
149                         throw AppInitException(__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
150
151                 }
152
153                 InitializeNLIB(hInternet);
154
155                 if(SHGetFolderPathW(0,CSIDL_LOCAL_APPDATA,0,SHGFP_TYPE_CURRENT,localAppDataPath) != S_OK){
156
157                         throw AppInitException(__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
158                 }
159
160
161                 SystemParametersInfo (SPI_SETLISTBOXSMOOTHSCROLLING,FALSE,FALSE,0);
162
163
164         }catch (AppInitException e){
165
166                 return rslt;
167
168         }
169
170
171
172         rslt = TRUE;
173
174
175         return rslt;
176 }
177
178
179  VOID FinalizeNlite(){
180
181          wnd.Finalaize();
182          FinalizeNLIB();
183          WinHttpCloseHandle(hInternet);
184          WSACleanup();
185
186          return;
187  }
188
189  VOID nlite::UnexpectedErrorMessageShow(LPCTSTR headMessage,LPCTSTR summary,UINT line,LPCTSTR fileName,LPCTSTR function){
190         tstring errMessage;
191         errMessage = headMessage;
192         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·");
193         errMessage += TEXT("\r\n\83G\83\89\81[\83\81\83b\83Z\81[\83W:");
194         errMessage += summary;
195         DebugOutW(fileName,function,line,DUMPING__DEBUGER__ | LINEFEAD__DEBUGER__ ,ERRORMODE__DEBUGER__,TEXT("%s"),summary);
196         ::MessageBox(NULL,errMessage.c_str(),TEXT("\91z\92è\82³\82ê\82Ä\82¢\82È\82¢\83G\83\89\81["),MB_ICONERROR | MB_OK);
197         
198
199
200          return;
201  }