Здравствуйте! Скажите, как в блокноте диалоговых панелей(PropertySheet) определит индекс выбранной страницы, как узнать последняя ли это страница? Я делаю так, так я узнаю дескриптор выбранной страницы и, затем, индекс данной страницы. Код (C++): HWND hWnd = (HWND)SendMessage(GetParent(hDlg), PSM_GETCURRENTPAGEHWND, 0, 0L); LRESULT idx = SendMessage(GetParent(hDlg), PSM_HWNDTOINDEX, (WPARAM)hWnd, 0L); А как узнать индекс(дескриптор следующей страницы) чтобы, например, на неё перейти? Возможно, так, но полной уверенности в этом нет... Код (C++): GetNextDlgGroupItem Не знаю, так же, правильно ли я уничтожаю блокнот, нужно по нажатии на кнопку "Готово" перейти к\на следующую страницу блокнота, если больше страниц нет, то нужно завершить работу блокнот. Я делаю так, но не уверен, что это правильно: Код (C++): case ID_BUTTON_READY: { /* int idx = SendMessage(hList, LB_GETSEL, 0, 0L); if (idx == LB_ERR || idx == 0) { MessageBox(NULL, TEXT("No select items"), TEXT("Error: ID_BUTTON_READY"), MB_OK); return FALSE; } //TCHAR szBuff[256]; int len = SendMessage(hList, LB_GETTEXT, idx, (LPARAM)szBookName); if (len == LB_ERR) { MessageBox(NULL, TEXT("No a Item with so index."), TEXT("Error: ID_BUTTON_READY"), MB_OK); return FALSE; } szBookName[len] = '\0'; */ if (!SendMessage(GetParent(hDlg), PSM_APPLY, 0, 0L)) { //Так я пытаюсь завершить работу блокнота. SetWindowLongPtr(GetParent(hDlg), DWL_MSGRESULT, FALSE); return FALSE; } else { HWND hWnd = (HWND)SendMessage(GetParent(hDlg), PSM_GETCURRENTPAGEHWND, 0, 0L); //Но так я получаю индекс данной страницы, а не следующей. LRESULT idx = SendMessage(GetParent(hDlg), PSM_HWNDTOINDEX, (WPARAM)hWnd, 0L); //Переход на следующую страницу. SendMessage(GetParent(hDlg), PSM_SETCURSEL, idx, 0L); } return TRUE; } Нет, так не работает, хз... может быть стоит вызвать Код (Text): EndDialog() , но при создании блокнота эта функция должна отсутствовать на диалоговых страницах(окнах, панелях) так что не знаю куда её воткнуть. Так же, возможно, есть другие, более изящные способы решения данной проблемы.
Может быть кому-нибудь пригодиться, не могу сказать, что это единственно верное решение, но оно работает. Код (C++): case ID_BUTTON_READY: { int idx = SendMessage(hList, LB_GETCURSEL, 0, 0L); //TCHAR szBuff[256]; int len = SendMessage(hList, LB_GETTEXT, idx, (LPARAM)szBookPharagraph); szBookPharagraph[len] = '\0'; HWND hWnd = (HWND)SendMessage(GetParent(hDlg), PSM_GETCURRENTPAGEHWND, 0, 0L); idx = SendMessage(GetParent(hDlg), PSM_HWNDTOINDEX, (WPARAM)hWnd, 0L); BOOL fSt = SendMessage(GetParent(hDlg), PSM_SETCURSEL, idx + 1, 0L); if (!fSt) { SendMessage(GetParent(hDlg), PSM_PRESSBUTTON, PSBTN_CANCEL, (LPARAM)0L); return FALSE; } else { SetWindowLongPtr(GetParent(hDlg), DWLP_MSGRESULT, TRUE); } return TRUE; }