Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GUI на чистом WinAPI, Элементы List View и Tab Control 
:(
    Опции темы
serg82
Дата 22.1.2010, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



День добрый!  Может кто сталкивался, никак не могу разобраться. Есть заполненный элемент List View (из библиотеки commctrl.h), нужно чтобы по щелчку мыши на его элементе открывалось диалоговое окно и в нем активировалась закладка Tab Control с именем элемента по которому щелкнули (в заголовке).., делал это так, в оконной процедуре окна (кот. содержит List View) пишу код :
Код
case WM_NOTIFY:
    {
          NMHDR *nmhdr=(NMHDR*)lParam;
      switch(nmhdr->code)   //Обработка сообщений от List View (контакт-листа)
            {
             case NM_DBLCLK:
         {
         //Инициализирую данные для формирования закладки Tab Control==============
         int indexList=ListView_GetNextItem(hwndList,-1, LVNI_SELECTED);
                  if(indexList == -1) return (INT_PTR)TRUE;
         LV_ITEM infoItemList;
            memset(&infoItemList, 0, sizeof(infoItemList)); //Обнуляю на всякий случай всю структуру
         infoItemList.iItem = indexList;
         infoItemList.mask = LVIF_TEXT;
         infoItemList.cchTextMax = 40;
                 infoItemList.iSubItem = 0;
                 ListView_GetItem(hwndList, &infoItemList); //Определяю какой элемент List View выделен
           TCITEM itemTab;
         itemTab.pszText=infoItemList.pszText;  
             //===========================================================================                    if(!hWndChat){  //Если окон чата не было создано ранее
             hWndChat=CreateDialog(hInst,MAKEINTRESOURCE(IDD_CHAT), hWndMain, WndChatProc);
                 if (!hWndChat) return (INT_PTR)TRUE;
             HWND hWndTab=GetDlgItem(hWndChat, IDC_TAB1); //Определяю хендл окна Таb
         TabCtrl_InsertItem(hWndTab, 0, &itemTab);  //Создаю закладку Tab-a
          }
     else{  //Если окно чата уже было создано ранее
           HWND hWndTab=GetDlgItem(hWndChat, IDC_TAB1); //Определяю хендл окна Таb
           int indexCurrentTab=TabCtrl_GetCurSel(hWndTab); //Определяю текущий выбор Tab
           TabCtrl_InsertItem(hWndTab, indexCurrentTab+1, &itemTab); //Создаю новую вкладку Tab
          }
          break;
     }
  }
 break;
}

закладка Tab Control создается но в заголовок не считывается текст по которому щелкнули в List View.. что я делаю не так?
PM MAIL   Вверх
mekhanikus
Дата 22.1.2010, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вольноопределяющийся
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 16.6.2008
Где: Спасск-Дальний

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



На TCITEM itemTab не жалуется? Замени на TC_ITEM.

Указатель itemTab.pszText надо инициализировать.
Например так:
Код

char szBuf[100] = {0};
itemTab.pszText = szBuf;

А затем сделать strspy(itemTab.pszText,infoItemList.pszText);

Это сообщение отредактировал(а) mekhanikus - 22.1.2010, 14:43
PM MAIL   Вверх
serg82
Дата 22.1.2010, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(mekhanikus @ 22.1.2010,  14:39)
На TCITEM itemTab не жалуется? Замени на TC_ITEM.

Указатель itemTab.pszText надо инициализировать.
Например так:
Код

char szBuf[100] = {0};
itemTab.pszText = szBuf;

А затем сделать strspy(itemTab.pszText,infoItemList.pszText);

На TCITEM не жалуется, впрочем как и на TC_ITEM )). Если делаю так: strspy(itemTab.pszText,infoItemList.pszText) то компилятор выдает предупреждение: warning C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details., если предупреждение игнорирую, линкую, то при запуске вываливается в отладку на функции strcat.asm. 
А если делаю вот так:  strcpy_s(itemTab.pszText, 40, infoItemList.pszText); (предварительно)то компилируется и линкуется все нормально, даже запускается программа, но когда щелкаю на любом элементе List View открывается окно ошибки,... написано Expression: (((_Src)))!=NULL и пишет.., типа читайте help
PM MAIL   Вверх
serg82
Дата 22.1.2010, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



mekhanikus спасибо! Разобрался, проинициализировал еще 
Код
szBuf[40]={0};
          infoItemList.pszText=szBuf;

и еще заполнил структуру TCITEM
Код

TCITEM itemTab;
 itemTab.cchTextMax=40;
 itemTab.mask=TCIF_TEXT;
itemTab.pszText=szBuf;
 strcpy_s(itemTab.pszText, 40*sizeof(char), infoItemList.pszText);

и все заработало!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

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


 




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


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

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