Работа с элементами управления


Работа с меню

Плавающее меню содержит строки "Спрятать", "Показать","Масштаб", "Свойства". Строка "Масштаб" указывает на временное меню из четырех зависимых строк: "50%", "100%", "150%" и "200%", при выборе одна из которых отмечается кружочком.

 

В строке состояния сообщать о строках меню, включая состояние строк.

Код программы

#include <windows.h>

#include <commctrl.h>

 

#include "resource.h"

 

HINSTANCE hInst;

HMENU hMenu;

HWND hStatusBar;

 

LRESULT CALLBACK WndProc(HWND hWnd,UINT msg, WPARAM wParam, LPARAM lParam);

 

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine,int nCmdShow)

{

char *ClassName="MainWindow";

char *Title="Window";

hInst=hInstance;

MSG msg;

WNDCLASS wc;

memset(&wc,0,sizeof(wc));

wc.lpszClassName=ClassName; // Имя класса окон

wc.lpfnWndProc=(WNDPROC)WndProc; // Адрес оконной функции

wc.style=CS_HREDRAW|CS_VREDRAW; // Стиль класса

wc.hInstance=hInstance; // Экземпляр приложения

wc.hIcon=LoadIcon(NULL,IDI_APPLICATION); // Пиктограмма для окон

wc.hCursor=LoadCursor(NULL,IDC_ARROW); // Курсор мыши для окон

wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); // Кисть для окон

wc.lpszMenuName=NULL; // Ресурс меню окон

wc.cbClsExtra=0; // Дополнительная память

wc.cbWndExtra=0; // Дополнительная память

 

RegisterClass(&wc);

 

HWND hWnd=CreateWindow(ClassName,Title,WS_OVERLAPPEDWINDOW,

GetSystemMetrics(SM_CXSCREEN)/10,GetSystemMetrics(SM_CYSCREEN)/10,

GetSystemMetrics(SM_CXSCREEN)/10*8,GetSystemMetrics(SM_CYSCREEN)/10*8,

NULL,NULL,hInst,NULL);

hMenu=LoadMenu(hInst,MAKEINTRESOURCE(IDR_MENU));

SetMenu(hWnd,hMenu);

hStatusBar=CreateStatusWindow(WS_CHILD|WS_VISIBLE,"",hWnd,1);

SendMessage(hStatusBar,SB_SETTEXT,SBT_NOBORDERS,(LPARAM)"Ни один пункт меню не выбран");

ShowWindow(hWnd,SW_SHOW);

UpdateWindow(hWnd);

ShowWindow(hStatusBar,SW_SHOW);

UpdateWindow(hStatusBar);

 

while(GetMessage(&msg, NULL, 0, 0))

{

TranslateMessage(&msg);

DispatchMessage(&msg);

}

return 0;

}

 

LRESULT CALLBACK WndProc(HWND hWnd,UINT msg, WPARAM wParam, LPARAM lParam)

{

switch(msg)

{

case WM_PAINT:

{

HDC hDC;

PAINTSTRUCT ps;

hDC=BeginPaint(hWnd,&ps);

TextOut(hDC,20,20,"Hello",5);

EndPaint(hWnd,&ps);

};break;

case WM_COMMAND:

switch (LOWORD(wParam))

{

case ID_50:

{

HMENU hSubMenu;

hSubMenu=GetSubMenu(hMenu,2);

CheckMenuItem(hSubMenu,0,MF_BYPOSITION|MF_CHECKED);

CheckMenuItem(hSubMenu,1,MF_BYPOSITION|MF_UNCHECKED);

CheckMenuItem(hSubMenu,2,MF_BYPOSITION|MF_UNCHECKED);

CheckMenuItem(hSubMenu,3,MF_BYPOSITION|MF_UNCHECKED);

};break;

case ID_100:

{

HMENU hSubMenu;

hSubMenu=GetSubMenu(hMenu,2);

CheckMenuItem(hSubMenu,0,MF_BYPOSITION|MF_UNCHECKED);

CheckMenuItem(hSubMenu,1,MF_BYPOSITION|MF_CHECKED);

CheckMenuItem(hSubMenu,2,MF_BYPOSITION|MF_UNCHECKED);

CheckMenuItem(hSubMenu,3,MF_BYPOSITION|MF_UNCHECKED);

};break;

case ID_150:

{

HMENU hSubMenu;

hSubMenu=GetSubMenu(hMenu,2);

CheckMenuItem(hSubMenu,0,MF_BYPOSITION|MF_UNCHECKED);

CheckMenuItem(hSubMenu,1,MF_BYPOSITION|MF_UNCHECKED);

CheckMenuItem(hSubMenu,2,MF_BYPOSITION|MF_CHECKED);

CheckMenuItem(hSubMenu,3,MF_BYPOSITION|MF_UNCHECKED);

};break;

case ID_200:

{

HMENU hSubMenu;

hSubMenu=GetSubMenu(hMenu,2);

CheckMenuItem(hSubMenu,0,MF_BYPOSITION|MF_UNCHECKED);

CheckMenuItem(hSubMenu,1,MF_BYPOSITION|MF_UNCHECKED);

CheckMenuItem(hSubMenu,2,MF_BYPOSITION|MF_UNCHECKED);

CheckMenuItem(hSubMenu,3,MF_BYPOSITION|MF_CHECKED);

};break;

};break;

case WM_MENUSELECT:

switch (LOWORD(wParam))

{

case ID_HIDE:

{

SendMessage(hStatusBar,SB_SETTEXT,SBT_NOBORDERS,(LPARAM)"Что-то скроем");

};break;

case ID_SHOW:

{

SendMessage(hStatusBar,SB_SETTEXT,SBT_NOBORDERS,(LPARAM)"Что-то покажем");

};break;

case ID_PROPERTY:

{

SendMessage(hStatusBar,SB_SETTEXT,SBT_NOBORDERS,(LPARAM)"Какие-то свойства");

};break;

case ID_50:

{

SendMessage(hStatusBar,SB_SETTEXT,SBT_NOBORDERS,(LPARAM)"50");

};break;

case ID_100:

{

SendMessage(hStatusBar,SB_SETTEXT,SBT_NOBORDERS,(LPARAM)"100");

};break;

case ID_150:

{

SendMessage(hStatusBar,SB_SETTEXT,SBT_NOBORDERS,(LPARAM)"150");

};break;

case ID_200:

{

SendMessage(hStatusBar,SB_SETTEXT,SBT_NOBORDERS,(LPARAM)"200");

};break;

};break;

case WM_EXITMENULOOP:

{

SendMessage(hStatusBar,SB_SETTEXT,SBT_NOBORDERS,(LPARAM)"Ни один пункт меню не выбран");

};break;

case WM_DESTROY:

{

PostQuitMessage(0);

}; break;

 

default: return DefWindowProc(hWnd,msg,wParam,lParam);

}

return 0;

}

 

Копии экранов

 

 


 

Работа с элементами управления

Во временном окне создать пустые списки для хранения имен файлов и путей к этим файлам. С помощью стандартной панели выбрать имена файлов в любом каталоге и записать их данные в списки временного окна. Временное окно должно обрабатывать клавиатурные сообщения так же, как и модальные панели.

В диалоговом окне размещается список и три кнопки: добавление, удаление и ок.

При добавлении в список вызывается стандартная диалоговая панель с помощью функции GetOpenFileName. В этой панели можно выбирать файл в любом каталоге, когда выбран нужный файл, путь к этому файлу и сам название самого файла с его расширением добавляются в список. При нажатии на кнопку удалить, из списка удаляется выделенная запись, если запись не выделена отображается окно об ошибке.

 

case WM_INITDIALOG:

hListBox = GetDlgItem(hDlg, IDC_LIST1);

 

ofn.lStructSize = sizeof(OPENFILENAME);

ofn.hwndOwner = hCtrl;

ofn.lpstrFile = szFile;

ofn.nMaxFile = sizeof(szFile);

return TRUE;

 

case WM_COMMAND:

switch (LOWORD(wParam))

{

case IDC_ADD_ELEMENT:

strcpy(szFile, "");

success = GetOpenFileName(&ofn);

if (success)

{

SendMessage(hListBox, LB_ADDSTRING, 0, (LPARAM)szFile);

}

break;

 

case IDC_DELETE_ELEMENT:

iCurItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0);

if (iCurItem != LB_ERR)

SendMessage(hListBox, LB_DELETESTRING, iCurItem, 0);

else

{

MessageBox(hDlg, "Сначала надо выделить элемент списка",

"Ошибка", MB_OK);

break;

}

break;

case IDC_CHANGE_ELEMENT:

iCurItem = SendMessage(hListBox, LB_GETCURSEL, 0, 0);

if (iCurItem != LB_ERR)

SendMessage(hListBox, LB_DELETESTRING, iCurItem, 0);

else

{

MessageBox(hDlg, "Сначала надо выделить элемент списка",

"Ошибка", MB_OK);

break;

}

break;

 

Состояние диалогового окна при его вызове

Стандартная панель выбора файла

Состояние окна при выборе нужного файла

Состояние окна при выборе нескольких элементов

 

 


 

 



Дата добавления: 2017-01-26; просмотров: 963;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.019 сек.