tirion Опубликовано 3 марта, 2015 Поделиться Опубликовано 3 марта, 2015 Доброго времени суток, уважаемые форумчане! Уже второй день бьюсь головой с созданием формы на на С++ vs 2012, до этого момента писал исключительно консольные приложения, но в силу обстоятельств пришлось сделать оконное . И то ,что я увидел, что предлагают на с++ ,меня малость потрясло(на том же делфи такого гемороя не было) прошу направить в нужное русло. Возможно ли создать "строгую" форму, включая все ее элементы без всяких там графических наворочек, лишь бы она могла работать с winapi, при этом сделать это как-то автоматизировано? так как не люблю заниматься графикой, а по большей части смотрю в сторону основного функционала программы Ссылка на комментарий Поделиться на другие сайты Поделиться
MasterGH Опубликовано 3 марта, 2015 Поделиться Опубликовано 3 марта, 2015 Написал бы короче. Нужен движок трейнера на С++ и все бы поняли Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 3 марта, 2015 Поделиться Опубликовано 3 марта, 2015 Автоматизированно - нет. Это WinAPI, друг мой. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 3 марта, 2015 Поделиться Опубликовано 3 марта, 2015 (изменено) В 03.03.2015 в 02:49, MasterGH сказал: Написал бы короче. Нужен движок трейнера на С++ и все бы понялиЯ один раз такой выкладывал... Загадили... В 03.03.2015 в 01:44, tirion сказал: при этом сделать это как-то автоматизировано?Что, друг мой, в твоём понимании автоматизация? Создать обычную форму на c++ на базе WInAPI - да вообще легко. Легче некуда. Сарказм, конечно же. У кодера есть видео, в котором он создает формочку на чистом WinAPI с кнопочкой, там коду на 100-120 строк. Найди это видео на его канале, посмотри и реши сам для себя: стоит ли делать что-либо с такой заморочкой.P.s. я давно это самое видео не пересматривал и не помню что там и как, но помоему это должно быть не так трудно. Просто объединить все, что связано с конкретным ТЗ - под один грибок void функции. Чтобы потом в точке входа main можно было прописать, к примеру, "CreateForm();" и твоя форма автоматом создастся. Чем это удобно? Тем, что можно таким макаром сразу несколько форм описать и в определенном моменте подсовывать пользователю вторую форму. Это зависит от надобности, но мне было бы удобно. В общем, как говорят - кури мануалы Изменено 3 марта, 2015 пользователем RockHamer Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 3 марта, 2015 Поделиться Опубликовано 3 марта, 2015 Привет!Если очень хочется именно C++ и именно WinAPI, то я рекомендую поискать какую-нибудь версию C++ Builder. Visual Studio на данный момент крайне сильно перегружена всякими макро-типами, которые (лично на мой взгляд) очень отпугивают новичков как от C++, так и от разработки под Windows в целом. Посмотрев на мрак, который предлагает шаблонный Win32-проект на C++, все строем идут в C# к его шикарному WPF. На самом деле все, что нужно: 0. Описать (заполнить структуру) класса окна. 90% полей - стандартные.1. Зарегистрировать класс окна. Вызовом одной функции, да.2. Создать окно. Ему задается размер, местоположение, оконная процедура. В принципе, все.3. Войти в цикл обработки сообщений.4. Уничтожить окно перед выходом. Если делать это чисто на WinAPI и без заморочек от Microsoft, то получится реальных 5-10 строк кода. Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 3 марта, 2015 Поделиться Опубликовано 3 марта, 2015 Показать контент #include <Windows.h>LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){ switch (msg) { case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0;}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ WNDCLASSEX wc; HWND hwnd; MSG Msg; wc.cbSize = sizeof(WNDCLASSEX); wc.style = 0; wc.lpfnWndProc = WndProc; // WndProc - процедура обработки сообщений окна wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(0, IDI_APPLICATION); wc.hCursor = LoadCursor(0, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpszMenuName = 0; wc.lpszClassName = "myWindowClass"; wc.hIconSm = LoadIcon(0, IDI_APPLICATION); // Заполняем структуру класса окна RegisterClassEx(&wc); // Регистрируем окно // Создаем окно hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, "myWindowClass", "title", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, 0, 0, hInstance, 0); ShowWindow(hwnd, nCmdShow); // Показываем окно на экране UpdateWindow(hwnd); // Обновляем окно while (GetMessage(&Msg, 0, 0, 0) > 0) // Входим в цикл обработки сообщений { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam;} 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
tirion Опубликовано 3 марта, 2015 Автор Поделиться Опубликовано 3 марта, 2015 (изменено) Всем спасибо за ответы, в частности keng'у за подробное разъяснение. Дело в том, что как раз этого и хотелось бы избежать. В 03.03.2015 в 20:16, keng сказал: Показать контент Допустим я хочу написать трейнер, используя типы и функции из Windows.h. Могу ли я при этом воспользоваться каким-нибудь конструктором форм, а не писать форму вручную на чистом winapi? Потому что форму создать это одно, а если еще подсчитать сколько на ней будет компонентов и каждый компонент нужно так же в ручную реализовывать... Или же такую возможность предоставляет C++ Builder ?#include <Windows.h>LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam){ switch (msg) { case WM_CLOSE: DestroyWindow(hwnd); break; case WM_DESTROY: PostQuitMessage(0); break; default: return DefWindowProc(hwnd, msg, wParam, lParam); } return 0;}int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){ WNDCLASSEX wc; HWND hwnd; MSG Msg; wc.cbSize = sizeof(WNDCLASSEX); wc.style = 0; wc.lpfnWndProc = WndProc; // WndProc - процедура обработки сообщений окна wc.cbClsExtra = 0; wc.cbWndExtra = 0; wc.hInstance = hInstance; wc.hIcon = LoadIcon(0, IDI_APPLICATION); wc.hCursor = LoadCursor(0, IDC_ARROW); wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1); wc.lpszMenuName = 0; wc.lpszClassName = "myWindowClass"; wc.hIconSm = LoadIcon(0, IDI_APPLICATION); // Заполняем структуру класса окна RegisterClassEx(&wc); // Регистрируем окно // Создаем окно hwnd = CreateWindowEx(WS_EX_CLIENTEDGE, "myWindowClass", "title", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, 0, 0, hInstance, 0); ShowWindow(hwnd, nCmdShow); // Показываем окно на экране UpdateWindow(hwnd); // Обновляем окно while (GetMessage(&Msg, 0, 0, 0) > 0) // Входим в цикл обработки сообщений { TranslateMessage(&Msg); DispatchMessage(&Msg); } return Msg.wParam;} Изменено 3 марта, 2015 пользователем tirion Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 4 марта, 2015 Поделиться Опубликовано 4 марта, 2015 В таком случае можно использовать Windows Forms - это что-то на уровне редактора форм в Cheat Engine, нужные контролы перетаскиваются на форму мышкой, а к ним пишутся лишь обработчики. Еще можно использовать, например, Qt, но это уже получается своеобразный overkill - такие широкие возможности вряд ли нужны для движка трейнера. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 4 марта, 2015 Поделиться Опубликовано 4 марта, 2015 Да два окна для трейнера можно накидать на чистом WinAPI. К тому же, даже контролы не придется на них раскладывать, если графическая часть движка трейнера предполагает какую-то анимацию, как у олдскульных команд. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 4 марта, 2015 Поделиться Опубликовано 4 марта, 2015 В 04.03.2015 в 06:12, Xipho сказал: Да два окна для трейнера можно накидать на чистом WinAPI. К тому же, даже контролы не придется на них раскладывать, если графическая часть движка трейнера предполагает какую-то анимацию, как у олдскульных команд.Анимация? Можно поподробней? Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 4 марта, 2015 Поделиться Опубликовано 4 марта, 2015 А что тут подробнее? Анимация - изменение положения разных объектов на экране. Посмотри трейнеры от extalia, pizzadox, unleashed, mint Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 4 марта, 2015 Поделиться Опубликовано 4 марта, 2015 Вот, например. mint-area 51.rar Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 4 марта, 2015 Поделиться Опубликовано 4 марта, 2015 Я имел ввиду примеры статей, где упоминается изготовление такой приблудины... Ссылка на комментарий Поделиться на другие сайты Поделиться
keng Опубликовано 4 марта, 2015 Поделиться Опубликовано 4 марта, 2015 Увы, статьи написаны далеко не все. Так что математика + терпение. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 4 марта, 2015 Поделиться Опубликовано 4 марта, 2015 В 04.03.2015 в 16:10, keng сказал: Увы, статьи написаны далеко не все. Так что математика + терпение.У меня, к примеру, есть код для градиента в D3D Хуке. Т.е. к примеру градиентная коробка или ограда или.. я не знаю текст. Хочу сделать такую же приблудину для обычной формочки на WinAPI Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 4 марта, 2015 Поделиться Опубликовано 4 марта, 2015 Ищи и качай книгу "Фень Юань - Программирование графики для Windows (2002)" - это даст тебе нехилые познания в программировании графики под GDI. Дальше перейдешь на GDIPlus. Ну или можешь сразу начинать с OpenGL. Как хочешь. Ссылка на комментарий Поделиться на другие сайты Поделиться
RockHammer Опубликовано 4 марта, 2015 Поделиться Опубликовано 4 марта, 2015 В 04.03.2015 в 17:03, Xipho сказал: Ищи и качай книгу "Фень Юань - Программирование графики для Windows (2002)" - это даст тебе нехилые познания в программировании графики под GDI. Дальше перейдешь на GDIPlus. Ну или можешь сразу начинать с OpenGL. Как хочешь.Надо бы название этой книги сохранить. Спасибо. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения