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

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

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

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

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

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

Здравствуйте! Нужна помощь в написании (изменении готовой) программы. WinApi я практически не знаю, поэтому большинство вопросов здесь будут элементарными, тем не менее, куда лучше, чтобы тебе кто-то объяснил решение, чем тратить время на поиск ответа самому.

Итак, первый вопрос:
Имеется дочернее окно с эдит-полем, растянутым на всё это окно. Пробую установить размеры окна вручную, но ничего не выходит(
Код:
hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "",
            WS_CHILD | WS_VISIBLE | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE | ES_WANTRETURN,
            CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
            hwnd, (HMENU)IDC_CHILD_EDIT, g_hInst, NULL);
x_Alex_x вне форума Ответить с цитированием
Старый 25.03.2013, 21:48   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Так, начнем издалека - какие по вашему должны быть размеры в данном случае?
waleri вне форума Ответить с цитированием
Старый 25.03.2013, 22:05   #3
x_Alex_x
Пользователь
 
Регистрация: 13.01.2013
Сообщений: 94
По умолчанию

Абсолютно любые, разумеется, в пределах самого дочернего окна. Мне не понятно почему не меняется размер области, когда меняю CW_USEDEFAULT на число.
x_Alex_x вне форума Ответить с цитированием
Старый 25.03.2013, 22:22   #4
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

http://vsokovikov.narod.ru/New_MSDN_...movewindow.htm
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 25.03.2013, 22:33   #5
x_Alex_x
Пользователь
 
Регистрация: 13.01.2013
Сообщений: 94
По умолчанию

Это я уже пробовал(
Код:
MoveWindow(hEdit, 12, 23, 34, 45, true);
Хотя оно работает, если менять размеры окна hwnd.
x_Alex_x вне форума Ответить с цитированием
Старый 26.03.2013, 11:42   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от x_Alex_x Посмотреть сообщение
Абсолютно любые, разумеется, в пределах самого дочернего окна. Мне не понятно почему не меняется размер области, когда меняю CW_USEDEFAULT на число.
А число берете откуда?
waleri вне форума Ответить с цитированием
Старый 26.03.2013, 14:05   #7
x_Alex_x
Пользователь
 
Регистрация: 13.01.2013
Сообщений: 94
По умолчанию

Ну сам придумываю 100/200...
x_Alex_x вне форума Ответить с цитированием
Старый 26.03.2013, 14:20   #8
x_Alex_x
Пользователь
 
Регистрация: 13.01.2013
Сообщений: 94
По умолчанию

Вот ещё вопрос:
Как содержимое файла загрузить в переменную дочернего окна?
То есть при открытии файла кнопкой в главном окне создаётся дочернее, в котором вызывается функция загрузки файла, записывающая содержимое открываемого файла в переменную (массив/строку), принадлежащую этому дочернему окну.

Есть пример записи в текстовое поле дочернего окна, а как такое проделать со строкой?
Код:
BOOL LoadFile(HWND hEdit, LPSTR pszFileName){//функция загрузки файла
   HANDLE hFile;
   BOOL bSuccess = FALSE;

   hFile = CreateFile(pszFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
   if(hFile != INVALID_HANDLE_VALUE){//если файл существует
      DWORD dwFileSize;
      dwFileSize = GetFileSize(hFile, NULL);//получить размер файла
      if(dwFileSize != 0xFFFFFFFF){
         LPSTR pszFileText;
         pszFileText = (LPSTR)GlobalAlloc(GPTR, dwFileSize + 1);//зарезервировать память
         if(pszFileText != NULL){//если память зарезервирована
            DWORD dwRead;
            if(ReadFile(hFile, pszFileText, dwFileSize, &dwRead, NULL)){//прочитать из файла в pszFileText
               pszFileText[dwFileSize] = 0; // добавить символ конца строки
               if(SetWindowText(hEdit, pszFileText))
                  bSuccess = TRUE; // Операция успешна
            }
            GlobalFree(pszFileText);//освободить память
         }
      }
      CloseHandle(hFile);//закрыть файл
   }
   return bSuccess;
}
x_Alex_x вне форума Ответить с цитированием
Старый 26.03.2013, 14:40   #9
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от x_Alex_x Посмотреть сообщение
Ну сам придумываю 100/200...
Если я правильно вас понял, вы вызываете CreateWindowEx с определенными размерами окна и ничего не получается?
waleri вне форума Ответить с цитированием
Старый 26.03.2013, 17:53   #10
x_Alex_x
Пользователь
 
Регистрация: 13.01.2013
Сообщений: 94
По умолчанию

Цитата:
Если я правильно вас понял..
Точно так! К тому же не помогает и функция MoveWindow.
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