![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Я пытался найти хоть один вразумительный пример о том, как создать PropertySheet или на худой конец TAB, с помощью WinAPI, а не MFC, и что называется drew a blank (ничего не нашел
Отчаявшись я что-то выковырил из MSDN'а и получилось что: Если я создаю PropertySheet как у них в примере и всаживаю в него ресурс диалогового окна, то у отображается только один PropertySheet, остальных нет. Этот один, тот на который установлен фокус + любое движение окшка и все содержание ресурса (то есть входящие в диалоговое окно edit box'ы, lable'ы и т.д.) исчезают Если я создаю TAB(а создаю я его динамически), то все рисуется слава Богу нормально, но вот как к табу привязать хоть какой-то ресурс я не знаю. Доки об этом молчат. Козможно кто-то развлекался на эту тему и имеет примерчик или знает ресурс какой-нибудь....... -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| CBETA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.4.2004 Репутация: 1 Всего: 1 |
Я когда-то работала с PropertySheets.
Правда делала Wizard. Все работало нормально. Повозись с параметрами - там их много. Так трудно сазать. |
|||
|
||||
| CBETA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.4.2004 Репутация: 1 Всего: 1 |
Да, если хочешь поищу, где-то валяется
но это Wizard! |
|||
|
||||
| Leopard25 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 157 Регистрация: 17.4.2004 Репутация: нет Всего: нет |
// создание названий закладок TC_ITEM TabItem; TabItem.mask = TCIF_TEXT; TabItem.pszText = "Выбор темы"; m_TabCtrl.InsertItem( 0, &TabItem ); TabItem.pszText = "Редактирование тем"; m_TabCtrl.InsertItem( 1, &TabItem ); TabItem.pszText = "Вопросы"; m_TabCtrl.InsertItem( 2, &TabItem ); TabItem.pszText = "Редактирование вопросов"; m_TabCtrl.InsertItem( 3, &TabItem ); // создание закладки выбора темы m_pPageTopic = new CPageTopic(this,GetDocument());; TabItem.mask = TCIF_PARAM; TabItem.lParam = (LPARAM)m_pPageTopic; m_TabCtrl.SetItem(0, &TabItem); VERIFY(m_pPageTopic->Create(CPageTopic::IDD, &m_TabCtrl)); m_pPageTopic->SetWindowPos(NULL, 10, 30, 0, 0, SWP_NOSIZE | SWP_NOZORDER); m_pPageTopic->ShowWindow(SW_SHOW); // создание закладки создания темы m_pPageCreateTopic = new CPageCreateTopic(this,GetDocument()); TabItem.mask = TCIF_PARAM; TabItem.lParam = (LPARAM)m_pPageCreateTopic; m_TabCtrl.SetItem(1, &TabItem); VERIFY(m_pPageCreateTopic->Create(CPageCreateTopic::IDD, &m_TabCtrl)); m_pPageCreateTopic->SetWindowPos(NULL, 10, 30, 0, 0, SWP_NOSIZE | SWP_NOZORDER); m_pPageCreateTopic->ShowWindow(SW_HIDE); // создание закладки ответов на вопросы m_pPageQuestion = new CPageQuestion(this,GetDocument()); TabItem.mask = TCIF_PARAM; TabItem.lParam = (LPARAM)m_pPageQuestion; m_TabCtrl.SetItem(2, &TabItem); VERIFY(m_pPageQuestion->Create(CPageQuestion::IDD, &m_TabCtrl)); m_pPageQuestion->SetWindowPos(NULL, 10, 30, 0, 0, SWP_NOSIZE | SWP_NOZORDER); m_pPageQuestion->ShowWindow(SW_HIDE); // создание закладки создания вопросов m_pPageCreateQuestion = new CPageCreateQuestion(this,GetDocument()); TabItem.mask = TCIF_PARAM; TabItem.lParam = (LPARAM)m_pPageCreateQuestion; m_TabCtrl.SetItem(3, &TabItem); VERIFY(m_pPageCreateQuestion->Create(CPageCreateQuestion::IDD, &m_TabCtrl)); m_pPageCreateQuestion->SetWindowPos(NULL, 10, 30, 0, 0, SWP_NOSIZE | SWP_NOZORDER); m_pPageCreateQuestion->ShowWindow(SW_HIDE); //// class CPageTopic : public CDialog //// при создании CPageTopic параметры можно и не передавать //// мне они были просто нужны --------------------
Обдумай, верно ли и возможно ли то, что ты обещаешь, ибо обещание - есть долг. ( Конфуций ) |
|||
|
||||
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Спасибо за идею, однако у меня возникли такие проблемы:
1) Я не понял каким образом в TAB должно внедрится содержание диалогового окна, ведь lParam нужен для того чтобы хранить какую-то свою инфу, а раз так то почему винда должна думать, что те байты которые я присвою этому параметру обязательно должны быть диалоговым окном (в msdn'е про lParam сказано так: Application-defined data associated with the tab control item... ) 2) Покуда я не могу пользоваться классами MFC (а ведь CDialog именнно таковым и является) то я придумал следующий вариант, который работает не так как надо, и видимо из-за проблемы описанной в п. 1 далее привожу исходный код.
В результате появляется окошко (мое) в котором содержаться табы, и совершенно отдельно диалоговое окно... Или может я опять чего-то не догоняю? -------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
| CBETA |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 20 Регистрация: 10.4.2004 Репутация: 1 Всего: 1 |
Royan
Никаких CreateWindow вызывать не нужно. Просто заполняешь структуру, и все. Все остальное PropertySheet сделает сам. Вот отрывок из моего Wizarda, для обычного PropertySheet заменить psh.dwFlags's и все. --------------------------------cut from here---------- INT WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR lpszCmdLine, INT nCmdShow ) { hInst = hInstance; InitCommonControls(); PROPSHEETPAGE psp = {0}; //defines the property sheet pages HPROPSHEETPAGE ahpsp[NN_PAGES] = {0}; //an array to hold the page's HPROPSHEETPAGE handles PROPSHEETHEADER psh = {0}; //defines the property sheet SHAREDWIZDATA wizdata = {0}; //the shared data structure // //Create the Wizard pages // //Opening page psp.dwSize = sizeof(psp); psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER; psp.hInstance = hInstance; psp.lParam = (LPARAM) &wizdata; //The shared data structure psp.pfnDlgProc = IntroDlgProc; psp.pszTemplate = MAKEINTRESOURCE(IDD_INTRO); ahpsp[0] = CreatePropertySheetPage(&psp); //First interior page psp.dwFlags = PSP_DEFAULT|PSP_USEHEADERTITLE|PSP_USEHEADERSUBTITLE; psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_TITLE1); psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_SUBTITLE1); psp.pszTemplate = MAKEINTRESOURCE(IDD_INTERIOR1); psp.pfnDlgProc = IntPage1DlgProc; ahpsp[1] = CreatePropertySheetPage(&psp); //Second interior page psp.dwFlags = PSP_DEFAULT | PSP_USEHEADERTITLE|PSP_USEHEADERSUBTITLE; psp.pszHeaderTitle = MAKEINTRESOURCE(IDS_TITLE2); psp.pszHeaderSubTitle = MAKEINTRESOURCE(IDS_SUBTITLE2); psp.pszTemplate = MAKEINTRESOURCE(IDD_INTERIOR2); psp.pfnDlgProc = IntPage2DlgProc; ahpsp[2] = CreatePropertySheetPage(&psp); //Final page psp.dwFlags = PSP_DEFAULT|PSP_HIDEHEADER; psp.pszTemplate = MAKEINTRESOURCE(IDD_END); psp.pfnDlgProc = EndDlgProc; ahpsp[3] = CreatePropertySheetPage(&psp); //Create the property sheet psh.dwSize = sizeof(psh); psh.hInstance = hInstance; psh.hwndParent = NULL; psh.phpage = ahpsp; psh.dwFlags = PSH_WIZARD97 | PSH_WATERMARK | PSH_HEADER; psh.pszbmWatermark = MAKEINTRESOURCE(IDB_WATERMARK); psh.pszbmHeader = MAKEINTRESOURCE(IDB_BANNER); psh.nStartPage = 0; psh.nPages = NN_PAGES; // psh.pszIcon = (LPCTSTR)IDI_ICON1; //Set up the font for the titles on the intro and ending pages NONCLIENTMETRICS ncm = {0}; ncm.cbSize = sizeof(ncm); SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0); //Create the intro/end title font LOGFONT TitleLogFont = ncm.lfMessageFont; TitleLogFont.lfWeight = FW_BOLD; lstrcpy(TitleLogFont.lfFaceName, TEXT("Arial")); TitleLogFont.lfCharSet = DEFAULT_CHARSET; HDC hdc = GetDC(NULL); //gets the screen DC INT FontSize = 16; TitleLogFont.lfHeight = 0 - GetDeviceCaps(hdc, LOGPIXELSY) * FontSize / 72; wizdata.hTitleFont = CreateFontIndirect(&TitleLogFont); ReleaseDC(NULL, hdc); //Display the wizard int res = PropertySheet(&psh); // Destroy the fonts DeleteObject(wizdata.hTitleFont); return 0; } Добавлено @ 02:51 Чистый API (как просили |
|||
|
||||
| Royan |
|
|||
|
Dreamer ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1708 Регистрация: 14.9.2002 Где: Лондон Репутация: нет Всего: 15 |
Светлана огромное спасибо, как только закончу с текущим проектом, не премину сообщить что получилось!
-------------------- Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |