OSDN Git Service

読み取り機能実装途中
[nlite/nlite.git] / nlite / nlite.cpp
index 518a568..6935dcf 100644 (file)
 //
 
 #include "stdafx.h"
-#include "nlite.h"
+#include "nlite_include.h"
+using namespace nlite;
+CAppModule _Module;
 
-#define MAX_LOADSTRING 100
 
-// \83O\83\8d\81[\83o\83\8b\95Ï\90\94:
-HINSTANCE hInst;                                                               // \8c»\8dÝ\82Ì\83C\83\93\83^\81[\83t\83F\83C\83X
-TCHAR szTitle[MAX_LOADSTRING];                                 // \83^\83C\83g\83\8b \83o\81[\82Ì\83e\83L\83X\83g
-TCHAR szWindowClass[MAX_LOADSTRING];                   // \83\81\83C\83\93 \83E\83B\83\93\83h\83\83N\83\89\83X\96¼
 
-// \82±\82Ì\83R\81[\83\83\82\83W\83\85\81[\83\8b\82É\8aÜ\82Ü\82ê\82é\8aÖ\90\94\82Ì\90é\8c¾\82ð\93]\91\97\82µ\82Ü\82·:
-ATOM                           MyRegisterClass(HINSTANCE hInstance);
-BOOL                           InitInstance(HINSTANCE, int);
-LRESULT CALLBACK       WndProc(HWND, UINT, WPARAM, LPARAM);
-INT_PTR CALLBACK       About(HWND, UINT, WPARAM, LPARAM);
 
-int APIENTRY _tWinMain(HINSTANCE hInstance,
-                     HINSTANCE hPrevInstance,
-                     LPTSTR    lpCmdLine,
-                     int       nCmdShow)
+
+
+static WSAData wsaData;                                                        //winsockdata
+static HINTERNET hInternet = NULL;
+
+static BOOL InitializeNlite();                                 //\83A\83v\83\8a\83P\81[\83V\83\87\83\93\8f\89\8aú\89»
+static VOID FinalizeNlite();                                   //\83A\83v\83\8a\83P\81[\83V\83\87\83\93\8fI\97¹\8f\88\97\9d
+static CNliteMainFrame wnd;                                            //\83\81\83C\83\93\83t\83\8c\81[\83\80\83E\83B\83\93\83h\83E
+
+//\83\81\83C\83\93\8aÖ\90\94
+int WINAPI _tWinMain(HINSTANCE hInstance, HINSTANCE,
+       LPTSTR lpCmdLine, int nCmdShow)
 {
-       UNREFERENCED_PARAMETER(hPrevInstance);
-       UNREFERENCED_PARAMETER(lpCmdLine);
-
-       // TODO: \82±\82±\82É\83R\81[\83h\82ð\91}\93ü\82µ\82Ä\82­\82¾\82³\82¢\81B
-       MSG msg;
-       HACCEL hAccelTable;
-
-       // \83O\83\8d\81[\83o\83\8b\95\8e\9a\97ñ\82ð\8f\89\8aú\89»\82µ\82Ä\82¢\82Ü\82·\81B
-       LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
-       LoadString(hInstance, IDC_NLITE, szWindowClass, MAX_LOADSTRING);
-       MyRegisterClass(hInstance);
-
-       // \83A\83v\83\8a\83P\81[\83V\83\87\83\93\82Ì\8f\89\8aú\89»\82ð\8eÀ\8ds\82µ\82Ü\82·:
-       if (!InitInstance (hInstance, nCmdShow))
-       {
-               return FALSE;
-       }
+       HINSTANCE hRich = LoadLibrary(CRichEditCtrl::GetLibraryName());
+       int nRet = -1;
+       try{
+
+               //
+               //\83A\83v\83\8a\83P\83P\81[\83V\83\87\83\93\8f\89\8aú\89»\8f\88\97\9d
+               //
+               HRESULT hRes = ::CoInitialize(NULL);
+               ATLASSERT(SUCCEEDED(hRes));
+               AtlInitCommonControls(ICC_COOL_CLASSES | ICC_WIN95_CLASSES);
+               GUID guid;
+               if(_Module.Init(NULL, hInstance,&guid) != S_OK){
+                       throw AppInitException(__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
+               }
 
-       hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_NLITE));
+               AtlAxWinInit();
 
-       // \83\81\83C\83\93 \83\81\83b\83Z\81[\83\83\8b\81[\83v:
-       while (GetMessage(&msg, NULL, 0, 0))
-       {
-               if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
-               {
-                       TranslateMessage(&msg);
-                       DispatchMessage(&msg);
+               if(InitializeNlite() != TRUE){
+                       throw AppInitException(__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
                }
-       }
 
-       return (int) msg.wParam;
-}
+               g_speaker.SynthesisAsync(TEXT("\83e\83X\83g\83R\83\81\83\93\83g"));
 
+               
+               //\83\81\83b\83Z\81[\83W\83\8b\81[\83v\93o\98^
+               CMessageLoop theLoop;
+               _Module.AddMessageLoop(&theLoop);
 
 
-//
-//  \8aÖ\90\94: MyRegisterClass()
-//
-//  \96Ú\93I: \83E\83B\83\93\83h\83\83N\83\89\83X\82ð\93o\98^\82µ\82Ü\82·\81B
-//
-//  \83R\83\81\83\93\83g:
-//
-//    \82±\82Ì\8aÖ\90\94\82¨\82æ\82Ñ\8eg\82¢\95û\82Í\81A'RegisterClassEx' \8aÖ\90\94\82ª\92Ç\89Á\82³\82ê\82½
-//    Windows 95 \82æ\82è\91O\82Ì Win32 \83V\83X\83e\83\80\82Æ\8cÝ\8a·\82³\82¹\82é\8fê\8d\87\82É\82Ì\82Ý\95K\97v\82Å\82·\81B
-//    \83A\83v\83\8a\83P\81[\83V\83\87\83\93\82ª\81A\8aÖ\98A\95t\82¯\82ç\82ê\82½
-//    \90³\82µ\82¢\8c`\8e®\82Ì\8f¬\82³\82¢\83A\83C\83R\83\93\82ð\8eæ\93¾\82Å\82«\82é\82æ\82¤\82É\82·\82é\82É\82Í\81A
-//    \82±\82Ì\8aÖ\90\94\82ð\8cÄ\82Ñ\8fo\82µ\82Ä\82­\82¾\82³\82¢\81B
-//
-ATOM MyRegisterClass(HINSTANCE hInstance)
-{
-       WNDCLASSEX wcex;
-
-       wcex.cbSize = sizeof(WNDCLASSEX);
-
-       wcex.style                      = CS_HREDRAW | CS_VREDRAW;
-       wcex.lpfnWndProc        = WndProc;
-       wcex.cbClsExtra         = 0;
-       wcex.cbWndExtra         = 0;
-       wcex.hInstance          = hInstance;
-       wcex.hIcon                      = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_NLITE));
-       wcex.hCursor            = LoadCursor(NULL, IDC_ARROW);
-       wcex.hbrBackground      = (HBRUSH)(COLOR_WINDOW+1);
-       wcex.lpszMenuName       = MAKEINTRESOURCE(IDC_NLITE);
-       wcex.lpszClassName      = szWindowClass;
-       wcex.hIconSm            = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
-
-       return RegisterClassEx(&wcex);
-}
+               //\83\81\83C\83\93\83E\83B\83\93\83h\83E\8f\89\8aú\89»
+               wnd.Initialize(localAppDataPath);
+               wnd.CreateEx(0,0,WS_OVERLAPPEDWINDOW | WS_CLIPCHILDREN);
 
-//
-//   \8aÖ\90\94: InitInstance(HINSTANCE, int)
-//
-//   \96Ú\93I: \83C\83\93\83X\83^\83\93\83\83n\83\93\83h\83\8b\82ð\95Û\91\82µ\82Ä\81A\83\81\83C\83\93 \83E\83B\83\93\83h\83E\82ð\8dì\90¬\82µ\82Ü\82·\81B
-//
-//   \83R\83\81\83\93\83g:
-//
-//        \82±\82Ì\8aÖ\90\94\82Å\81A\83O\83\8d\81[\83o\83\8b\95Ï\90\94\82Å\83C\83\93\83X\83^\83\93\83\83n\83\93\83h\83\8b\82ð\95Û\91\82µ\81A
-//        \83\81\83C\83\93 \83v\83\8d\83O\83\89\83\80 \83E\83B\83\93\83h\83E\82ð\8dì\90¬\82¨\82æ\82Ñ\95\\8e¦\82µ\82Ü\82·\81B
-//
-BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
-{
-   HWND hWnd;
+               //\83\81\83C\83\93\83E\83B\83\93\83h\83E\95\\8e¦
+               wnd.ShowWindow(nCmdShow);
+               wnd.UpdateWindow();
 
-   hInst = hInstance; // \83O\83\8d\81[\83o\83\8b\95Ï\90\94\82É\83C\83\93\83X\83^\83\93\83X\8f\88\97\9d\82ð\8ai\94[\82µ\82Ü\82·\81B
+               //\97]\95ª\82É\8am\95Û\82µ\82Ä\82¢\82é\83q\81[\83v\82ð\8aJ\95ú
+               _heapmin();
 
-   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
-      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
 
-   if (!hWnd)
-   {
-      return FALSE;
-   }
+               //\83\81\83b\83Z\81[\83W\83\8b\81[\83v\8aJ\8en
+               nRet = theLoop.Run();
 
-   ShowWindow(hWnd, nCmdShow);
-   UpdateWindow(hWnd);
+               //\8fI\97¹\8cã\83\81\83\82\83\8a\83`\83F\83b\83N
+               vcassert(_heapchk() == _HEAPOK,TEXT("\83q\81[\83v\83G\83\89\81[\82Å\82·"));
 
-   return TRUE;
+               goto nliteend;
+
+       } catch(nlite::Exception &e){
+
+               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());
+
+
+               goto nlitefinally;
+       } catch(nlib::Exception &e){
+
+               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());
+
+               goto nlitefinally;
+       }catch(std::exception &e){
+               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ñ"));
+
+
+
+               goto nlitefinally;
+       } 
+
+nlitefinally:
+       wnd.OnException();
+       wnd.DestroyWindow();
+       FreeLibrary(hRich);
+
+nliteend:
+
+       _Module.RemoveMessageLoop();
+       FinalizeNlite();
+       _Module.Term();
+       ::CoUninitialize();
+
+       return nRet;
 }
 
-//
-//  \8aÖ\90\94: WndProc(HWND, UINT, WPARAM, LPARAM)
-//
-//  \96Ú\93I:  \83\81\83C\83\93 \83E\83B\83\93\83h\83E\82Ì\83\81\83b\83Z\81[\83W\82ð\8f\88\97\9d\82µ\82Ü\82·\81B
-//
-//  WM_COMMAND - \83A\83v\83\8a\83P\81[\83V\83\87\83\93 \83\81\83j\83\85\81[\82Ì\8f\88\97\9d
-//  WM_PAINT   - \83\81\83C\83\93 \83E\83B\83\93\83h\83E\82Ì\95`\89æ
-//  WM_DESTROY - \92\86\8e~\83\81\83b\83Z\81[\83W\82ð\95\\8e¦\82µ\82Ä\96ß\82é
-//
-//
-LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
-{
-       int wmId, wmEvent;
-       PAINTSTRUCT ps;
-       HDC hdc;
-
-       switch (message)
-       {
-       case WM_COMMAND:
-               wmId    = LOWORD(wParam);
-               wmEvent = HIWORD(wParam);
-               // \91I\91ð\82³\82ê\82½\83\81\83j\83\85\81[\82Ì\89ð\90Í:
-               switch (wmId)
-               {
-               case IDM_ABOUT:
-                       DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
-                       break;
-               case IDM_EXIT:
-                       DestroyWindow(hWnd);
-                       break;
-               default:
-                       return DefWindowProc(hWnd, message, wParam, lParam);
+static BOOL InitializeNlite(){
+
+       BOOL rslt = FALSE;
+
+       try{
+
+               nlite::appInfo = &CApplicationInfo::getInstance();
+               INT_PTR err;
+               INT_PTR count = 0;
+
+               //WSAData\82ð\8f\89\8aú\89»
+               while((err = WSAStartup(MAKEWORD(2,0),&wsaData)) == WSASYSNOTREADY){
+
+                       count++;
+                       if(count >= 5)break;
+                       Sleep(500);
+
+
+
                }
-               break;
-       case WM_PAINT:
-               hdc = BeginPaint(hWnd, &ps);
-               // TODO: \95`\89æ\83R\81[\83h\82ð\82±\82±\82É\92Ç\89Á\82µ\82Ä\82­\82¾\82³\82¢...
-               EndPaint(hWnd, &ps);
-               break;
-       case WM_DESTROY:
-               PostQuitMessage(0);
-               break;
-       default:
-               return DefWindowProc(hWnd, message, wParam, lParam);
-       }
-       return 0;
-}
 
-// \83o\81[\83W\83\87\83\93\8fî\95ñ\83{\83b\83N\83X\82Ì\83\81\83b\83Z\81[\83\83n\83\93\83h\83\89\81[\82Å\82·\81B
-INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
-{
-       UNREFERENCED_PARAMETER(lParam);
-       switch (message)
-       {
-       case WM_INITDIALOG:
-               return (INT_PTR)TRUE;
-
-       case WM_COMMAND:
-               if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
-               {
-                       EndDialog(hDlg, LOWORD(wParam));
-                       return (INT_PTR)TRUE;
+               if(err != ERROR_SUCCESS){
+
+                       throw AppInitException(__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
                }
-               break;
+
+               //\83A\83v\83\8a\83P\81[\83V\83\87\83\93\8fî\95ñ\83C\83\93\83X\83^\83\93\83X\90\90¬
+               const CApplicationInfo &appInfo = CApplicationInfo::getInstance();
+               CNLiteString userAgent;
+               userAgent = appInfo.getProcuctName();
+               userAgent += TEXT("/");
+               userAgent += appInfo.getProductVersion();
+
+
+
+               //HTTP\83I\83u\83W\83F\83N\83g\90\90¬
+               hInternet = WinHttpOpen(userAgent,WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,(LPCWSTR)WINHTTP_NO_PROXY_NAME,(LPCWSTR)WINHTTP_NO_PROXY_BYPASS,0);
+
+               if(hInternet == NULL){
+
+                       throw AppInitException(__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
+
+               }
+
+               //nlib\82Ì\8f\89\8aú\89»
+               InitializeNLIB(hInternet);
+
+               //\83\8d\81[\83J\83\8b\83A\83v\83\8a\83P\81[\83V\83\87\83\93\83t\83H\83\8b\83_\8c\9f\8dõ
+               if(SHGetFolderPathW(0,CSIDL_LOCAL_APPDATA,0,SHGFP_TYPE_CURRENT,localAppDataPath) != S_OK){
+
+                       throw AppInitException(__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
+               }
+
+
+               SystemParametersInfo (SPI_SETLISTBOXSMOOTHSCROLLING,FALSE,FALSE,0);
+
+
+
+               if(SHGetFolderPathW(0,CSIDL_APPDATA,0,SHGFP_TYPE_CURRENT,appFolderPath) != S_OK){
+
+                       throw AppInitException(__LINE__,TEXT(__FILE__),TEXT(__FUNCTION__));
+               }
+               ncvAppSettingPath = appFolderPath;
+               ncvAppSettingPath += TEXT("\\posite-c\\NiconamaCommentViewer\\AppSetting.xml");
+               rslt = TRUE;
+       }catch (AppInitException e){
+
+               rslt = FALSE;
+
        }
-       return (INT_PTR)FALSE;
+       
+
+       return rslt;
+}
+
+
+VOID FinalizeNlite(){
+
+       //\83\81\83C\83\93\83t\83\8c\81[\83\80\83E\83B\83\93\83h\83E\8cã\8f\88\97\9d
+       wnd.Finalaize();
+
+       //nlib\8cã\8f\88\97\9d
+       FinalizeNLIB();
+
+       //HTTP\83I\83u\83W\83F\83N\83g\8aJ\95ú
+       WinHttpCloseHandle(hInternet);
+
+       //winsock\8aJ\95ú
+       WSACleanup();
+
+       return;
 }
+