Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Кто нибудь создавал PropertySheets, с помощью фуекций WinAPI? 
:(
    Опции темы
Royan
  Дата 30.4.2004, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Я пытался найти хоть один вразумительный пример о том, как создать PropertySheet или на худой конец TAB, с помощью WinAPI, а не MFC, и что называется drew a blank (ничего не нашел smile.gif ).
Отчаявшись я что-то выковырил из MSDN'а и получилось что:

Если я создаю PropertySheet как у них в примере и всаживаю в него ресурс диалогового окна, то у отображается только один PropertySheet, остальных нет. Этот один, тот на который установлен фокус + любое движение окшка и все содержание ресурса (то есть входящие в диалоговое окно edit box'ы, lable'ы и т.д.) исчезают

Если я создаю TAB(а создаю я его динамически), то все рисуется слава Богу нормально, но вот как к табу привязать хоть какой-то ресурс я не знаю. Доки об этом молчат.

Козможно кто-то развлекался на эту тему и имеет примерчик или знает ресурс какой-нибудь.......



--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
CBETA
Дата 1.5.2004, 02:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 10.4.2004

Репутация: 1
Всего: 1



Я когда-то работала с PropertySheets.
Правда делала Wizard.
Все работало нормально.

Повозись с параметрами - там их много.
Так трудно сазать.

PM MAIL   Вверх
CBETA
Дата 1.5.2004, 03:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 10.4.2004

Репутация: 1
Всего: 1



Да, если хочешь поищу, где-то валяется
но это Wizard!
PM MAIL   Вверх
Leopard25
Дата 1.5.2004, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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 параметры можно и не передавать
//// мне они были просто нужны
--------------------
Обдумай, верно ли и возможно ли то, что ты обещаешь, ибо обещание - есть долг. ( Конфуций )
PM MAIL ICQ   Вверх
Royan
Дата 2.5.2004, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Спасибо за идею, однако у меня возникли такие проблемы:

1) Я не понял каким образом в TAB должно внедрится содержание диалогового окна, ведь lParam нужен для того чтобы хранить какую-то свою инфу, а раз так то почему винда должна думать, что те байты которые я присвою этому параметру обязательно должны быть диалоговым окном (в msdn'е про lParam сказано так: Application-defined data associated with the tab control item... )

2) Покуда я не могу пользоваться классами MFC (а ведь CDialog именнно таковым и является) то я придумал следующий вариант, который работает не так как надо, и видимо из-за проблемы описанной в п. 1 далее привожу исходный код.
Код
 TCITEM tTab; //Structure for tab


   HWND hTab = CreateWindow(WC_TABCONTROL, (LPCWSTR)"", WS_CHILD | WS_CLIPSIBLINGS | WS_VISIBLE , 0, 0,
   rc.right, rc.bottom, this->hWnd, NULL, this->hInst, NULL);

 
 
 //Create tabs    
 tTab.mask = TCIF_TEXT;
 tTab.pszText = TEXT("General");
 

 //Insert General tab to TAB control
 TabCtrl_InsertItem(hTab, 0, &tTab);

 //Create dialog window
 HWND hDlg = CreateDialog( hInst, MAKEINTRESOURCE(IDD_GENERAL), hTab, GeneralDlgProc );
 
 tTab.mask =TCIF_PARAM;
   
 tTab.lParam = (LPARAM)hDlg;

 TabCtrl_InsertItem(hTab, 0, &tTab);
 
 SetWindowPos(hDlg, HWND_TOP, 10, 30, 0, 0, SWP_NOSIZE | SWP_NOZORDER);
 ShowWindow(hDlg, SW_SHOW);



В результате появляется окошко (мое) в котором содержаться табы, и совершенно отдельно диалоговое окно... Или может я опять чего-то не догоняю?


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
CBETA
Дата 3.5.2004, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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 (как просилиsmile.gif)

PM MAIL   Вверх
Royan
Дата 7.5.2004, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Dreamer
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 14.9.2002
Где: Лондон

Репутация: нет
Всего: 15



Светлана огромное спасибо, как только закончу с текущим проектом, не премину сообщить что получилось!


--------------------
Открыта вакансия Junior Java Developer'а в нашем лондонском офисе, подробнее можно узнать здесь
PM MAIL MSN   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0609 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.