На главную

On-line справка по Win32 API

Написать письмо
БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО!
Список всех статей A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z | Скачать Вниз

Creating a Combo-box Toolbar



Following are the window procedure for the toolbar and the subclass procedure for the two combo boxes.

#define WM_TAB (WM_USER)
#define WM_ESC (WM_USER + 1)
#define WM_ENTER (WM_USER + 2)

HWND hwndMain;
HWND hwndEdit;
WNDPROC lpfnEditWndProc; /* original window procedure for */
/* the combo box edit windows */

int cyToolbar; /* toolbar window height */

/********************************************************

FUNCTION: ToolbarWindowProc

PURPOSE: Window procedure for the toolbar window


*********************************************************/

LRESULT CALLBACK ToolbarWindowProc(hwnd, msg, wParam, lParam)
HWND hwnd;
UINT msg;
WPARAM wParam;
LPARAM lParam;
{
static HWND hwndEdit1;
static HWND hwndEdit2;
static HWND hwndCombo1;
static HWND hwndCombo2;
.
.
.
POINT pt;
DWORD dwBaseUnits;
HWND hwndCombo;
DWORD dwIndex;

switch (msg) {

case WM_CREATE:

/* Create two combo box child windows. */

dwBaseUnits = GetDialogBaseUnits();

hwndCombo1 = CreateWindow("COMBOBOX", "",
CBS_DROPDOWN | WS_CHILD | WS_VISIBLE,
(6 * LOWORD(dwBaseUnits)) / 4,
(2 * HIWORD(dwBaseUnits)) / 8,
(100 * LOWORD(dwBaseUnits)) / 4,
(50 * HIWORD(dwBaseUnits)) / 8,
hwnd, NULL, hinst, NULL);


hwndCombo2 = CreateWindow("COMBOBOX", "",
CBS_DROPDOWN | WS_CHILD | WS_VISIBLE,
(112 * LOWORD(dwBaseUnits)) / 4,
(2 * HIWORD(dwBaseUnits)) / 8,
(100 * LOWORD(dwBaseUnits)) / 4,
(50 * HIWORD(dwBaseUnits)) / 8,
hwnd, NULL, hinst, NULL);

/* Get the edit window handle for each combo box. */

pt.x = 1;
pt.y = 1;

hwndEdit1 = ChildWindowFromPoint(hwndCombo1, pt);
hwndEdit2 = ChildWindowFromPoint(hwndCombo2, pt);

/*
* Change the window procedure for both edit windows
* to the subclass procedure.
*/


lpfnEditWndProc = (WNDPROC) SetWindowLong(hwndEdit1,
GWL_WNDPROC, (DWORD) SubClassProc);

SetWindowLong(hwndEdit2, GWL_WNDPROC,
(DWORD) SubClassProc);


break;

case WM_SETFOCUS:
SetFocus(hwndCombo1);
break;

case WM_TAB:
if (GetFocus() == hwndEdit1)
SetFocus(hwndCombo2);
else
SetFocus(hwndCombo1);
break;

case WM_ESC:

hwndCombo = GetFocus() == hwndEdit1 ?
hwndCombo1 : hwndCombo2;

/* Clear the current selection. */


SendMessage(hwndCombo, CB_SETCURSEL,
(WPARAM) (-1), 0);

/* Set the focus to the main window. */

SetFocus(hwndMain);
break;

case WM_ENTER:
hwndCombo = GetFocus() == hwndEdit1 ?
hwndCombo1 : hwndCombo2;
SetFocus(hwndMain);

/* If there is no current selection, set one. */

if (SendMessage(hwndCombo, CB_GETCURSEL, 0, 0)

== CB_ERR) {
if (SendMessage(hwndCombo, WM_GETTEXT,
sizeof(achTemp), (LPARAM) achTemp) == 0)
break; /* empty selection field */
dwIndex = SendMessage(hwndCombo,
CB_FINDSTRINGEXACT, (WPARAM) (-1),
(LPARAM) achTemp);

/* Add the string, if necessary, and select it. */

if (dwIndex == CB_ERR)

dwIndex = SendMessage(hwndCombo, CB_ADDSTRING,
0, (LPARAM) achTemp);
if (dwIndex != CB_ERR)
SendMessage(hwndCombo, CB_SETCURSEL,
dwIndex, 0);
}
break;

.
. /* Process additional messages. */
.

default:
return DefWindowProc(hwnd, msg, wParam, lParam);
}
return 0;

}


/********************************************************

FUNCTION: SubClassProc

PURPOSE: Process TAB and ESCAPE keys, and pass all
other messages to the class window
procedure.

*********************************************************/

LRESULT CALLBACK SubClassProc(hwnd, msg, wParam, lParam)
HWND hwnd;
UINT msg;
WPARAM wParam;
LPARAM lParam;
{
switch (msg) {
case WM_KEYDOWN:

switch (wParam) {
case VK_TAB:
SendMessage(hwndToolbar, WM_TAB, 0, 0);
return 0;
case VK_ESCAPE:
SendMessage(hwndToolbar, WM_ESC, 0, 0);
return 0;
case VK_RETURN:
SendMessage(hwndToolbar, WM_ENTER, 0, 0);
return 0;
}
break;

case WM_KEYUP:

case WM_CHAR:
switch (wParam) {
case VK_TAB:
case VK_ESCAPE:
case VK_RETURN:
return 0;
}
}

/*
* Call the original window procedure for default
* processing.
*/

return CallWindowProc(lpfnEditWndProc, hwnd,
msg, wParam, lParam);
}



Пригласи друзей и счет твоего мобильника всегда будет положительным!
Предыдущая статья
 
Сайт Народ.Ру Интернет
Следующая статья
Пригласи друзей и счет твоего мобильника всегда будет положительным!

Создание ящика Combo-Toolbar



Следующее является процедурой окна для toolbar и процедура подкласса для двух combo ящиков.

#define WM_TAB (WM_USER) #define WM_ESC (WM_USER + 1) #define WM_ENTER (WM_USER + 2)

HWND hwndMain;
HWND hwndEdit;
WNDPROC lpfnEditWndProc; /* оригинальная процедура окна для */ /* окно редактирования ящика combo */

int cyToolbar; /* toolbar высота окна */

/********************************************************

ФУНКЦИЯ: ToolbarWindowProc

ЦЕЛЬ: процедура Окна для окна toolbar


*********************************************************/

LRESULT CALLBACK ToolbarWindowProc(hwnd, msg, wParam, lParam) HWND hwnd;
msg UINT;
WPARAM wParam;
LPARAM lParam;
{
статический HWND hwndEdit1;
статический HWND hwndEdit2;
статический HWND hwndCombo1;
статический HWND hwndCombo2;
.
.
.
ТОЧКА пт;
DWORD dwBaseUnits;
HWND hwndCombo;
DWORD dwIndex;

ключ (msg) {

случай WM_CREATE:

/* Создайте два combo ребенка ящика windows. */

dwBaseUnits = GetDialogBaseUnits();

hwndCombo1 = CreateWindow("COMBOBOX", "", CBS_DROPDOWN | WS_CHILD | WS_VISIBLE, (6 * LOWORD(dwBaseUnits)) / 4, (2 * HIWORD(dwBaseUnits)) / 8, (100 * LOWORD(dwBaseUnits)) / 4, (50 * HIWORD(dwBaseUnits)) / 8, hwnd, НЕДЕЙСТВИТЕЛЬНЫЙ, hinst, НЕДЕЙСТВИТЕЛЬНЫЙ);


hwndCombo2 = CreateWindow("COMBOBOX", "", CBS_DROPDOWN | WS_CHILD | WS_VISIBLE, (112 * LOWORD(dwBaseUnits)) / 4, (2 * HIWORD(dwBaseUnits)) / 8, (100 * LOWORD(dwBaseUnits)) / 4, (50 * HIWORD(dwBaseUnits)) / 8, hwnd, НЕДЕЙСТВИТЕЛЬНЫЙ, hinst, НЕДЕЙСТВИТЕЛЬНЫЙ);

/* Получите ручку окна редактирования для каждого combo box. */

pt.x = 1;
pt.y = 1;

hwndEdit1 = ChildWindowFromPoint(hwndCombo1, пт);
hwndEdit2 = ChildWindowFromPoint(hwndCombo2, пт);

/*
* Измените процедуру окна для обоих окон редактирования
* в процедуру подкласса.
*/


lpfnEditWndProc = (WNDPROC) SetWindowLong(hwndEdit1, GWL_WNDPROC, (DWORD) SubClassProc);

SetWindowLong(hwndEdit2, GWL_WNDPROC, (DWORD) SubClassProc);


прерывание;

случай WM_SETFOCUS: SetFocus(hwndCombo1);
прерывание;

случай WM_TAB: если (GetFocus() == hwndEdit1) SetFocus(hwndCombo2);
еще
SetFocus(hwndCombo1);
прерывание;

случай WM_ESC:

hwndCombo = GetFocus() == hwndEdit1?
hwndCombo1 : hwndCombo2;

/* Очистите течение selection. */


SendMessage(hwndCombo, CB_SETCURSEL, (WPARAM) (-1), 0);

/* Установите фокус на основу window. */

SetFocus(hwndMain);
прерывание;

случай WM_ENTER:
hwndCombo = GetFocus() == hwndEdit1?
hwndCombo1 : hwndCombo2;
SetFocus(hwndMain);

/* Если нет текущего выбора, установившего one. */

если (SendMessage(hwndCombo, CB_GETCURSEL, 0, 0)

== CB_ERR) { если прерывание (SendMessage(hwndCombo, WM_GETTEXT, sizeof(achTemp), (LPARAM) achTemp) == 0); /* пустая область выбора */ dwIndex = SendMessage(hwndCombo, CB_FINDSTRINGEXACT, (WPARAM) (-1), (LPARAM) achTemp);

/* Добавьте строку, если необходимый, и выбирать это. */

если (dwIndex == CB_ERR)

dwIndex = SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM) achTemp);
если (dwIndex != CB_ERR) SendMessage(hwndCombo, CB_SETCURSEL, dwIndex, 0);
}
прерывание;

.
. /* Обработайте дополнительный messages. */
.

невыполнение:
возвращайте DefWindowProc(hwnd, msg, wParam, lParam);
}
возврат 0;

}


/********************************************************

ФУНКЦИЯ: SubClassProc

ЦЕЛЬ: ТАБ. Процесса и ключей ПЕРЕХОДА и передавать все другие сообщения в процедуру окна класса.

*********************************************************/

LRESULT CALLBACK SubClassProc(hwnd, msg, wParam, lParam) HWND hwnd;
msg UINT;
WPARAM wParam;
LPARAM lParam;
{
ключ (msg) { случай WM_KEYDOWN:

ключ (wParam) { случай VK_TAB: SendMessage(hwndToolbar, WM_TAB, 0, 0);
возврат 0;
случай VK_ESCAPE: SendMessage(hwndToolbar, WM_ESC, 0, 0);
возврат 0;
случай VK_RETURN: SendMessage(hwndToolbar, WM_ENTER, 0, 0);
возврат 0;
}
прерывание;

случай WM_KEYUP:

случай WM_CHAR: ключ (wParam) { случай VK_TAB: случай VK_ESCAPE: случай VK_RETURN: возврат 0;
}
}

/*
* Призовите оригинальную процедуру окна ко встроенному
* обработка.
*/

возвращайте CallWindowProc(lpfnEditWndProc, hwnd, msg, wParam, lParam);
}



Вверх Version 1.3, Oct 26 2010 © 2007, 2010, mrhx Вверх
 mrhx software  Русский перевод OpenGL  Русский перевод Win32 API
 
Используются технологии uCoz