Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > GUI на чистом WinAPI


Автор: serg82 22.1.2010, 14:06
День добрый!  Может кто сталкивался, никак не могу разобраться. Есть заполненный элемент 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.. что я делаю не так?

Автор: mekhanikus 22.1.2010, 14:39
На TCITEM itemTab не жалуется? Замени на TC_ITEM.

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

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

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

Автор: serg82 22.1.2010, 15:59
Цитата(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

Автор: serg82 22.1.2010, 16:26
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);

и все заработало!!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)