В клиентском окне почему-то не переключается фокус между контролами клавишей TAB.
Не могу понять, он и не должен переключаться (надо собственный обработчик этой клавиши писать) или всё-таки искать ошибку в коде?
WinAPI, VC++
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);
}
}
}
Переделал цикл, вроде заработало:
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);
}
}
}