Код:
#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
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);
}
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow) {
// Register the window class.
const wchar_t CLASS_NAME[] = L"Sample Window Class";
WNDCLASS wc = {};
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
RegisterClass(&wc);
// Create the window.
HWND hwnd = CreateWindowEx(
0, // Optional window styles.
CLASS_NAME, // Window class
L"Learn to Program Windows", // Window text
WS_OVERLAPPEDWINDOW, // Window style
// Size and position
CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
NULL, // Parent window
NULL, // Menu
hInstance, // Instance handle
NULL // Additional application data
);
if(hwnd == NULL) {
return 0;
}
ShowWindow(hwnd, nCmdShow);
// Run the message loop.
MSG msg = {};
while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
Вопросы:
Большинство функций WinAPI существуют в двух вариантах: ANSI (использующие текущую кодовую страницу системы) и Unicode. Эти варианты называются наборами символов (character sets). Если открыть заголовочные файлы Windows SDK, можно увидеть, что функции в них объявлены так:
#ifdef UNICODE
#define CreateFile CreateFileW
#else
#define CreateFile CreateFileA
#endif // !UNICODE
Использование символа препроцессора UNICODE позволяет писать код, не привязываясь к определенному набору символов: добавляя или убирая его определение, можно легко переключиться с одного на другой. Эта функциональность была полезна во времена, когда нужно было собирать приложения как под Windows 9x, не поддерживающую Unicode, так и под Windows XP. Определить символ препроцессора можно не только из кода, но и параметром компилятора (например, ключ /D в Visual C++), что позволяло иметь одинаковый код проекта и собирать его в студии разными конфигурациями под разные ОС.
Кроме того, в Visual C++ есть заголовочный файл tchar.h, который использует похожий механизм для функций стандартной библиотеки, но он использует другой символ препроцессора - _UNICODE
.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Вот решил попробовать поработать с Navigation Architecture component
При параллельной многопоточности, с точки зрения производительности, важен ли порядок следования записей в выходных файлах?
Я создал приложение-мессенджер на FirebaseПо принципу одного общего чата
Нужно получить файл из network, во вкладке HeadersИз localStorage получаю значение переменной как-то так: