На главную

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 Square Meal Dialog Box



Following are the dialog box procedure and supporting functions for the Square Meal dialog box.

HWND hwndMain;
HWND hwndEdit;
char achTemp[256]; /* temporary buffer */

HBITMAP hbmBread;
HBITMAP hbmDairy;
HBITMAP hbmFruit;
HBITMAP hbmMeat;
HBITMAP hbmBreadMask;
HBITMAP hbmDairyMask;
HBITMAP hbmFruitMask;
HBITMAP hbmMeatMask;

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

FUNCTION: FoodDlgProc

PURPOSE: Dialog procedure for Food dialog box.

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


BOOL CALLBACK FoodDlgProc(hwndDlg, msg, wParam, lParam)
HWND hwndDlg;
UINT msg;
WPARAM wParam;
LPARAM lParam;
{
LPMEASUREITEMSTRUCT lpmis;
LPDRAWITEMSTRUCT lpdis;
HBITMAP hbmIcon;
HBITMAP hbmMask;
COLORREF clrBackground;
COLORREF clrForeground;
TEXTMETRIC tm;
HDC hdc;
HWND hwnd;
int x;
int y;

switch (msg) {
case WM_INITDIALOG:

/*
* Call an application-defined function to load

* bitmap resources.
*/

if (!LoadIconBitmaps()) {
EndDialog(hwndDlg, -1);
break;
}

/* Initialize the drop-down list box. */

if (!InitGroupList(hwndDlg)) {
DeleteIconBitmaps();
EndDialog(hwndDlg, -1);
break;
}

/* Select the first food group. */

SendDlgItemMessage(hwndDlg, IDCOMBO, CB_SETCURSEL,

0, 0);

/* List the foods and select the first food. */

InitFoodList(hwndDlg);
SendDlgItemMessage(hwndDlg, IDLIST, LB_SETCURSEL,
0, 0);
break;

case WM_MEASUREITEM:
lpmis = (LPMEASUREITEMSTRUCT) lParam;

if (lpmis->itemHeight < CY_BITMAP + 2)
lpmis->itemHeight = CY_BITMAP + 2;

break;

case WM_DRAWITEM:

lpdis = (LPDRAWITEMSTRUCT) lParam;
if (lpdis->itemID == -1) /* empty item */
break;

/* Determine the bitmaps used to draw the icon. */

switch (lpdis->itemData) {
case ID_BREAD:
hbmIcon = hbmBread;
hbmMask = hbmBreadMask;
break;

case ID_DAIRY:
hbmIcon = hbmDairy;

hbmMask = hbmDairyMask;
break;

case ID_FRUIT:
hbmIcon = hbmFruit;
hbmMask = hbmFruitMask;
break;

default: /* meat */
hbmIcon = hbmMeat;
hbmMask = hbmMeatMask;
break;
}

/*
* The colors depend on whether the item is

* selected.
*/

clrForeground = SetTextColor(lpdis->hDC,
GetSysColor(lpdis->itemState & ODS_SELECTED ?
COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT));

clrBackground = SetBkColor(lpdis->hDC,
GetSysColor(lpdis->itemState & ODS_SELECTED ?
COLOR_HIGHLIGHT : COLOR_WINDOW));

/* Calculate the vertical and horizontal position. */

GetTextMetrics(lpdis->hDC, &tm);

y = (lpdis->rcItem.bottom + lpdis->rcItem.top -
tm.tmHeight) / 2;
x = LOWORD(GetDialogBaseUnits()) / 4;

/* Get and display the text for the list item. */

SendMessage(lpdis->hwndItem, CB_GETLBTEXT,
lpdis->itemID, (LPARAM) (LPCSTR) achTemp);

ExtTextOut(lpdis->hDC, CX_BITMAP + 2 * x, y,
ETO_CLIPPED | ETO_OPAQUE, &lpdis->rcItem,
achTemp, lstrlen(achTemp), NULL);


/* Restore the previous colors. */

SetTextColor(lpdis->hDC, clrForeground);
SetBkColor(lpdis->hDC, clrBackground);

/* Show the icon. */

hdc = CreateCompatibleDC(lpdis->hDC);
if (hdc == NULL)
break;

SelectObject(hdc, hbmMask);
BitBlt(lpdis->hDC, x, lpdis->rcItem.top + 1,
CX_BITMAP, CY_BITMAP, hdc, 0, 0, SRCAND);


SelectObject(hdc, hbmIcon);
BitBlt(lpdis->hDC, x, lpdis->rcItem.top + 1,
CX_BITMAP, CY_BITMAP, hdc, 0, 0, SRCPAINT);

DeleteDC(hdc);

/* If the item has the focus, draw focus rectangle. */

if (lpdis->itemState & ODS_FOCUS)
DrawFocusRect(lpdis->hDC, &lpdis->rcItem);

break;

case WM_COMMAND:
switch (LOWORD(wParam)) {
case IDCOMBO:

if (HIWORD(wParam) == CBN_SELENDOK) {
InitFoodList(hwndDlg);
SendDlgItemMessage(hwndDlg, IDLIST,
LB_SETCURSEL, 0, 0);
}
break;

case IDLIST:
if (HIWORD(wParam) != LBN_DBLCLK)
break;

/* For a double-click, process the OK case. */

case IDOK:


/* Get the text for the selected list item. */

hwnd = GetDlgItem(hwndDlg, IDLIST);
SendMessage(hwnd, LB_GETTEXT,
SendMessage(hwnd, LB_GETCURSEL, 0, 0),
(LPARAM) achTemp);

/* Insert the text into the edit window. */

SendMessage(hwndEdit, EM_REPLACESEL, 0,
(LPARAM) achTemp);


EndDialog(hwndDlg, 0);
break;

case IDCANCEL:
hwnd = GetDlgItem(hwndDlg, IDCOMBO);
if (SendMessage(hwnd, CB_GETDROPPEDSTATE,
0, 0))
SendMessage(hwnd, CB_SHOWDROPDOWN,
FALSE, 0);
else
EndDialog(hwndDlg, 0);
}
break;


case WM_DESTROY:

/*
* Call the application-defined function to free
* bitmap resources.
*/

DeleteIconBitmaps();
break;

default:
return FALSE;
}
return TRUE;
}


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

FUNCTION: InitGroupList

PURPOSE: Initializes the "food groups" drop-down
list box.


COMMENTS: The ID of the food group associated with
each list item is saved as item data.

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

BOOL PASCAL InitGroupList(HWND hwndDlg)
{
HWND hwndCombo = GetDlgItem(hwndDlg, IDCOMBO);
DWORD dwIndex;

/* Add an item for each food group. */

LoadString(hinst, ID_BREAD, achTemp, sizeof(achTemp));
dwIndex = SendMessage(hwndCombo, CB_ADDSTRING, 0,
(LPARAM) (LPCSTR) achTemp);

SendMessage(hwndCombo, CB_SETITEMDATA, dwIndex, ID_BREAD);

LoadString(hinst, ID_DAIRY, achTemp, sizeof(achTemp));
dwIndex = SendMessage(hwndCombo, CB_ADDSTRING, 0,
(LPARAM) (LPCSTR) achTemp);
SendMessage(hwndCombo, CB_SETITEMDATA, dwIndex, ID_DAIRY);

LoadString(hinst, ID_FRUIT, achTemp, sizeof(achTemp));
dwIndex = SendMessage(hwndCombo, CB_ADDSTRING, 0,
(LPARAM) (LPCSTR) achTemp);
SendMessage(hwndCombo, CB_SETITEMDATA, dwIndex, ID_FRUIT);


LoadString(hinst, ID_MEAT, achTemp, sizeof(achTemp));
dwIndex = SendMessage(hwndCombo, CB_ADDSTRING, 0,
(LPARAM) (LPCSTR) achTemp);
SendMessage(hwndCombo, CB_SETITEMDATA, dwIndex, ID_MEAT);

return TRUE;
}


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

FUNCTION: InitFoodList

PURPOSE: Clears the contents of the food list, and
adds the names of foods for the current
food group.


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

void PASCAL InitFoodList(HWND hwndDlg)
{
HWND hwndCombo = GetDlgItem(hwndDlg, IDCOMBO);
HWND hwndList = GetDlgItem(hwndDlg, IDLIST);
UINT idFoodGroup;
LPSTR lpsz;
LPSTR lpszEnd;

/* Determine the current food group. */

idFoodGroup = SendMessage(
hwndCombo,
CB_GETITEMDATA,
SendMessage(hwndCombo, CB_GETCURSEL, 0, 0),
0

);

/* Clear the list contents. */

SendMessage(hwndList, LB_RESETCONTENT, 0, 0);

.
. /* Add food names for the current food group. */
.

}



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

Создание Диалогового Ящика Квадратной Еды



Следующее является диалоговой процедурой ящика и поддерживать функционирует для диалогового ящика Квадратной Еды.

HWND hwndMain;
HWND hwndEdit;
символ achTemp[256]; /* временный буфер */

HBITMAP hbmBread;
HBITMAP hbmDairy;
HBITMAP hbmFruit;
HBITMAP hbmMeat;
HBITMAP hbmBreadMask;
HBITMAP hbmDairyMask;
HBITMAP hbmFruitMask;
HBITMAP hbmMeatMask;

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

ФУНКЦИЯ: FoodDlgProc

ЦЕЛЬ: процедура Диалога для Продовольственного диалогового ящика.

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


BOOL CALLBACK FoodDlgProc(hwndDlg, msg, wParam, lParam) HWND hwndDlg;
msg UINT;
WPARAM wParam;
LPARAM lParam;
{
lpmis LPMEASUREITEMSTRUCT;
lpdis LPDRAWITEMSTRUCT;
HBITMAP hbmIcon;
HBITMAP hbmMask;
COLORREF clrBackground;
COLORREF clrForeground;
tm TEXTMETRIC;
hdc HDC;
HWND hwnd;
int x;
int y;

ключ (msg) { случай WM_INITDIALOG:

/*
* Назовите определенную прикладную функцию, чтобы загружаться

* ресурсы побитового отображения.
*/

если (!LoadIconBitmaps()) { EndDialog(hwndDlg, -1);
прерывание;
}

/* Инициализируйте каплю-вниз список box. */

если (!InitGroupList(hwndDlg)) { DeleteIconBitmaps();
EndDialog(hwndDlg, -1);
прерывание;
}

/* Выберитесь первую пищу group. */

SendDlgItemMessage(hwndDlg, IDCOMBO, CB_SETCURSEL,

0, 0);

/* Укажите пищу и выбирайтесь первый food. */

InitFoodList(hwndDlg);
SendDlgItemMessage(hwndDlg, IDLIST, LB_SETCURSEL,
0, 0);
прерывание;

случай WM_MEASUREITEM: lpmis = (LPMEASUREITEMSTRUCT) lParam;

если (lpmis->itemHeight < CY_BITMAP + 2) lpmis->itemHeight = CY_BITMAP + 2;

прерывание;

случай WM_DRAWITEM:

lpdis = (LPDRAWITEMSTRUCT) lParam;
если (lpdis->itemID == -1) /* пустой пункт */ прерывание;

/* Определите побитовые отображения использованные, чтобы делать icon. */

ключ (lpdis->itemData) { случай ID_BREAD: hbmIcon = hbmBread;
hbmMask = hbmBreadMask;
прерывание;

случай ID_DAIRY: hbmIcon = hbmDairy;

hbmMask = hbmDairyMask;
прерывание;

случай ID_FRUIT: hbmIcon = hbmFruit;
hbmMask = hbmFruitMask;
прерывание;

невыполнение: /* мясо */ hbmIcon = hbmMeat;
hbmMask = hbmMeatMask;
прерывание;
}

/*
* Цвета зависят от независимо пункта

* выбранное.
*/

clrForeground = SetTextColor(lpdis->hDC, GetSysColor(lpdis->itemState & ODS_SELECTED?
COLOR_HIGHLIGHTTEXT : COLOR_WINDOWTEXT));

clrBackground = SetBkColor(lpdis->hDC, GetSysColor(lpdis->itemState & ODS_SELECTED?
COLOR_HIGHLIGHT : COLOR_WINDOW));

/* Вычислите вертикальный и горизонтальный position. */

GetTextMetrics(lpdis->hDC, &tm);

y = (lpdis->rcItem.bottom + lpdis->rcItem.top - tm.tmHeight) / 2;
x = LOWORD(GetDialogBaseUnits()) / 4;

/* Получите и отображайте текст для пункта списка. */

SendMessage(lpdis->hwndItem, CB_GETLBTEXT, lpdis->itemID, (LPARAM) (LPCSTR) achTemp);

ExtTextOut(lpdis->hDC, CX_BITMAP + 2 * x, y, ETO_CLIPPED | ETO_OPAQUE, &lpdis->rcItem, achTemp, lstrlen(achTemp), НЕДЕЙСТВИТЕЛЬНЫЙ);


/* Восстановите предшествующий colors. */

SetTextColor(lpdis->hDC, clrForeground);
SetBkColor(lpdis->hDC, clrBackground);

/* Покажите icon. */

hdc = CreateCompatibleDC(lpdis->hDC);
если прерывание (hdc == НЕДЕЙСТВИТЕЛЬНОЕ);

SelectObject(hdc, hbmMask);
BitBlt(lpdis->hDC, x, lpdis->rcItem.top + 1, CX_BITMAP, CY_BITMAP, hdc, 0, 0, SRCAND);


SelectObject(hdc, hbmIcon);
BitBlt(lpdis->hDC, x, lpdis->rcItem.top + 1, CX_BITMAP, CY_BITMAP, hdc, 0, 0, SRCPAINT);

DeleteDC(hdc);

/* Если пункт имеет фокус, сделайте фокусом rectangle. */

если (lpdis->itemState & ODS_FOCUS) DrawFocusRect(lpdis->hDC, &lpdis->rcItem);

прерывание;

случай WM_COMMAND: ключ (LOWORD(wParam)) { случай IDCOMBO:

если (HIWORD(wParam) == CBN_SELENDOK) { InitFoodList(hwndDlg);
SendDlgItemMessage(hwndDlg, IDLIST, LB_SETCURSEL, 0, 0);
}
прерывание;

случай IDLIST: если прерывание (HIWORD(wParam) != LBN_DBLCLK);

/* Для двойного-щелчка, обработайте case. OK */

случай IDOK:


/* Получите текст для выбранного списка item. */

hwnd = GetDlgItem(hwndDlg, IDLIST);
SendMessage(hwnd, LB_GETTEXT, SendMessage(hwnd, LB_GETCURSEL, 0, 0), (LPARAM) achTemp);

/* Включите текст в редактирование window. */

SendMessage(hwndEdit, EM_REPLACESEL, 0, (LPARAM) achTemp);


EndDialog(hwndDlg, 0);
прерывание;

случай IDCANCEL: hwnd = GetDlgItem(hwndDlg, IDCOMBO);
если (SendMessage(hwnd, CB_GETDROPPEDSTATE,
0, 0))
SendMessage(hwnd, CB_SHOWDROPDOWN, ЛОЖЬ, 0);
еще EndDialog(hwndDlg, 0);
}
прерывание;


случай WM_DESTROY:

/*
* Назовите определенную прикладную функцию, чтобы освобождаться
* ресурсы побитового отображения.
*/

DeleteIconBitmaps();
прерывание;

невыполнение: обратная ЛОЖЬ;
}
возвращайтесь ВЕРНО;
}


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

ФУНКЦИЯ: InitGroupList

ЦЕЛЬ: Инициализирует каплю-вниз список ящика "продовольственных групп".


КОММЕНТАРИИ: ID продовольственный группа связанное каждым пунктом списка сохранен как данные пункта.

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

BOOL PASCAL InitGroupList(HWND hwndDlg)
{
HWND hwndCombo = GetDlgItem(hwndDlg, IDCOMBO);
DWORD dwIndex;

/* Добавьте пункт для каждой продовольственной группы. */

LoadString(hinst, ID_BREAD, achTemp, sizeof(achTemp));
dwIndex = SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM) (LPCSTR) achTemp);

SendMessage(hwndCombo, CB_SETITEMDATA, dwIndex, ID_BREAD);

LoadString(hinst, ID_DAIRY, achTemp, sizeof(achTemp));
dwIndex = SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM) (LPCSTR) achTemp);
SendMessage(hwndCombo, CB_SETITEMDATA, dwIndex, ID_DAIRY);

LoadString(hinst, ID_FRUIT, achTemp, sizeof(achTemp));
dwIndex = SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM) (LPCSTR) achTemp);
SendMessage(hwndCombo, CB_SETITEMDATA, dwIndex, ID_FRUIT);


LoadString(hinst, ID_MEAT, achTemp, sizeof(achTemp));
dwIndex = SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM) (LPCSTR) achTemp);
SendMessage(hwndCombo, CB_SETITEMDATA, dwIndex, ID_MEAT);

возвращайтесь ВЕРНО;
}


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

ФУНКЦИЯ: InitFoodList

ЦЕЛЬ: Очищает содержание продовольственного списка и добавляет имена пищи для текущей продовольственной группы.


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

пустота PASCAL InitFoodList(HWND hwndDlg)
{
HWND hwndCombo = GetDlgItem(hwndDlg, IDCOMBO);
HWND hwndList = GetDlgItem(hwndDlg, IDLIST);
UINT idFoodGroup;
LPSTR lpsz;
LPSTR lpszEnd;

/* Определите текущую пищу group. */

idFoodGroup = SendMessage( hwndCombo, CB_GETITEMDATA,
SendMessage(hwndCombo, CB_GETCURSEL, 0, 0),
0

);

/* Очистите список contents. */

SendMessage(hwndList, LB_RESETCONTENT, 0, 0);

.
. /* Добавьте пищу называет в честь текущей пищи group. */
.

}



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