1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 | #include <windows.h> #include <stdlib.h> #include <malloc.h> #include <memory.h> #include <tchar.h> int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { MSG msg; CWnd cMainWindow(TEXT("DentoMan"), TEXT("Bejkoman")); cMainWindow.CreateDef(); // Main message loop: while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (int)msg.wParam; } class CWnd { public: CWnd(); CWnd(LPTSTR lpszClassName, LPTSTR lpszWindowName); virtual ~CWnd(); virtual HWND CreateDef(void); // Create the window with default parameters virtual HWND Create(void); // Create window with custom params virtual LRESULT WndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam ); private: static LRESULT CALLBACK StaticWndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam); HWND g_hWnd; //Global window handle for this window HINSTANCE hInst; //Global instance for this window LPTSTR lpszClassName; LPTSTR lpszWindowName; }; CWnd::CWnd() { }; CWnd::CWnd(LPTSTR lpszClassName, LPTSTR lpszWindowName) { CWnd::lpszClassName = lpszClassName; CWnd::lpszWindowName = lpszWindowName; }; CWnd::~CWnd() { }; // Create the window with default parameters HWND CWnd::CreateDef(void) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = StaticWndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = (HINSTANCE)GetModuleHandle(NULL); wcex.hIcon = 0; wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 4); wcex.lpszMenuName = 0; wcex.lpszClassName = lpszClassName; wcex.hIconSm = 0; RegisterClassEx(&wcex); g_hWnd = CreateWindowEx(0,lpszClassName, lpszWindowName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, wcex.hInstance, this); hInst = wcex.hInstance; if (!g_hWnd) return false; ShowWindow(g_hWnd, SW_SHOW); UpdateWindow(g_hWnd); return g_hWnd; } // Create window with custom params HWND CWnd::Create(void) { WNDCLASSEX wcex; wcex.cbSize = sizeof(WNDCLASSEX); wcex.style = CS_HREDRAW | CS_VREDRAW; wcex.lpfnWndProc = StaticWndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = (HINSTANCE)GetModuleHandle(NULL); wcex.hIcon = 0; wcex.hCursor = LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wcex.lpszMenuName = 0; wcex.lpszClassName = lpszClassName; wcex.hIconSm = 0; return g_hWnd; } LRESULT CALLBACK CWnd::StaticWndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam) { // If this is a create message, trap the 'this' pointer passed in and store it within the window. /*The Only Message we take here so we store the 'this' pointer within the window to identify messages comming from it by the 'this' pointer*/ if ( Message == WM_CREATE ) { SetWindowLong( hWnd, GWL_USERDATA, (LONG)((CREATESTRUCT FAR *)lParam)->lpCreateParams); } // Obtain the correct destination for this message /*Store the window pointer in the class pointer we just created in order to run the right public WndPRoc */ CWnd *Destination = (CWnd*)GetWindowLong( hWnd, GWL_USERDATA ); // If the hWnd has a related class, pass it through /**/ if (Destination) { return Destination->WndProc( hWnd, Message, wParam, lParam ); } // No destination found, defer to system... return DefWindowProc( hWnd, Message, wParam, lParam ); }; LRESULT CWnd::WndProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam) { // Determine message type switch (Message) { case WM_LBUTTONDOWN: { /*this is a common trick for easy dragging of the window.this message fools windows telling that the user is actually dragging the application caption bar.*/ SendMessage(hWnd, WM_NCLBUTTONDOWN, HTCAPTION,NULL); break; } /*case WM_CREATE: break; */ case WM_CLOSE: PostQuitMessage(0); break; case WM_DESTROY: UnregisterClass(lpszClassName, hInst); PostQuitMessage(0); break; case WM_KEYDOWN: //KeyBoard keys // Which key was pressed? switch (wParam) { case VK_ESCAPE: //close through escape key PostQuitMessage(0); return 0; case VK_RETURN: MessageBox(hWnd, TEXT("DFGDGD"), TEXT("DFGDFG"), NULL); return 0; } // End Switch break; case WM_COMMAND: /*switch(LOWORD(wParam)) { }*/ break; case WM_PAINT: break; default: return DefWindowProc(hWnd, Message, wParam, lParam); } // End Message Switch return 0; }; |
CiNpbmNsdWRlIDx3aW5kb3dzLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG1hbGxvYy5oPgojaW5jbHVkZSA8bWVtb3J5Lmg+CiNpbmNsdWRlIDx0Y2hhci5oPgoKCmludCBBUElFTlRSWSBfdFdpbk1haW4oSElOU1RBTkNFIGhJbnN0YW5jZSwgSElOU1RBTkNFIGhQcmV2SW5zdGFuY2UsIExQVFNUUiAgICBscENtZExpbmUsIGludCAgICAgICBuQ21kU2hvdykKewoJTVNHIG1zZzsKCUNXbmQJY01haW5XaW5kb3coVEVYVCgiRGVudG9NYW4iKSwgVEVYVCgiQmVqa29tYW4iKSk7CgoJY01haW5XaW5kb3cuQ3JlYXRlRGVmKCk7CgkvLyBNYWluIG1lc3NhZ2UgbG9vcDoKCXdoaWxlIChHZXRNZXNzYWdlKCZtc2csIE5VTEwsIDAsIDApKQoJewoJCQlUcmFuc2xhdGVNZXNzYWdlKCZtc2cpOwoJCQlEaXNwYXRjaE1lc3NhZ2UoJm1zZyk7Cgl9CglyZXR1cm4gKGludCltc2cud1BhcmFtOwp9CgpjbGFzcyBDV25kCnsKCXB1YmxpYzoKCQkJCUNXbmQoKTsKCQkJCUNXbmQoTFBUU1RSIGxwc3pDbGFzc05hbWUsIExQVFNUUiBscHN6V2luZG93TmFtZSk7CgkJdmlydHVhbCB+Q1duZCgpOwoJCXZpcnR1YWwgSFdORCBDcmVhdGVEZWYodm9pZCk7CQkJLy8gQ3JlYXRlIHRoZSB3aW5kb3cgd2l0aCBkZWZhdWx0IHBhcmFtZXRlcnMKCQl2aXJ0dWFsIEhXTkQgQ3JlYXRlKHZvaWQpOwkJCQkvLyBDcmVhdGUgd2luZG93IHdpdGggY3VzdG9tIHBhcmFtcwoJCXZpcnR1YWwgTFJFU1VMVAkJV25kUHJvYyhIV05EIGhXbmQsIFVJTlQgTWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSApOwoKCXByaXZhdGU6CgkJc3RhdGljIExSRVNVTFQgQ0FMTEJBQ0sgU3RhdGljV25kUHJvYyhIV05EIGhXbmQsIFVJTlQgTWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSk7CgkJSFdORAkJZ19oV25kOwkJLy9HbG9iYWwgd2luZG93IGhhbmRsZSBmb3IgdGhpcyB3aW5kb3cKCQlISU5TVEFOQ0UJaEluc3Q7CQkvL0dsb2JhbCBpbnN0YW5jZSBmb3IgdGhpcyB3aW5kb3cKCgkJTFBUU1RSCQkJbHBzekNsYXNzTmFtZTsKCQlMUFRTVFIJCQlscHN6V2luZG93TmFtZTsKCn07CgoKQ1duZDo6Q1duZCgpCnsKCn07CgpDV25kOjpDV25kKExQVFNUUiBscHN6Q2xhc3NOYW1lLCBMUFRTVFIgbHBzeldpbmRvd05hbWUpCnsKCUNXbmQ6Omxwc3pDbGFzc05hbWUJCT0gbHBzekNsYXNzTmFtZTsKCUNXbmQ6Omxwc3pXaW5kb3dOYW1lCT0gbHBzeldpbmRvd05hbWU7CgoKfTsKCkNXbmQ6On5DV25kKCkKewoKfTsKLy8gQ3JlYXRlIHRoZSB3aW5kb3cgd2l0aCBkZWZhdWx0IHBhcmFtZXRlcnMKSFdORCBDV25kOjpDcmVhdGVEZWYodm9pZCkKCXsKCQlXTkRDTEFTU0VYIHdjZXg7CgoJCXdjZXguY2JTaXplID0gc2l6ZW9mKFdORENMQVNTRVgpOwoKCQl3Y2V4LnN0eWxlCQkJPSBDU19IUkVEUkFXIHwgQ1NfVlJFRFJBVzsKCQl3Y2V4LmxwZm5XbmRQcm9jCT0gU3RhdGljV25kUHJvYzsKCQl3Y2V4LmNiQ2xzRXh0cmEJCT0gMDsKCQl3Y2V4LmNiV25kRXh0cmEJCT0gMDsKCQl3Y2V4LmhJbnN0YW5jZQkJPSAoSElOU1RBTkNFKUdldE1vZHVsZUhhbmRsZShOVUxMKTsKCQl3Y2V4LmhJY29uCQkJPSAwOwoJCXdjZXguaEN1cnNvcgkJPSBMb2FkQ3Vyc29yKE5VTEwsIElEQ19BUlJPVyk7CgkJd2NleC5oYnJCYWNrZ3JvdW5kCT0gKEhCUlVTSCkoQ09MT1JfV0lORE9XICsgNCk7CgkJd2NleC5scHN6TWVudU5hbWUJPSAwOwoJCXdjZXgubHBzekNsYXNzTmFtZQk9IGxwc3pDbGFzc05hbWU7CgkJd2NleC5oSWNvblNtCQk9IDA7CgoJCVJlZ2lzdGVyQ2xhc3NFeCgmd2NleCk7CgkJZ19oV25kID0gQ3JlYXRlV2luZG93RXgoMCxscHN6Q2xhc3NOYW1lLCBscHN6V2luZG93TmFtZSwgV1NfT1ZFUkxBUFBFRFdJTkRPVywKCQkJQ1dfVVNFREVGQVVMVCwgMCwgQ1dfVVNFREVGQVVMVCwgMCwgTlVMTCwgTlVMTCwgd2NleC5oSW5zdGFuY2UsIHRoaXMpOwoJCWhJbnN0CT0Jd2NleC5oSW5zdGFuY2U7CgoJICAgIGlmICghZ19oV25kKSByZXR1cm4gZmFsc2U7CgoKICAgCgkgICBTaG93V2luZG93KGdfaFduZCwgU1dfU0hPVyk7CgkgICBVcGRhdGVXaW5kb3coZ19oV25kKTsKCgkJcmV0dXJuIGdfaFduZDsKCX0KCi8vIENyZWF0ZSB3aW5kb3cgd2l0aCBjdXN0b20gcGFyYW1zCkhXTkQgQ1duZDo6Q3JlYXRlKHZvaWQpCgl7CgkJV05EQ0xBU1NFWCB3Y2V4OwoKCQl3Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKCgkJd2NleC5zdHlsZQkJCT0gQ1NfSFJFRFJBVyB8IENTX1ZSRURSQVc7CgkJd2NleC5scGZuV25kUHJvYwk9IFN0YXRpY1duZFByb2M7CgkJd2NleC5jYkNsc0V4dHJhCQk9IDA7CgkJd2NleC5jYlduZEV4dHJhCQk9IDA7CgkJd2NleC5oSW5zdGFuY2UJCT0gKEhJTlNUQU5DRSlHZXRNb2R1bGVIYW5kbGUoTlVMTCk7CgkJd2NleC5oSWNvbgkJCT0gMDsKCQl3Y2V4LmhDdXJzb3IJCT0gTG9hZEN1cnNvcihOVUxMLCBJRENfQVJST1cpOwoJCXdjZXguaGJyQmFja2dyb3VuZAk9IChIQlJVU0gpKENPTE9SX1dJTkRPVyArIDEpOwoJCXdjZXgubHBzek1lbnVOYW1lCT0gMDsKCQl3Y2V4Lmxwc3pDbGFzc05hbWUJPSBscHN6Q2xhc3NOYW1lOwoJCXdjZXguaEljb25TbQkJPSAwOwoKCQlyZXR1cm4gZ19oV25kOwoJfQoKCgoKCgoKTFJFU1VMVCBDQUxMQkFDSyBDV25kOjpTdGF0aWNXbmRQcm9jKEhXTkQgaFduZCwgVUlOVCBNZXNzYWdlLCBXUEFSQU0gd1BhcmFtLCBMUEFSQU0gbFBhcmFtKQp7CgogICAgLy8gSWYgdGhpcyBpcyBhIGNyZWF0ZSBtZXNzYWdlLCB0cmFwIHRoZSAndGhpcycgcG9pbnRlciBwYXNzZWQgaW4gYW5kIHN0b3JlIGl0IHdpdGhpbiB0aGUgd2luZG93LgoJLypUaGUgT25seSBNZXNzYWdlIHdlIHRha2UgaGVyZSBzbyB3ZSBzdG9yZSB0aGUgJ3RoaXMnIHBvaW50ZXIgd2l0aGluIHRoZSB3aW5kb3cgdG8gaWRlbnRpZnkgbWVzc2FnZXMgCgljb21taW5nIGZyb20gaXQgYnkgdGhlICd0aGlzJyBwb2ludGVyKi8KICAgIGlmICggTWVzc2FnZSA9PSBXTV9DUkVBVEUgKQoJewoJCVNldFdpbmRvd0xvbmcoIGhXbmQsIEdXTF9VU0VSREFUQSwgKExPTkcpKChDUkVBVEVTVFJVQ1QgRkFSICopbFBhcmFtKS0+bHBDcmVhdGVQYXJhbXMpOwoJfQoKICAgIC8vIE9idGFpbiB0aGUgY29ycmVjdCBkZXN0aW5hdGlvbiBmb3IgdGhpcyBtZXNzYWdlCgkvKlN0b3JlIHRoZSB3aW5kb3cgcG9pbnRlciBpbiB0aGUgY2xhc3MgcG9pbnRlciB3ZSBqdXN0IGNyZWF0ZWQgaW4gb3JkZXIgdG8gcnVuIHRoZSByaWdodCBwdWJsaWMgV25kUFJvYyAqLwogICAgQ1duZCAqRGVzdGluYXRpb24gPSAoQ1duZCopR2V0V2luZG93TG9uZyggaFduZCwgR1dMX1VTRVJEQVRBICk7CiAgICAKICAgIC8vIElmIHRoZSBoV25kIGhhcyBhIHJlbGF0ZWQgY2xhc3MsIHBhc3MgaXQgdGhyb3VnaAoJLyoqLwogICAgaWYgKERlc3RpbmF0aW9uKQoJewoJCXJldHVybiBEZXN0aW5hdGlvbi0+V25kUHJvYyggaFduZCwgTWVzc2FnZSwgd1BhcmFtLCBsUGFyYW0gKTsKCX0KICAgIAogICAgLy8gTm8gZGVzdGluYXRpb24gZm91bmQsIGRlZmVyIHRvIHN5c3RlbS4uLgogICAgcmV0dXJuIERlZldpbmRvd1Byb2MoIGhXbmQsIE1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtICk7CgoKfTsKCkxSRVNVTFQgQ1duZDo6V25kUHJvYyhIV05EIGhXbmQsIFVJTlQgTWVzc2FnZSwgV1BBUkFNIHdQYXJhbSwgTFBBUkFNIGxQYXJhbSkKewoKCiAgICAvLyBEZXRlcm1pbmUgbWVzc2FnZSB0eXBlCglzd2l0Y2ggKE1lc3NhZ2UpCiAgICB7CgkJY2FzZSBXTV9MQlVUVE9ORE9XTjoKCQkJewoJCQkJLyp0aGlzIGlzIGEgY29tbW9uIHRyaWNrIGZvciBlYXN5IGRyYWdnaW5nIG9mIHRoZSB3aW5kb3cudGhpcyBtZXNzYWdlIGZvb2xzIHdpbmRvd3MgdGVsbGluZyB0aGF0IHRoZSB1c2VyIGlzCgkJCQkgYWN0dWFsbHkgZHJhZ2dpbmcgdGhlIGFwcGxpY2F0aW9uIGNhcHRpb24gYmFyLiovCgkJCQkgU2VuZE1lc3NhZ2UoaFduZCwgV01fTkNMQlVUVE9ORE9XTiwgSFRDQVBUSU9OLE5VTEwpOwoJCQkJYnJlYWs7CgkJCX0KCQkvKmNhc2UgV01fQ1JFQVRFOgogICAgICAgICAgICBicmVhazsKCQkqLwogICAgICAgIGNhc2UgV01fQ0xPU0U6CgkJCVBvc3RRdWl0TWVzc2FnZSgwKTsKCQkJYnJlYWs7CgkJCiAgICAgICAgY2FzZSBXTV9ERVNUUk9ZOgoJCQlVbnJlZ2lzdGVyQ2xhc3MobHBzekNsYXNzTmFtZSwgaEluc3QpOwoJCQlQb3N0UXVpdE1lc3NhZ2UoMCk7CgkJCWJyZWFrOwoJCQkKCgogICAgICAgIGNhc2UgV01fS0VZRE9XTjoJCQkJLy9LZXlCb2FyZCBrZXlzCgogICAgICAgICAgICAvLyBXaGljaCBrZXkgd2FzIHByZXNzZWQ/CgkJCXN3aXRjaCAod1BhcmFtKSAKICAgICAgICAgICAgewoJCQkJY2FzZSBWS19FU0NBUEU6CQkJLy9jbG9zZSB0aHJvdWdoIGVzY2FwZSBrZXkKCQkJCQlQb3N0UXVpdE1lc3NhZ2UoMCk7CgkJCQkJcmV0dXJuIDA7CgkJCQljYXNlIFZLX1JFVFVSTjoKCQkJCQlNZXNzYWdlQm94KGhXbmQsIFRFWFQoIkRGR0RHRCIpLCBURVhUKCJERkdERkciKSwgTlVMTCk7CgkJCQkJcmV0dXJuIDA7CgoJCQl9IC8vIEVuZCBTd2l0Y2gKCgkJCWJyZWFrOwoKICAgICAgICBjYXNlIFdNX0NPTU1BTkQ6CgkJCS8qc3dpdGNoKExPV09SRCh3UGFyYW0pKQoJCQl7CgkJCQkJCiAgICAgICAgICAgIAoJCQl9Ki8KCQkJYnJlYWs7CgkJY2FzZSBXTV9QQUlOVDoKCQkJCgkJCWJyZWFrOwoJCWRlZmF1bHQ6CgkJCXJldHVybiBEZWZXaW5kb3dQcm9jKGhXbmQsIE1lc3NhZ2UsIHdQYXJhbSwgbFBhcmFtKTsKCiAgICB9IC8vIEVuZCBNZXNzYWdlIFN3aXRjaAogICAgCgoJcmV0dXJuIDA7CgoKfTs=
prog.cpp:2:21: error: windows.h: No such file or directory prog.cpp:6:19: error: tchar.h: No such file or directory prog.cpp:9: error: expected initializer before ‘_tWinMain’
-
result: Compilation error (maybe you wish to see an example for C++ 4.7.2)


