Не судите по обложке. Книга хорошая и примеры должны работать и в visual studio 2012 на Windows7 и скорее всего в следующих версиях Windows и следующих версиях C++ тоже должны работать.
В указанной книге первый пример — это аналог известного нам HelloWorld. Только вот состоит весь этот пример из более 60 строк кода. Немало, но это основы и самое начало знакомства с WinApi, которое подробно описывается. Я скачал бесплатную версию Visual Studio Express 2012 для Windows Desktop и стал пробовать запустить первый пример книги. Так как времена нынче не 90-е годы, то кое что поменялось. Если у вас, например Windows7 (как у меня), то создавать указанные в книге файлы не обязательно (Те, что с расширением bat и с MAK). В книге начинается с того, что нужно создать объектный файл, скомпилировать его из командной строки и т.д. В Visual Studio можно запустить пример и из редактора кода. Достаточно просто скопировать код и вставить в окно редактора кода.
Я создал проект Win32 (Файл—>Создать проект WIn32—>Нажал готово)
Открылось окно с кодом. Весь этот код затираем и вставляем код из книги.
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 |
#include <windows.h> #include "stdafx.h" //Эту строку я не из книги взял LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { static char szAppName[] = "HelloWin"; HWND hwnd; MSG msg; WNDCLASSEX wndclass; wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW | CS_VREDRAW; wndclass.lpfnWndProc = WndProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInstance; wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground =(HBRUSH) GetStockObject(WHITE_BRUSH); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = szAppName; wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); RegisterClassEx(&wndclass); hwnd = CreateWindow( szAppName, // window class name "The Hello Program", // window caption WS_OVERLAPPEDWINDOW, // window style CW_USEDEFAULT, // initial x position CW_USEDEFAULT, // initial y position CW_USEDEFAULT, // initial x size CW_USEDEFAULT, // initial y size NULL, // parent window handle NULL, // window menu handle hInstance, // program instance handle NULL ); // creation parameters ShowWindow(hwnd, iCmdShow); UpdateWindow(hwnd); while(GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; RECT rect; switch(iMsg) { case WM_CREATE: //PlaySound("hellowin.wav", NULL, SND_FILENAME | SND_ASYNC); //Ошибка у меня тут return 0; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); GetClientRect(hwnd, &rect); DrawText(hdc, "Hello, Windows 95!", -1, &rect, DT_SINGLELINE | DT_CENTER | DT_VCENTER); EndPaint(hwnd, &ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return DefWindowProc(hwnd, iMsg, wParam, lParam); } |
😛
Да уж много кода 😯
Это немного кода, всего лишь маленький кусочек, вот я накидал код SDI однодокументныйкаркас и MDI каркас окон вот там намного больше кода и плюс ещё реализовать надо печать. Да лучше вообще голый WinAPI не юзать, а использовать MFC/WTL или Qt.
Это немного кода, всего лишь маленький кусочек, вот я накидал код SDI одно-документный каркас и MDI-многодокументный каркас вот там намного больше кода и плюс ещё реализовать надо вывод на принтер “Что видишь, то и получаешь”. Тоже самое при разработке драйверов в старые времена на VxD далее на WDM для NT приходилось столько повторяющего legacy-кода вбивать, а вот сейчас обёртка WDF типа MFC и намного продуктивнее. Да лучше вообще голый WinAPI не юзать, а использовать MFC/WTL или Qt.