Перейти до основного
Підтримка
Вхід
Вхід за допомогою облікового запису Microsoft
Увійдіть або створіть обліковий запис.
Вітаємо,
Виберіть інший обліковий запис.
У вас є кілька облікових записів
Виберіть обліковий запис, за допомогою якого потрібно ввійти.

Загальні відомості

На основі Windows програми часто відображаються діалогові вікна введення даних, щоб запитувати інформацію від користувачів. Ці діалогові вікна можуть містити кілька елементів керування "Редагувати", а також дві кнопки (Push), позначені як "OK" і "Скасувати". Приклад діалогового вікна введення даних – це один із запитів особистих відомостей, наприклад номера соціального страхування, адреси, ідентифікації (ІДЕНТИФІКАТОРА), дати й часу тощо, від користувачів. Кожне з цих елементів вводиться в елемент керування "Редагування". За замовчуванням клавіша TAB використовується в діалоговому вікні, щоб змінити фокус між елементами керування. Проте можна також використовувати клавішу ENTER (RETURN), щоб переміщатися між елементами керування (наприклад, після того, як користувач вводить фрагмент інформації, натискаючи клавішу ENTER переміщує фокус до наступного поля). Щоб перейти до переходу між елементами керування, можна ввімкнути кілька способів використання клавіші ВВОДУ. Один із способів полягає в тому, щоб використовувати WM_COMMAND та сповіщення, які постачаються з ним у діалоговому вікні для редагування елементів керування та кнопок. Ще один метод включає в себе відповідні елементи керування "Редагування". Третина включає в себе використання веб-студії та майстра класів і створення нової функції учасника діалогового вікна.

Додаткові відомості

Метод I: (WM_COMMAND)

Цей метод ґрунтується на такій поведінці діалогових вікон (диспетчер діалогових вікон) і фокус фокуса в ОС Windows. Якщо діалогове вікно або один із його елементів керування, який наразі має фокус, натисніть клавішу вводу, щоб створити повідомлення WM_COMMAND з параметром idItem (wParam) для ІДЕНТИФІКАТОРА кнопки за замовчуванням. Якщо в діалоговому вікні немає кнопки за замовчуванням, то параметр idItem має значення IDOK за замовчуванням. Коли програма отримує повідомлення WM_COMMAND з ідентифікатором "idItem" для ідентифікатора кнопки за замовчуванням, фокус залишається з елементом керування, який мав фокус до натискання клавіші ВВОДУ. Виклик GetFocus () на цьому етапі повертає дескриптор елемента керування, який мав фокус до натискання клавіші ВВОДУ. Програма може перевірити цей маркер керування та визначити, чи вона належить до будь-якого елемента керування "Редагувати" в діалоговому вікні. Якщо це так, користувач увев дані в один із елементів керування, а потім натисніть клавішу ВВІД. На цьому етапі програма може відправити WM_NEXTDLGCTL повідомлення в діалогове вікно, щоб перемістити фокус до наступного елемента керування. Однак, якщо фокус було з однією з кнопок (кнопка "Скасувати" або "OK"), то функція GetFocus () повертає маркер елемента керування, після чого можна відхилити діалогове вікно. Псевдо-код цієї логіки нагадує наступне в процедурі діалогового вікна програми:

     case WM_COMMAND:     if(wParam=IDOFDEFBUTTON || IDOK) {          // User has hit the ENTER key.          hwndTest = GetFocus() ;          retVal = TesthWnd(hWndTest) ;          //Where retVal is a boolean variable that indicates whether        //the hwndTest is the handle of one of the edit controls.          if(hwndTest) {         //Focus is with an edit control, so do not close the dialog.            //Move focus to the next control in the dialog.         PostMessage(hDlg, WM_NEXTDLGCTL, 0, 0L) ;         return TRUE ;          }          else {            //Focus is with the default button, so close the dialog.            EndDialog(hDlg, TRUE) ;            return FALSE ;          }        }     break ;

Метод II

Цей метод включає в себе відповідні можливості, а також налаштувати елемент керування "Редагування" в діалоговому вікні. Після того, як елементи керування "Редагувати" підкласифічуватись або надкласифіковані, усі вхідні на клавіатурі надсилатиметься як процедура "Редагування", яка зараз має вхідний фокус, незалежно від того, чи є діалогове вікно за замовчуванням. Програма може трепінгувати ключові повідомлення (або char), шукати клавішу ВВОДУ, а також виконувати обробку відповідним чином. Нижче наведено зразок процедури підкласу, яка шукає ключ ВВОДУ.

   //*-------------------------------------------------------------------   //| Title:   //|     SubClassProc   //|   //| Parameters:   //|     hWnd            - Handle to the message's destination window   //|     wMessage        - Message number of the current message   //|     wParam          - Additional info associated with the message   //|     lParam          - Additional info associated with the message   //|   //| Purpose:   //|     This is the window procedure used to subclass the edit control.   //*---------------------------------------------------------------------   long FAR PASCAL SubProc(HWND hWnd, WORD wMessage,WORD wParam,LONG                           lParam)   {       switch (wMessage)        {             case WM_GETDLGCODE:               return (DLGC_WANTALLKEYS |                       CallWindowProc(lpOldProc, hWnd, wMessage,                                      wParam, lParam));             case WM_CHAR:             //Process this message to avoid message beeps.            if ((wParam == VK_RETURN) || (wParam == VK_TAB))              return 0;               else              return (CallWindowProc(lpOldProc, hWnd,                                        wMessage, wParam, lParam));          case WM_KEYDOWN:               if ((wParam == VK_RETURN) || (wParam == VK_TAB)) {                 PostMessage (ghDlg, WM_NEXTDLGCTL, 0, 0L);                 return FALSE;               }            return (CallWindowProc(lpOldProc, hWnd, wMessage,                                      wParam, lParam));            break ;          default:               break;        } /* end switch */ 

Спосіб 3.

Цей метод включає в себе використання програм-студіо та ClassWizard і створення нової функції учасника діалогового вікна. Цей метод дасть змогу користувачу натискати клавішу ВВОДУ та перейти до фокуса до наступного елемента керування "Редагування". Якщо фокус зараз перебуває в останньому елементі керування "Редагування" в діалоговому вікні, фокус буде перейти до першого елемента керування "Редагування". Спочатку скористайтеся програмою Studio, щоб змінити ІДЕНТИФІКАТОР кнопки OK діалогового вікна. Поведінка за замовчуванням у програмі Studio дає змогу натиснути кнопку OK ID IDOK. ІДЕНТИФІКАТОР кнопки OK має бути змінене для іншого значення, наприклад IDC_OK. Крім того, змініть властивості кнопки OK, щоб вона не була типовою кнопкою. Далі використовуйте майстер ClassWizard, щоб створити новий елемент діалогового вікна. Назвіть новий учасник функції, як-от Onclonekdok. Цю функцію слід прив'язати до BN_CLICKED повідомлення з елемента керування IDC_OK. Після цього, напишіть в тілі функції Onclakkedok. Ви повинні помістити код, який зазвичай можна помістити в функцію OnOK, у нову функцію Onclakkedok, включно з функцією OnOK класу. Додайте наведений нижче прототип до файлу заголовка діалогового вікна:

   protected:      virtual void OnOK();

Додайте функцію OnOK у діалоговому вікні та код, як показано нижче:

   void CMyDialog::OnOK()   {        CWnd* pwndCtrl = GetFocus();        CWnd* pwndCtrlNext = pwndCtrl;        int ctrl_ID = pwndCtrl->GetDlgCtrlID();        switch (ctrl_ID) {            case IDC_EDIT1:                pwndCtrlNext = GetDlgItem(IDC_EDIT2);                break;            case IDC_EDIT2:                pwndCtrlNext = GetDlgItem(IDC_EDIT3);                break;            case IDC_EDIT3:                pwndCtrlNext = GetDlgItem(IDC_EDIT4);                break;            case IDC_EDIT4:                pwndCtrlNext = GetDlgItem(IDC_EDIT1);                break;            case IDOK:                CDialog::OnOK();                break;            default:                break;        }        pwndCtrlNext->SetFocus();   }

Потрібна додаткова довідка?

Потрібні додаткові параметри?

Ознайомтеся з перевагами передплати, перегляньте навчальні курси, дізнайтесь, як захистити свій пристрій тощо.

Спільноти допомагають ставити запитання й відповідати на них, надавати відгуки та дізнаватися думки висококваліфікованих експертів.

Чи ця інформація була корисною?

Наскільки ви задоволені якістю мови?
Що вплинуло на ваші враження?
Натиснувши кнопку "Надіслати", ви надасте свій відгук для покращення продуктів і служб Microsoft. Ваш ІТ-адміністратор зможе збирати ці дані. Декларація про конфіденційність.

Дякуємо за відгук!

×