Не работает переключение по TAB между контролами в MDI окне
От: needDrivers  
Дата: 07.07.09 13:26
Оценка:
В клиентском окне почему-то не переключается фокус между контролами клавишей TAB.
Не могу понять, он и не должен переключаться (надо собственный обработчик этой клавиши писать) или всё-таки искать ошибку в коде?

WinAPI, VC++
Re: Не работает переключение по TAB между контролами в MDI о
От: Аноним  
Дата: 07.07.09 14:44
Оценка:
а IsDialogMessage в цикле выборки сообщений есть?
Re[2]: Не работает переключение по TAB между контролами в MD
От: rus blood Россия  
Дата: 07.07.09 17:44
Оценка:
Здравствуйте, Аноним, Вы писали:

А>а IsDialogMessage в цикле выборки сообщений есть?


Цикл наверняка MFC-вый...

Я бы начал телепатический сеанс с проверки флагов WS_TABSTOP...
Имею скафандр — готов путешествовать!
Re[3]: Не работает переключение по TAB между контролами в MD
От: needDrivers  
Дата: 07.07.09 19:20
Оценка:
RB>Цикл наверняка MFC-вый...
Ни какого MFC — написал же WinAPI

IsDialogMessage в цикле присутствует.
В окне один контрол ListView со стилем WS_TABSTOP
    hwndListView = CreateWindowEx(WS_EX_CLIENTEDGE, WC_LISTVIEW, NULL,
                            WS_VISIBLE | WS_CHILD | LVS_REPORT | LVS_SHOWSELALWAYS | LVS_SINGLESEL | LVS_NOSORTHEADER | WS_TABSTOP | LVS_OWNERDATA,
                            ...., hwnd, NULL, g_hInstance, NULL);


и диалоговое окно с несколькими контролами.
    hwndInfo = CreateDialogParam(g_hInstance, MAKEINTRESOURCE(IDD_INFO), hwnd, (DLGPROC) DialogProc_Info, (LPARAM) 0);
    SetWindowPos(hwndInfo, hwndListView, ..., SWP_SHOWWINDOW);



Цикл такой:
    while(GetMessage(&msg, NULL, 0x00, 0x00) != -1)
    {
        if(msg.message == WM_QUIT)
        {
            break;
        }

        if(!TranslateMDISysAccel(hwndMDIClient, &msg)
        && !TranslateAccelerator(g_hwnd, hAccelTable, &msg))
        {
            if(!IsWindow(msg.hwnd) || (GetClassLong(msg.hwnd, GCW_ATOM) != 32770) || !IsDialogMessage(msg.hwnd, &msg))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
    }
Re[4]: Не работает переключение по TAB между контролами в MD
От: Аноним  
Дата: 08.07.09 10:10
Оценка:
Переделал цикл, вроде заработало:

    while(GetMessage(&msg, NULL, 0x00, 0x00) != -1)
    {
        if(msg.message == WM_QUIT)
        {
            break;
        }

        hwnd = (HWND) SendMessage(hwndMDIClient, WM_MDIGETACTIVE, 0, 0L);

        if(!TranslateMDISysAccel(hwndMDIClient, &msg)
        && !TranslateAccelerator(g_hwnd, hAccelTable, &msg))
        {
            if(!hwnd || !IsWindow(hwnd) || !IsDialogMessage(hwnd, &msg))
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
    }
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.