Сейчас нас будет интересовать кнопка Ввод/Просмотр других сведений. По нажатию, на эту кнопку в Access меняются кнопки.
По нажатию на кнопку Авторы отроется таблица Авторы. То есть эти кнопки дают нам возможность работать с таблицами, добавлять, удалять и так далее. Но интересно то, что кнопки просто пропадают и появляются новые. Именно этим мы и займемся, то есть реализаций такой возможности в данном шаге. Итак, по нажатию на кнопку Ввод/Просмотр других сведений с диалогового окна должны пропадать кнопки. Создаем функцию ShowButton.
void CBiblioDlg::ShowButton(int iStart, int iFinish, int iShow) { }
В параметрах - начало идентификаторов и конец идентификаторов, тип отображения. Почему начало и конец. Давайте посмотрим наш файл с ресурсами Resource.h:
// Group 1> #define IDC_STATIC_QUIT 1000 #define IDC_BUTTON_BOOK 1001 #define IDC_BUTTON_CITAT 1002 #define IDC_BUTTON_OTHER 1003 #define IDC_BUTTON_REPORT 1004 #define IDC_BUTTON_EDIT 1005 #define IDC_STATIC_BOOK 1006 #define IDC_STATIC_CITAT 1007 #define IDC_STATIC_OTHER 1008 #define IDC_STATIC_REPORT 1009 #define IDC_STATIC_EDITS 1010 // End Group 1
Они идут подряд. Естественно нумерация зависит от того, в какой последовательности производилась вставка, но мы можем и сами перенумеровать при необходимости, просто отредактировав Resource.h. Пишем функцию:
void CBiblioDlg::ShowButton(int iStart, int iFinish, int iShow) { for (int x=iStart;x<=iFinish;x++) { CWnd *cw=GetDlgItem(x); // получить окно по идентификатору cw->ShowWindow(iShow); // спрятать элемент управления } }
Вот теперь и напишем реакцию на нажатие кнопки ввод просмотр других сведений.
void CBiblioDlg::OnButtonOther() { ShowButton(IDC_STATIC_QUIT,IDC_STATIC_EDITS,SW_HIDE); ShowButton(IDOK,IDOK,SW_HIDE); } void CBiblioDlg::OnStaticOther() { OnButtonOther(); }
Нажимая на кнопку все должно пропадать. Но у нас должны появляться другие кнопки. Их нужно поместить на диалоговую панель, только пока установить Visible в FALSE и при запуске диалога их будет не видно.
Тут же сделаем события реакции.
void CBiblioDlg::OnButtonAuthorform() { // TODO: Add your control notification handler code here } void CBiblioDlg::OnButtonContens() { // TODO: Add your control notification handler code here } void CBiblioDlg::OnButtonExitother() { // TODO: Add your control notification handler code here }
Разместим статические надписи.
Естественно к этим элементам нужна реакция на щелчок которая будет аналогична нажатию на кнопки.
void CBiblioDlg::OnStaticExitform() { OnButtonExitother(); } void CBiblioDlg::OnStaticContectForm() { OnButtonContens(); } void CBiblioDlg::OnStaticAuthorform() { OnButtonAuthorform(); }
Теперь по нажатию, но кнопку нужно не только прятать элементы но и показывать невидимые. Вот они в ресурсах.
#define IDC_BUTTON_AUTHORFORM 1012 #define IDC_BUTTON_CONTENS 1013 #define IDC_BUTTON_EXITOTHER 1014 #define IDC_STATIC_AUTHORFORM 1015 #define IDC_STATIC_CONTECT_FORM 1016 #define IDC_STATIC_EXITFORM 1017
А вот новые код.
void CBiblioDlg::OnButtonOther() { ShowButton(IDC_STATIC_QUIT,IDC_STATIC_EDITS,SW_HIDE); ShowButton(IDOK,IDOK,SW_HIDE); ShowButton(IDC_BUTTON_AUTHORFORM,IDC_STATIC_EXITFORM,SW_SHOW); }
А по нажатию на кнопку выхода в главную форму все наоборот.
void CBiblioDlg::OnButtonExitother() { ShowButton(IDC_STATIC_QUIT,IDC_STATIC_EDITS,SW_SHOW); ShowButton(IDOK,IDOK,SW_SHOW); ShowButton(IDC_BUTTON_AUTHORFORM,IDC_STATIC_EXITFORM,SW_HIDE); }
Вот так это будет работать.