首页 > 代码库 > WIN32-ATL

WIN32-ATL

  1 #include "stdafx.h"  2 #include "ATLWinTest.h"  3   4 #define MAX_LOADSTRING 100  5   6 // 全局变量:  7 /*HINSTANCE hInst;    */                            // 全局HINSTANCE接口  8 TCHAR szTitle[MAX_LOADSTRING];                    // 窗口标题栏  9 TCHAR szWindowClass[MAX_LOADSTRING];            // 主窗口类名 10  11 //ATOM                MyRegisterClass(HINSTANCE hInstance); 12 //BOOL                InitInstance(HINSTANCE, int); 13 //LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM); 14 INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM); 15 CComModule _Module; 16  17 class CMainWindow : public CWindowImpl<CMainWindow> 18 { 19 public: 20     CMainWindow() 21     { 22         CWndClassInfo& wci = GetWndClassInfo(); 23         if(!wci.m_atom) 24         { 25             wci.m_wc.hIcon = LoadIcon(_Module.GetResourceInstance(), 26                     MAKEINTRESOURCE(IDI_ATLWINTEST)); 27             wci.m_wc.hIconSm=(HICON)::LoadImage(_Module.GetResourceInstance(), 28                     MAKEINTRESOURCE(IDI_SMALL), 29                     IMAGE_ICON,16,16,LR_DEFAULTCOLOR); 30             wci.m_wc.hbrBackground=CreateHatchBrush(HS_DIAGCROSS,RGB(0,0,255)); 31             // 装载系统光标 32             wci.m_bSystemCursor = TRUE; 33             wci.m_lpszCursorID = IDC_CROSS; 34         } 35     } 36     virtual BOOL ProcessWindowMessage(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam,LRESULT &lResult,DWORD dwMsgMapID) 37     { 38         BOOL bHandled = TRUE; 39         switch(uMsg) 40         { 41             case WM_PAINT: 42                 lResult = OnPaint(); 43                 break; 44             case WM_DESTROY: 45                 lResult = OnDestroy(); 46                 break; 47             default: 48                 bHandled = FALSE; 49                 break; 50         } 51         return bHandled; 52     } 53 private: 54     LRESULT OnPaint() 55     { 56         PAINTSTRUCT ps; 57         HDC hdc = BeginPaint(&ps); 58         RECT rect; 59         GetClientRect(&rect); 60         DrawText(hdc,_T("Hello,Windows"),-1,&rect, 61         DT_CENTER|DT_VCENTER|DT_SINGLELINE); 62         EndPaint(&ps); 63         return 0; 64     } 65     LRESULT OnDestroy() 66     { 67         PostQuitMessage(0); 68         return 0; 69     } 70 }; 71  72 int APIENTRY _tWinMain(HINSTANCE hInstance, 73                      HINSTANCE hPrevInstance, 74                      LPTSTR    lpCmdLine, 75                      int       nCmdShow) 76 { 77     _Module.Init(0,hInstance); 78      79     UNREFERENCED_PARAMETER(hPrevInstance); 80     UNREFERENCED_PARAMETER(lpCmdLine); 81  82     MSG msg; 83     HACCEL hAccelTable; 84  85     //// グローバル文字列を初期化しています。 86     LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); 87     LoadString(hInstance, IDC_ATLWINTEST, szWindowClass, MAX_LOADSTRING); 88     //MyRegisterClass(hInstance); 89  90     // アプリケーションの初期化を実行します: 91     //if (!InitInstance (hInstance, nCmdShow)) 92     //{ 93     //    return FALSE; 94     //} 95      96     // 97     //CWindow wnd; 98     //wnd.Create(szWindowClass,0,CWindow::rcDefault, 99     //_T("Windows Application"),100     //WS_OVERLAPPEDWINDOW,WS_EX_CLIENTEDGE);101     //if(!wnd)102     //    return -1;103     //wnd.CenterWindow();104     //wnd.ShowWindow(nCmdShow);105     //wnd.UpdateWindow();106     107     //108     CMainWindow wnd;109     wnd.Create(0,CWindow::rcDefault,_T("Windows Application"),110             WS_OVERLAPPEDWINDOW,WS_EX_CLIENTEDGE);111     if(!wnd)112         return -1;113     wnd.CenterWindow();114     wnd.ShowWindow(nCmdShow);115     wnd.UpdateWindow();116 117     hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_ATLWINTEST));118 119     // メイン メッセージ ループ:120     while (GetMessage(&msg, NULL, 0, 0))121     {122         if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))123         {124             TranslateMessage(&msg);125             DispatchMessage(&msg);126         }127     }128     129     _Module.Term();130 131     return (int) msg.wParam;132 }133 134 135 136 //137 //  関数: MyRegisterClass()138 //139 //  目的: ウィンドウ クラスを登録します。140 //141 //  コメント:142 //143 //    この関数および使い方は、‘RegisterClassEx‘ 関数が追加された144 //    Windows 95 より前の Win32 システムと互換させる場合にのみ必要です。145 //    アプリケーションが、関連付けられた146 //    正しい形式の小さいアイコンを取得できるようにするには、147 //    この関数を呼び出してください。148 //149 //ATOM MyRegisterClass(HINSTANCE hInstance)150 //{151 //    WNDCLASSEX wcex;152 //153 //    wcex.cbSize = sizeof(WNDCLASSEX);154 //155 //    wcex.style            = CS_HREDRAW | CS_VREDRAW;156 //    wcex.lpfnWndProc    = WndProc;157 //    wcex.cbClsExtra        = 0;158 //    wcex.cbWndExtra        = 0;159 //    wcex.hInstance        = hInstance;160 //    wcex.hIcon            = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_ATLWINTEST));161 //    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);162 //    wcex.hbrBackground    = (HBRUSH)(COLOR_WINDOW+1);163 //    wcex.lpszMenuName    = MAKEINTRESOURCE(IDC_ATLWINTEST);164 //    wcex.lpszClassName    = szWindowClass;165 //    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));166 //167 //    return RegisterClassEx(&wcex);168 //}169 170 //171 //   関数: InitInstance(HINSTANCE, int)172 //173 //   目的: インスタンス ハンドルを保存して、メイン ウィンドウを作成します。174 //175 //   コメント:176 //177 //        この関数で、グローバル変数でインスタンス ハンドルを保存し、178 //        メイン プログラム ウィンドウを作成および表示します。179 //180 //BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)181 //{182 //   HWND hWnd;183 //184 //   hInst = hInstance; // グローバル変数にインスタンス処理を格納します。185 //186 //   hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,187 //      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);188 //189 //   if (!hWnd)190 //   {191 //      return FALSE;192 //   }193 //194 //   ShowWindow(hWnd, nCmdShow);195 //   UpdateWindow(hWnd);196 //197 //   return TRUE;198 //}199 200 //201 //  関数: WndProc(HWND, UINT, WPARAM, LPARAM)202 //203 //  目的:  メイン ウィンドウのメッセージを処理します。204 //205 //  WM_COMMAND    - アプリケーション メニューの処理206 //  WM_PAINT    - メイン ウィンドウの描画207 //  WM_DESTROY    - 中止メッセージを表示して戻る208 //209 //210 //LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)211 //{212 //    int wmId, wmEvent;213 //    PAINTSTRUCT ps;214 //    HDC hdc;215 //    CWindow wnd(hWnd);216 //    RECT rect;217 //218 //    switch (message)219 //    {220 //    case WM_COMMAND:221 //        wmId    = LOWORD(wParam);222 //        wmEvent = HIWORD(wParam);223 //        // 選択されたメニューの解析:224 //        switch (wmId)225 //        {226 //        case IDM_ABOUT:227 //            DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);228 //            break;229 //        case IDM_EXIT:230 //            DestroyWindow(hWnd);231 //            break;232 //        default:233 //            return DefWindowProc(hWnd, message, wParam, lParam);234 //        }235 //        break;236 //    case WM_PAINT:237 //        //hdc = BeginPaint(hWnd, &ps);238 //        //// TODO: 描画コードをここに追加してください...239 //        //EndPaint(hWnd, &ps);240 //        hdc = wnd.BeginPaint(&ps);241 //        wnd.GetClientRect(&rect);242 //        DrawText(hdc,_T("Hello,Windows"),-1,&rect,243 //        DT_CENTER|DT_VCENTER|DT_SINGLELINE);244 //        wnd.EndPaint(&ps);245 //        break;246 //    case WM_DESTROY:247 //        PostQuitMessage(0);248 //        break;249 //    default:250 //        return DefWindowProc(hWnd, message, wParam, lParam);251 //    }252 //    return 0;253 //}254 255 // バージョン情報ボックスのメッセージ ハンドラです。256 //INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)257 //{258 //    UNREFERENCED_PARAMETER(lParam);259 //    switch (message)260 //    {261 //    case WM_INITDIALOG:262 //        return (INT_PTR)TRUE;263 //264 //    case WM_COMMAND:265 //        if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)266 //        {267 //            EndDialog(hDlg, LOWORD(wParam));268 //            return (INT_PTR)TRUE;269 //        }270 //        break;271 //    }272 //    return (INT_PTR)FALSE;273 //}

 

WIN32-ATL