Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Lec1pg12
- Source.cpp
- #ifndef UNICODE
- #define UNICODE
- #endif
- #include <windows.h>
- LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
- {
- // Регистрация класса окна.
- const wchar_t CLASS_NAME[] = L"Sample Window Class";
- WNDCLASS wc = {};
- wc.lpfnWndProc = WindowProc;
- wc.hInstance = hInstance;
- wc.lpszClassName = CLASS_NAME;
- RegisterClass(&wc);
- // Создание окна.
- HWND hwnd = CreateWindowEx(
- 0, // Дополнительные стили окна.
- CLASS_NAME, // Класс окна
- L"Learn to Program Windows", // Заголовок окна
- WS_OVERLAPPEDWINDOW, // Стиль окна
- // Размер и позиция
- CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
- NULL, // Родительское окно
- NULL, // Меню
- hInstance, // Дескриптор экземпляра
- NULL // Дополнительные данные приложения
- );
- if (hwnd == NULL)
- {
- return 0;
- }
- ShowWindow(hwnd, nCmdShow);
- // Запуск цикла обработки сообщений.
- MSG msg = {};
- while (GetMessage(&msg, NULL, 0, 0))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return 0;
- }
- LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch (uMsg)
- {
- case WM_DESTROY:
- PostQuitMessage(0);
- return 0;
- case WM_PAINT:
- {
- PAINTSTRUCT ps;
- HDC hdc = BeginPaint(hwnd, &ps);
- FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));
- EndPaint(hwnd, &ps);
- }
- return 0;
- }
- return DefWindowProc(hwnd, uMsg, wParam, lParam);
- }
- Lec1pg25
- Source.cpp
- #ifndef UNICODE
- #define UNICODE
- #endif
- #include <windows.h>
- #include <new>
- LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
- struct StateInfo {
- // ... (члены структуры не показаны)
- };
- int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
- {
- // Регистрация класса окна.
- const wchar_t CLASS_NAME[] = L"Sample Window Class";
- WNDCLASS wc = {};
- wc.lpfnWndProc = WindowProc;
- wc.hInstance = hInstance;
- wc.lpszClassName = CLASS_NAME;
- RegisterClass(&wc);
- // Создание окна.
- // Определение структуры для хранения информации о состоянии.
- StateInfo *pState = new (std::nothrow) StateInfo;
- if (pState == NULL)
- {
- return 0;
- }
- // Инициализация членов структуры (не показана).
- HWND hwnd = CreateWindowEx(
- 0, // Дополнительные стили окна.
- CLASS_NAME, // Класс окна
- L"Learn to Program Windows", // Заголовок окна
- WS_OVERLAPPEDWINDOW, // Стиль окна
- // Размер и позиция
- CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
- NULL, // Родительское окно
- NULL, // Меню
- hInstance, // Дескриптор экземпляра
- pState // Дополнительные данные приложения
- );
- if (hwnd == NULL)
- {
- return 0;
- }
- ShowWindow(hwnd, nCmdShow);
- // Запуск цикла обработки сообщений.
- MSG msg = {};
- while (GetMessage(&msg, NULL, 0, 0))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return 0;
- }
- inline StateInfo* GetAppState(HWND hwnd)
- {
- LONG_PTR ptr = GetWindowLongPtr(hwnd, GWLP_USERDATA);
- StateInfo *pState = reinterpret_cast<StateInfo*>(ptr);
- return pState;
- }
- LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- StateInfo *pState;
- if (uMsg == WM_CREATE)
- {
- CREATESTRUCT *pCreate = reinterpret_cast<CREATESTRUCT*>(lParam);
- pState = reinterpret_cast<StateInfo*>(pCreate->lpCreateParams);
- SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)pState);
- }
- else
- {
- pState = GetAppState(hwnd);
- }
- switch (uMsg)
- {
- case WM_DESTROY:
- PostQuitMessage(0);
- return 0;
- case WM_PAINT:
- {
- PAINTSTRUCT ps;
- HDC hdc = BeginPaint(hwnd, &ps);
- FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));
- EndPaint(hwnd, &ps);
- }
- return 0;
- }
- return DefWindowProc(hwnd, uMsg, wParam, lParam);
- }
- Lec1pg27
- Source.cpp
- /*#ifndef UNICODE
- #define UNICODE
- #endif */
- #include <windows.h>
- #include "MainWindow.h"
- int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
- {
- MainWindow win;
- if (!win.Create(L"Learn to Program Windows", WS_OVERLAPPEDWINDOW))
- {
- return 0;
- }
- ShowWindow(win.Window(), nCmdShow);
- // Запуск цикла обработки сообщений.
- MSG msg = {};
- while (GetMessage(&msg, NULL, 0, 0))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- return 0;
- }
- BaseWindow.h
- #pragma once
- template <class DERIVED_TYPE>
- class BaseWindow
- {
- public:
- static LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- DERIVED_TYPE *pThis = NULL;
- if (uMsg == WM_NCCREATE)
- {
- CREATESTRUCT* pCreate = (CREATESTRUCT*)lParam;
- pThis = (DERIVED_TYPE*)pCreate->lpCreateParams;
- SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)pThis);
- pThis->m_hwnd = hwnd;
- }
- else
- {
- pThis = (DERIVED_TYPE*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
- }
- if (pThis)
- {
- return pThis->HandleMessage(uMsg, wParam, lParam);
- }
- else
- {
- return DefWindowProc(hwnd, uMsg, wParam, lParam);
- }
- }
- BaseWindow() : m_hwnd(NULL) { }
- BOOL Create(
- PCWSTR lpWindowName,
- DWORD dwStyle,
- DWORD dwExStyle = 0,
- int x = CW_USEDEFAULT,
- int y = CW_USEDEFAULT,
- int nWidth = CW_USEDEFAULT,
- int nHeight = CW_USEDEFAULT,
- HWND hWndParent = 0,
- HMENU hMenu = 0
- )
- {
- WNDCLASS wc = { 0 };
- wc.lpfnWndProc = DERIVED_TYPE::WindowProc;
- wc.hInstance = GetModuleHandle(NULL);
- wc.lpszClassName = ClassName();
- RegisterClass(&wc);
- m_hwnd = CreateWindowEx(
- dwExStyle, ClassName(), lpWindowName, dwStyle, x, y,
- nWidth, nHeight, hWndParent, hMenu, GetModuleHandle(NULL), this
- );
- return (m_hwnd ? TRUE : FALSE);
- }
- HWND Window() const { return m_hwnd; }
- protected:
- virtual PCWSTR ClassName() const = 0;
- HWND m_hwnd;
- };
- MainWindow.h
- #pragma once
- #include "BaseWindow.h"
- class MainWindow : public BaseWindow<MainWindow>
- {
- public:
- PCWSTR ClassName() const { return L"Sample Window Class"; }
- LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
- };
- MainWindow.cpp
- #include <Windows.h>
- #include "MainWindow.h"
- LRESULT MainWindow::HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- switch (uMsg)
- {
- case WM_DESTROY:
- PostQuitMessage(0);
- return 0;
- case WM_PAINT:
- {
- PAINTSTRUCT ps;
- HDC hdc = BeginPaint(m_hwnd, &ps);
- FillRect(hdc, &ps.rcPaint, (HBRUSH)(COLOR_WINDOW + 1));
- EndPaint(m_hwnd, &ps);
- }
- return 0;
- default:
- return DefWindowProc(m_hwnd, uMsg, wParam, lParam);
- }
- return TRUE;
- }
Advertisement
Add Comment
Please, Sign In to add comment