Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2013, 18:39   #21
x_Alex_x
Пользователь
 
Регистрация: 13.01.2013
Сообщений: 94
По умолчанию

Слишком это для меня непонятно(
Вот я объявил структуру для хранения номера окна, расположения файла, и текста из файла.
Код:
struct Struct    // объявление структуры
{
    int nOkna;
	LPSTR FileAdres;
    LPSTR Stroka;
};
Далее есть два способа создания окна: при открытии файла и при создании пустого документа. После каждого из них я создаю структуру:
Код:
hChild = (HWND)SendMessage(g_hMDIClient, WM_MDICREATE, 0, (LONG)&mcs);//создание дочернего окна в клиенте
               if(!hChild)
               {
                  MessageBox(hwnd, "MDI Child creation failed.", "Oh Oh...",
                     MB_ICONEXCLAMATION | MB_OK);
			   }else{
					Struct Struct1;
	       }
Как мне теперь привязать это к созданному окну? (Мне по идее нужно использовать SetWindowLongPtr так как система х64) но какие у ней должны быть параметры кроме GWLP_USERDATA понять не могу.
x_Alex_x вне форума Ответить с цитированием
Старый 28.03.2013, 20:13   #22
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Сделайте проще:
Глобальный массив из структур документа. Тем самым будет лимит на количество открытых документов но думаю это можно пережить. Далее, одно из полей структуры - HWND окна. Когда нужно найти структуру, просматривайте весь масив, пока не найдете нужное окно. Будет легче использовать HWND окна, чем номер.
waleri вне форума Ответить с цитированием
Старый 28.03.2013, 21:39   #23
x_Alex_x
Пользователь
 
Регистрация: 13.01.2013
Сообщений: 94
По умолчанию

Я уж было начал делать, но ведь столько мороки будет по сортировке массива структур плюс поиск структуры при каждом обращении к документу.. Прошлый способ мне больше нравится.
Объясните пожалуйста как при создании структуры нового окна сделать её индивидуальной, ведь она постоянно создаётся как Struct1 и в итоге у меня есть только одна эта структура, сколько бы окон я не создавал. И как в моём случае использовать SetWindowLongPtr?
переменную int nOkna я заменил на HWND Handle, но нужна ли она вообще?
x_Alex_x вне форума Ответить с цитированием
Старый 28.03.2013, 23:25   #24
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

struct mystruct* ptr = malloc(sizeof(mystruct));
SetWindowLongPtr(hWnd, GWLP_USERDATA, LPARAM(ptr));
waleri вне форума Ответить с цитированием
Старый 02.04.2013, 11:23   #25
x_Alex_x
Пользователь
 
Регистрация: 13.01.2013
Сообщений: 94
По умолчанию

Хоть это и не относится к апи, думаю, не стоит создавать новую тему.

Вот то немногое, что появилось в коде:

Код:
struct Mystruct    // объявление структуры
{
    HWND Handle;
    LPSTR FileAdress;
    LPSTR Stroka;
};
.......
hChild = (HWND)SendMessage(g_hMDIClient, WM_MDICREATE, 0, (LONG)&mcs);//создание дочернего окна в клиенте
if(!hChild){
     ...
}else{
    Mystruct mystruct;			
    struct Mystruct* ptr = malloc(sizeof(mystruct));
    SetWindowLongPtr(hChild, GWLP_USERDATA, LPARAM(ptr));
}
На предпоследнюю строчку ругается: a value of type "void *" cannot be used to initialize an entity of type "mystruct *". Я так и не смог понять что она должна делать.
В последней строчке, как я понял, нужно ставить hChild так как mystruct принадлежит текущему дочернему окну.
Пожалуйста, объясните подробно как нужно делать и что делает код из Вашего примера.

Последний раз редактировалось x_Alex_x; 02.04.2013 в 11:29.
x_Alex_x вне форума Ответить с цитированием
Старый 02.04.2013, 13:50   #26
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Может у вас расширение файла cpp?
Измените на .с
waleri вне форума Ответить с цитированием
Старый 02.04.2013, 15:28   #27
x_Alex_x
Пользователь
 
Регистрация: 13.01.2013
Сообщений: 94
По умолчанию

Изменение ни на что не повлияло.
объясните плз что к чему
Mystruct* ptr может правельнее Mystruct *ptr или неважно?
x_Alex_x вне форума Ответить с цитированием
Старый 02.04.2013, 15:29   #28
x_Alex_x
Пользователь
 
Регистрация: 13.01.2013
Сообщений: 94
По умолчанию

Изменение ни на что не повлияло.
объясните плз что к чему
Mystruct* ptr может правельнее Mystruct *ptr или неважно?
x_Alex_x вне форума Ответить с цитированием
Старый 02.04.2013, 17:52   #29
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

struct Mystruct* ptr = (struct Mystruct*) malloc(sizeof(mystruct));

Кстати, зачем нужна переменная mystruct?
sizeof() может работать с типом переменной.
сравните:
int var;
sizeof(var);
sizeof(int);
waleri вне форума Ответить с цитированием
Старый 02.04.2013, 21:42   #30
x_Alex_x
Пользователь
 
Регистрация: 13.01.2013
Сообщений: 94
По умолчанию

Цитата:
зачем нужна переменная mystruct?
Я просто переписал Ваш пример к себе в прогу.
Может нужно так: malloc(sizeof(Mystruct))

struct Mystruct {}- так ведь объявляется структура, а так Mystruct mystruct1 она создаётся?
Получается я при создании окна hChild объявляю структуру Mystruct. только зачем? Ведь здесь нужно её создавать, делать на неё указатель и присоединять её к созданному hChild.

struct Mystruct* ptr = (struct Mystruct*) malloc(sizeof(mystruct));
Можно расшифровку по-русски?
x_Alex_x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
WinApi и С/С++ разные вещи Sylar9 Общие вопросы C/C++ 2 27.03.2012 23:41
завернуть флеш в учу оболочку gufon Общие вопросы Delphi 3 20.07.2011 07:13
учу borland С++ builder 6 Dazzl C++ Builder 3 13.05.2011 18:01
Учу Си++ под Linux, необходима помощь prog16 Свободное общение 12 09.08.2009 15:15
Разные вопросы о Delphi Enko Помощь студентам 21 10.09.2007 05:54