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 //}
时间: 2024-10-06 18:35:25