Если через WinAPI создавать набор вкладок (TabCtrl), то с использованием сообщений TCM_INSERTITEM и подобными разрешается использовать не только структуру TC_ITEM, но и любую структуру, у которой первым полем является структура типа TCITEMHEADER, а хвост у неё может быть сколь угодно длинным. Внимание, вопрос: как операционная система (GDI) определяет размер этого "хвоста"? Может, я слепой и не увидел поле, куда нужно вписать sizeof(моя_структура)?
Здравствуйте, Northsoft, Вы писали:
N>Если через WinAPI создавать набор вкладок (TabCtrl), то с использованием сообщений TCM_INSERTITEM и подобными разрешается использовать не только структуру TC_ITEM, но и любую структуру, у которой первым полем является структура типа TCITEMHEADER, а хвост у неё может быть сколь угодно длинным. Внимание, вопрос: как операционная система (GDI) определяет размер этого "хвоста"? Может, я слепой и не увидел поле, куда нужно вписать sizeof(моя_структура)?
TCITEM Structure
lParam
Application-defined data associated with the tab control item. If more or less than 4 bytes of application-defined data exist per tab, an application must define a structure and use it instead of the TCITEM structure. The first member of the application-defined structure must be a TCITEMHEADER structure.
Так что GDI не будет определять размер этого поля и вообще им интересоваться. Это Application-defined data, вот ты ими сам и занимайся.
Здравствуйте, Northsoft, Вы писали:
N>Если через WinAPI создавать набор вкладок (TabCtrl), то с использованием сообщений TCM_INSERTITEM и подобными разрешается использовать не только структуру TC_ITEM, но и любую структуру, у которой первым полем является структура типа TCITEMHEADER, а хвост у неё может быть сколь угодно длинным. Внимание, вопрос: как операционная система (GDI) определяет размер этого "хвоста"? Может, я слепой и не увидел поле, куда нужно вписать sizeof(моя_структура)?
ОСи этого не нужно. Вы ведь передаёте указатель, и ОС достаточно знать, что по этому адресу сначала лежит TCITEM, а что там за ней, ОС уже не интересно, она обращается только к первым sizeof(TCITEM) байтам. В принципе, это стандартный спочоб "расширить" структуру в подобных случаях.
Здравствуйте, Pavel Dvorkin, Вы писали: PD>TCITEM Structure PD>lParam PD>Application-defined data associated with the tab control item. If more or less than 4 bytes of application-defined data exist per tab, an application must define a structure and use it instead of the TCITEM structure. The first member of the application-defined structure must be a TCITEMHEADER structure. PD>Так что GDI не будет определять размер этого поля и вообще им интересоваться. Это Application-defined data, вот ты ими сам и занимайся.
То есть и запоминать эти данные операционка не будет? Как тогда производится хранение и предоставление доступа к этим Application-defined данным?
Здравствуйте, Jolly Roger, Вы писали: JR>ОСи этого не нужно. Вы ведь передаёте указатель, и ОС достаточно знать, что по этому адресу сначала лежит TCITEM, а что там за ней, ОС уже не интересно, она обращается только к первым sizeof(TCITEM) байтам. В принципе, это стандартный спочоб "расширить" структуру в подобных случаях.
Как я понял, ОС обязана по TCM_GETITEM вернуть структуру, которая была передана в TCM_SETITEM/TCM_INSERTITEM, причём не в размере sizeof(TCITEMHEADER), а полностью. И мне интересно, как она это делает.