CreateWindow(TEXT («BUTTON»), TEXT («AutoCheck»),
BS_AUTOCHECKBOX | WS_VISIBLE | WS_CHILD,
10, 80, 100, 25, hWnd, (HMENU)202, g_hInst, NULL);
CreateWindow(TEXT («BUTTON»), TEXT («AutoChec_3State»),
BS_AUTO3STATE | WS_VISIBLE | WS_CHILD,
10, 110, 100, 25, hWnd, (HMENU)203, g_hInst, NULL);
CreateWindow(TEXT («BUTTON»), TEXT («RadioButton1»),
BS_AUTORADIOBUTTON | WS_VISIBLE | WS_CHILD,
10, 140, 100, 25, hWnd, (HMENU)204, g_hInst, NULL);
CreateWindow(TEXT («BUTTON»), TEXT («RadioButton2»),
BS_AUTORADIOBUTTON | WS_VISIBLE | WS_CHILD,
10, 170, 100, 25, hWnd, (HMENU)205, g_hInst, NULL);
CreateWindow(TEXT («BUTTON»), TEXT («OwnerDrawButton»),
BS_PUSHBUTTON | BS_OWNERDRAW | WS_VISIBLE | WS_CHILD,
10, 200, 100, 25, hWnd, (HMENU)206, g_hInst, NULL);
CreateWindowEx(WS_EX_OVERLAPPEDWINDOW, TEXT («BUTTON»), TEXT («Button»),
BS_PUSHBUTTON | BS_NOTIFY | WS_VISIBLE | WS_CHILD,
125, 20, 100,25, hWnd, (HMENU)207, g_hInst, NULL);
CreateWindowEx(WS_EX_WINDOWEDGE, TEXT («BUTTON»), TEXT («Button»),
BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD,
125, 50, 100,25, hWnd, (HMENU)208, g_hInst, NULL);
CreateWindowEx(WS_EX_STATICEDGE, TEXT («BUTTON»), TEXT («Button»),
BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD,
125, 80, 100, 25, hWnd, (HMENU)209, g_hInst, NULL);
CreateWindowEx(WS_EX_TOOLWINDOW, TEXT («BUTTON»), TEXT («Button»),
BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD,
125, 110, 100, 25, hWnd, (HMENU)210, g_hInst, NULL);
CreateWindowEx(WS_EX_CLIENTEDGE, TEXT («BUTTON»), TEXT («Button»),
BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_BORDER,
125, 140, 100, 25, hWnd, (HMENU)211, g_hInst, NULL);
CreateWindowEx(WS_EX_CLIENTEDGE, TEXT («BUTTON»), TEXT («Button»),
BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_CAPTION,
125, 170, 100, 25, hWnd, (HMENU)212, g_hInst, NULL);
CreateWindowEx(WS_EX_CLIENTEDGE, TEXT («BUTTON»), TEXT («Button»),
BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_OVERLAPPED,
125, 200, 100, 25, hWnd, (HMENU)213, g_hInst, NULL);
break;
4. Следующий за этим блок кода, обрабатывающий событие прорисовки формы, приведен в листинге 4.15. Листинг 4.15
case WM_PAINT:
RECT rt;
hdc = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rt);
FillRect(hdc, &rt, CreateSolidBrush(0xFFFF00));
//LoadString(g_hInst, IDS_HELLO, szHello, MAX_LOADSTRING);
//DrawText(hdc, szHello, _tcslen(szHello), &rt,
//DT_SINGLELINE | DT_VCENTER | DT_CENTER);
EndPaint(hWnd, &ps);
break;
Следует обратить внимание на закомментированные строки. Это именно то изменение, которое нужно внести в код. Переведя эти строки в состояние комментария, можно предотвратить вывод на форму надписи «Hello, Word!». Добавленный в код метод FillRect закрашивает ее в цвет Magenta. Теперь нужно скомпилировать проект и запустить его. Результат выполнения программы показан на рис. 4.5.
Рис. 4.5. Результат выполнения программы Buttons.
Стоит заметить, что две нижние кнопки в правом ряду можно перетаскивать при помощи мыши. 5. Внимательно расмотрев код, можно понять, что, несмотря на разницу в поведении и внешнем виде, практически все кнопки были созданы одной и той же функцией CreateWindow. Правый ряд кнопок был создан при помощи усовершенствованного варианта этой функции CreateWindowEx.
ВНИМАНИЕ!
Несмотря на разницу в поведении и назначении, все основные элементы управления Windows (кнопки, полосы прокрутки, поля ввода текста и т. д.) представляют собой окна Windоws. Они генерируют сообщение WM_COMMAND, создаются при помощи функции Create-Window, и разница между создаваемыми элементами определяется только аргументами, которые передаются этой функции. Этот ряд элементов управления носит общее название Windows Control.
Функции CreateWindow и CreateWindowEx Синтаксис функции CreateWindow достаточно прост.
HWND CreateWindow(
LPCTSTR lpClassName,
LPCTSTR lpWindowName,
DWORD dwStyle,
int x,
int y,
int nWidth,
int nHeight,
HWND hWndParent,
HMENU hMenu,
HANDLE hInstance,
PVOID lpParam);
Расшифровка аргументов этой функции приведена в следующем списке.
? Параметр IpClassName при создании элементов управления всегда получает одно из предопределенных значений.
• Значение BUTTON создает стандартную кнопку, которая посылает в родительское окно сообщение о том, что пользователь выбрал данную кнопку.
• Значение EDIT создает поле ввода текста, которое позволяет пользователю вводить и редактировать текст.
• Значение LISTB0X создает список, из которого пользователь может выбрать одну из строк.
• Значение C0MB0B0X действует как сочетание EDIT и LISTB0X. В получившемся органе управления пользователь может как выбрать одну из строк, так и ввести ее самостоятельно.
• Значение SCROLLBAR создает полосу прокрутки.
• Значение Image создает элемент управления, предназначенный для отображения текста или графического изображения.
? Параметр IpWindowName содержит текст, который должен быть отображен в элементе управления.
? Параметр dwStyle задает стиль окна, которое будет создано. Стиль задается при помощи сочетания предопределенных значений.
• Значение WS_B0RDER создает окно с тонкой рамкой.
• Значение WS_CAPTION создает окно со строкой заголовка (включает в себя стиль WSB0RDER).
• Значение WS_CHILD создает дочернее окно. Этот стиль несовместим со стилем WSP0PUP.
• Значение WS_CLIPCHILDREN для родительского окна отключает перерисовку тех зон окна, которые заняты дочерними окнами.
• Значение WS_CLIPSIBLINGS исключает рисование в перекрытых дочерних окнах. Если одно из перекрытых дочерних окон перерисовывается, то перекрытые им области других окон не будут перерисованы.
Читать дальше
Конец ознакомительного отрывка
Купить книгу