ALTE DOCUMENTE
|
|||||||
Во многих ситуациях Вы, несомненно, найдете удобным использование нового элемента управления 111r1710b , называемого спином (up down control spin control scroll bar). Он состоит из кнопок со стрелками, которые помещаются на концах линейки прокрутки, и не имеет полосы прокрутки, которая в линейках находится между этими кнопками. Если Вы уже работали с различными приложения 111r1710b ми Windows Windows предусмотрели такой элемент управления 111r1710b , как спин. Как Вы вскоре увидите, работа со спином очень похожа на работу с линейкой прокрутки.
Существует два варианта использования 111r1710b спина:
2) он может работать в сочетании с другим элементом управления 111r1710b , называемым в этом случае приятельским окном (buddy window
В качестве приятельского окна чаще всего используется окно редактирования 111r1710b (edit box spin control spinner window up down control». Практически все действия по управлению спином выполняются автоматически: это делает его очень простым и удобным элементом. Ниже приведены два примера работы со спином. В первом из них спин работает как небольшая линейка прокрутки, а во втором используется в сочетании с окном редактирования 111r1710b .
Для создания 111r1710b спина используется функция CreateUpDownControl
HWND CreateUpDownControl(DWORD Style, int X, int Y,
int Width, int Height,
HWND hParent, int ID,
HINSTANCE hInst,
HWND hBuddy, int Max,
int Min int StarPos
Style определяет стиль окна спина и должен содержать стандартные значения 111r1710b стилей WS CHILD WS VISIBLE WS BORDER
«up-down control»
UDS ALIGNLEFT | ||
UDS ALIGNRIGHT | ||
UDS ARROWKEYS |
Разрешается использование клавиш со стрелками для изменения 111r1710b текущего значения 111r1710b спина |
|
UDS AUTOBUDDY | ||
UDS HORZ | ||
UDS NOTHOUSANDS |
Запрещается отображение запятой (для разделения 111r1710b триад) в больших числах (только для спинов с окнами редактирования 111r1710b ) |
|
UDS_SETBUDDYINT |
|
|
UDS WRAP |
«Переворот» позиции спина при достижении граничного значения 111r1710b |
X Y Width Height hParent ID hInst задает дескриптор активного приложения 111r1710b . Дескриптор приятельского (buddy hBuddy NULL
Минимальное и максимальное значения 111r1710b позиций спина задаются параметрами Min меньше значения 111r1710b Min StarPos
CreateUpDownControl возвращает дескриптор элемента управления 111r1710b .
Сообщения 111r1710b спина. WM VSCROLL lParam Поскольку одновременно может существовать несколько элементов управления 111r1710b , посылающих сообщение WM VSCROLL lParam SendMessage UDM GETPOS В этом случае функция возвратит значение текущего положения 111r1710b спина.
UDM GETPOS спин может принимать и обрабатывать другие сообщения 111r1710b ; наиболее часто используемые из них приведены в таблице 11.2. Например, используя сообщение UDM SETPOS
Сообщения 111r1710b , которые можно посылать спину
UDM GETBUDDY |
Получение дескриптора приятельского окна. Дескриптор содержится в младшем слове возвращаемого значения 111r1710b . wParam lParam |
|
UDM GETPOS |
Получение текущей позиции спина. Значение текущей позиции содержится в младшем слове возвращаемого значения 111r1710b . wParam lParam |
|
|
UDM_GETRANGE |
Получение диапазона прокрутки спина. Максимальное значение позиции содержится в младшем, а минимальное - в старшем слове возвращаемого значения 111r1710b . wParam lParam |
UDM_SETBUDDY |
wParam lParam |
|
UDM_SETPOS |
wParam lParam |
|
UDM_SETRANGE |
wParam lParam |
Приведенная ниже программа создает спин, используемый как отдельный элемент прокрутки. Спин создается в окне диалога. В данном примере он не имеет приятельского окна. Возможные значения 111r1710b позиций создаваемого спина находятся в диапазоне от 0 до 100, начальное значение позиции равно 50. При изменении текущей позиции спина значение его новой позиции отображается в рабочей области окна диалога.
#include <Windows.h>
#include <String.h>
#include <Stdio.h>
#include <Commctrl.h>
#include "Updown.h"
LRESULT CALLBACK WindowFunc(HWND,UINT,WPARAM,LPARAM);
BOOL CALLBACK DialogFunc(HWND,UINT,WPARAM,LPARAM);
char szWinName[] = " "; //
HINSTANCE hInst;
int WINAPI WinMain (HINSTANCE hThisInst,
HINSTANCE hPrevInst,
LPSTR lpszArgs,
int nWinMode)
return msg. wParam;
}
// Windows и получает в качестве параметров сообщения 111r1710b
// из очереди сообщений данного приложения 111r1710b
LRESULT CALLBACK WindowFunc(HWND hwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
break;
case WM_DESTROY: //
PostQuitMessage
break;
default:
// Все сообщения 111r1710b , не обрабатываемые в данной
// функции, направляются на обработку по
// умолчанию
return DefWindowProc(hwnd,message,
wParam,lParam);
}
return 0;
}
BOOL CALLBACK DialogFunc(HWND hdwnd,
UINT message,
WPARAM wParam,
LPARAM lParam)
case WM_VSCROLL: // Обработка сообщения 111r1710b спина
if(udWnd == (HWND)lParam )
}
return 0;
Spin h
#include <Windows.h>
#include "Updown.h"
MYMENU MENU
MYMENU ACCELERATORS
MYDB DIALOG 18, 18, 142, 92
CAPTION " "
STYLE DS_MODALFRAME|WS_POPUP|WS_CAPTION|WS_SYSMENU
Updown h
#define IDM_DIALOG 100
#define IDM_HELP 101
define ID UPDOWN 102
В приведенной программе спин создается в окне диалога. Это происходит при инициализации диалога во время обработки сообщения 111r1710b WM INITDIALOG
udWnd=CreateUpDownControl
(WS_CHILD|WS_BORDER|WS_VISIBLE,
10,10,50,50, hdwnd, ID_UPDOWN,
hInst, NULL, 100, 0, 50);
return
CreateUpDownControl hdwnd ID UPDOWN hInst NULL. Возможные значения 111r1710b позиций создаваемого спина находятся в диапазоне от 0 до 100, начальное значение позиции равно 50.
WM VSCROLL Ниже приводится фрагмент программы, обрабатывающей это сообщение. Дескриптор спина передается в параметре сообщения 111r1710b lParam lParam сравнивается с дескриптором спина, полученным в результате выполнения 111r1710b функции CreateUpDownControl Наша программа создает только один спин, реальные же приложения 111r1710b могут создавать несколько элементов управления 111r1710b , способных посылать сообщение WM VSCROLL
case WM_VSCROLL: // Обработка сообщения 111r1710b спина
if(udWnd == (HWND)lParam )
UDM GETPOS SendMessage Значение новой позиции спина содержится в младшем слове возвращаемого значения 111r1710b . Значение текущего положения 111r1710b спина отображается в рабочей области окна диалога.
|