Форум программистов, компьютерный форум CyberForum.ru

Даблклик - C++

Восстановить пароль Регистрация
 
ronny137
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 61
02.07.2012, 15:39     Даблклик #1
не могу разобраться с функцией. понял, что вмнотифай уведомляет своим сообщением родительское окно, а что означает следущая строчка, так и не понял. с даблкликом тоже не очень, понял что там прописаны действия на левый клик, как поня, где 1 написана, поднимает наверх по уровню, 2 клик на файл, а 3 на папку, а каким образом он все это проделывает не смог разобраться, больше ничего не понимаю, что означают другие строчки.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
case WM_NOTIFY:
{
    switch ((LPNMHDR) lParam) -> code)
    {
    case NM_DBLCLK:
        if ((LPNMDR) lParam) -> idFrom == ID_TREE)
        {
                POINT.cp;
                GetCursosPos (&cp);
                ScreenToclient ( (LPNMDR) lParam)->hwndFrom, &cp);
                TVITEM curTreeItem;
                curTreeItem = TakeTreeItem (cp);
                TrIt tmp;
                 memcpy (&curTreeItem.lParam,sizeof (curTreeItem.lParam));
                if (tmp.level ==1)
                    return 1;
                if (tmp.atr ==2) {
                   TCHAR path [MAX_PATH];
                   memset (path,0,sizeof (path));
                   MakeFilePath (path, GB.FirstDrct, (TCHAR *) curTreeItem.pszText);
                   setTextToEdit (path);
                    return 1;
}
if (tmp.atr ==3) {
                   MakePathEnd_Cut (GB.FirstDrct, GB.FirstDrct); 
                   MakeMyTree (GB.hWndLeftTree, GB.FirstDrct);
                   return 1;
}
if (tmp.atr ==1) {
                  MakePath (GB.FirstDrct, GB.FirstDrct,curTreeItem.pszText); 
                   MakeMyTree (GB.hWndLeftTree, GB.FirstDrct);
                   return 1;
                         }
                    }
               break;
                 }
          int i=0;
           }
        break;
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
02.07.2012, 15:58     Даблклик #2
WM_NOTIFY посылают элементы управления общего пользования,в данном случае дерево просмотра( TVITEM curTreeItem; curTreeItem = TakeTreeItem (cp);-отсюда это становится понятно)
C++
1
2
3
4
5
6
switch ((LPNMHDR) lParam) -> code)//получаем код уведомления
 
   if ((LPNMDR) lParam) -> idFrom == ID_TREE)//проверяем от кого сообщение
 
  MakeFilePath (path, GB.FirstDrct, (TCHAR *) curTreeItem.pszText);//как я понимаю устанавливаем или получаем путь для make файла,
//так как по этой функции не нашёл объяснения
и можно конкретнее что непонятно?
ronny137
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 61
02.07.2012, 19:18  [ТС]     Даблклик #3
непонятно, что делает каждая строчка.
Код
if ((LPNMDR) lParam) -> idFrom == ID_TREE)
        {
                POINT.cp;
                GetCursosPos (&cp);
                ScreenToclient ( (LPNMDR) lParam)->hwndFrom, &cp);
                TVITEM curTreeItem;
                curTreeItem = TakeTreeItem (cp);
                TrIt tmp;
                 memcpy (&curTreeItem.lParam,sizeof (curTreeItem.lParam));
                if (tmp.level ==1)
                    return 1;
как я понял, что этот кусок определяет координаты курсора.
а что везде возвращается?
cppGhost
32 / 30 / 1
Регистрация: 21.06.2012
Сообщений: 91
02.07.2012, 19:40     Даблклик #4
Тут вообще не очень ясно. Скорее всего ошибка. Вот тут объявление:
C++
1
TrIt tmp;
а потом сразу сравнивается
C++
1
if (tmp.level ==1)
скорее всего вот тут
C++
1
 memcpy (&curTreeItem.lParam,sizeof (curTreeItem.lParam));
предполагалось копирование в этот самый tmp

а вообще смотрится куда кликнули два раза, и в зависимости от этого возвращается некое значение, которые скорее всего обрабатывается функцией, которая была раньше =))
ronny137
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 61
02.07.2012, 20:01  [ТС]     Даблклик #5
не знаю. вроде ошибок не должно быть.
а можешь закомментить каждую строчку?
cppGhost
32 / 30 / 1
Регистрация: 21.06.2012
Сообщений: 91
02.07.2012, 20:10     Даблклик #6
так как всего кода, то я могу конечно и ошибаться. по поводу комментов
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// объявляем переменную типа POINT
POINT.cp;
// получаем координаты курсора мыши
GetCursosPos (&cp);
// переводим из глобальных координат в клиентские
ScreenToclient ( (LPNMDR) lParam)->hwndFrom, &cp);
// объявляем переменную типа TVITEM
TVITEM curTreeItem;
// по координатам точки cp определяем по какому элементу был сделан даблклик
curTreeItem = TakeTreeItem (cp);
// объявляем переменную типа TrIt
TrIt tmp;
// тут все-таки неправильно. хотя бы по тому, что memcpy принимает три параметра
// может думалось так "memcpy (&tmp.lParam, curTreeItem.lParam, sizeof (curTreeItem.lParam));"
// то есть копируем из curTreeItem в tmp
memcpy (&curTreeItem.lParam,sizeof (curTreeItem.lParam));
// сравниваем, возвращаем
if (tmp.level ==1)
    return 1;
ronny137
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 61
02.07.2012, 20:54  [ТС]     Даблклик #7
а с чем сравнивается?
alexey31415
 Аватар для alexey31415
59 / 59 / 3
Регистрация: 16.05.2010
Сообщений: 632
02.07.2012, 20:57     Даблклик #8
C++
1
tmp.level
tmp - это видимо объект какого-то класса,в котором определена переменная level,с ней и сравниваем
или ещё вариант,это может быть укзаатель на структуру TrIt,в которой определена переменная level
cppGhost
32 / 30 / 1
Регистрация: 21.06.2012
Сообщений: 91
02.07.2012, 20:59     Даблклик #9
ну сложно сказать, что такое
C++
1
tmp.level
может это уровень вложенности объекта, может это уровень важности объекта, а может это вообще никак не связано с именем переменной. есть только кусочек кода без комментов
ronny137
0 / 0 / 0
Регистрация: 24.01.2010
Сообщений: 61
02.07.2012, 21:08  [ТС]     Даблклик #10
может быть это на каком уровне в дереве находиться обьект?
Yandex
Объявления
02.07.2012, 21:08     Даблклик
Ответ Создать тему
Опции темы

Текущее время: 10:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru