Ws_tabstop

Тема в разделе "MS Visual C++", создана пользователем 17dufa, 9 май 2006.

Статус темы:
Закрыта.
  1. 17dufa

    17dufa Гость

    Здравтвуйте,
    такая проблема: нужо сделать переключение между элементами управления (эдиты, кнопочки) по нажатию TAB и/или стрелок используя WinApi. Делаю так:
    Код (Text):
      hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPED   |
                  WS_CAPTION    |
                  WS_SYSMENU    |
                  WS_THICKFRAME   |
                  WS_MINIMIZEBOX  |
                  WS_MAXIMIZEBOX ,
      CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

    Button_CH = CreateWindowEx(WS_EX_CLIENTEDGE, L"button", L"Change", WS_CHILD | WS_VISIBLE | WS_TABSTOP | BS_USERBUTTON,
               230, 80, 80, 20, hWnd, (HMENU)IDC_BUTTON_CH, hInstance, NULL);

     Button_CH_OK = CreateWindowEx(WS_EX_CLIENTEDGE, L"button", L"Change OK", WS_CHILD | WS_VISIBLE | WS_TABSTOP |BS_USERBUTTON,
               230, 110, 80, 20, hWnd, (HMENU)IDC_BUTTON_CH_OK, hInstance, NULL);

     Edit = CreateWindowEx(WS_EX_CLIENTEDGE, L"edit", L"", WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL,
               90, 360, 130, 20, hWnd, (HMENU)IDC_EDIT, hInstance, NULL);
    а переключаться окошки не хотят, причем если делаю первое как WS_GROUP, а с остальных снимаю WS_TABSTOP стрелочки работать тоже не хотят. Может что не правильно делаю в оконной процедуре (то есть в ней я вообще ничего не делаю для переключения окошек)?
     
  2. Kmet

    Kmet Well-Known Member

    Регистрация:
    25 май 2006
    Сообщения:
    1.017
    Симпатии:
    1
    WS_TABSTOP
    MSDN "You can turn on this style on or off to change dialog box navigation"

    Аналогичная приписка мелким шрифтом и для WS_GROUP

    Так что придется или ручками переключать или делать диалоговое окно, хотя наверное можно с бубном поплясать вызвая DefDlgProc перед\вместо DefWindowProc, но то что из этого получиться путное не гарантирую
     
  3. Maxx

    Maxx Гость

    в цикле обработки сообщения добавить вызов функции IsDialogMessage, которая отвечает за стрелки и TAB

    Код (Text):
    while ((GetMessage(&msg, 0, 0, 0))
    {
    // hwnd - дескриптор главного окна
    if (!IsDialogMessage(hwnd))
    {
    TranslateMessage(&msg);
    DispatchMessage(&msg);
    }
    }
     
Статус темы:
Закрыта.

Поделиться этой страницей