Перейти к содержанию

Рекомендуемые сообщения

Доброго времени суток, уважаемые форумчане! Уже второй день бьюсь головой с созданием формы на на С++ vs 2012, до этого момента писал исключительно консольные приложения, но в силу обстоятельств пришлось сделать оконное . И то ,что я увидел, что предлагают на с++ ,меня малость потрясло(на том же делфи такого гемороя не было) прошу направить в нужное русло. Возможно ли создать "строгую" форму, включая все ее элементы без всяких там графических наворочек, лишь бы она могла работать с winapi, при этом сделать это как-то автоматизировано? так как не люблю заниматься графикой, а по большей части смотрю в сторону основного функционала программы

Ссылка на комментарий
Поделиться на другие сайты

Написал бы короче. Нужен движок трейнера на С++ и все бы поняли

Я один раз такой выкладывал... Загадили... 

 

при этом сделать это как-то автоматизировано?

Что, друг мой, в твоём понимании автоматизация? Создать обычную форму на c++ на базе WInAPI - да вообще легко. Легче некуда. Сарказм, конечно же. У кодера есть видео, в котором он создает формочку на чистом WinAPI с кнопочкой, там коду на 100-120 строк. Найди это видео на его канале, посмотри и реши сам для себя: стоит ли делать что-либо с такой заморочкой.

P.s. я давно это самое видео не пересматривал и не помню что там и как, но помоему это должно быть не так трудно. Просто объединить все, что связано с конкретным ТЗ - под один грибок void функции. Чтобы потом в точке входа main можно было прописать, к примеру, "CreateForm();" и твоя форма автоматом создастся. Чем это удобно? Тем, что можно таким макаром сразу несколько форм описать и в определенном моменте подсовывать пользователю вторую форму. Это зависит от надобности, но мне было бы удобно. В общем, как говорят - кури мануалы :)

Изменено пользователем RockHamer
Ссылка на комментарий
Поделиться на другие сайты

Привет!

Если очень хочется именно C++ и именно WinAPI, то я рекомендую поискать какую-нибудь версию C++ Builder. Visual Studio на данный момент крайне сильно перегружена всякими макро-типами, которые (лично на мой взгляд) очень отпугивают новичков как от C++, так и от разработки под Windows в целом. Посмотрев на мрак, который предлагает шаблонный Win32-проект на C++, все строем идут в C# к его шикарному WPF. На самом деле все, что нужно:

 

0. Описать (заполнить структуру) класса окна. 90% полей - стандартные.

1. Зарегистрировать класс окна. Вызовом одной функции, да.

2. Создать окно. Ему задается размер, местоположение, оконная процедура. В принципе, все.

3. Войти в цикл обработки сообщений.

4. Уничтожить окно перед выходом.

 

Если делать это чисто на WinAPI и без заморочек от Microsoft, то получится реальных 5-10 строк кода.

Ссылка на комментарий
Поделиться на другие сайты

#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
Ссылка на комментарий
Поделиться на другие сайты

Всем спасибо за ответы, в частности 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;}
Изменено пользователем tirion
Ссылка на комментарий
Поделиться на другие сайты

В таком случае можно использовать Windows Forms - это что-то на уровне редактора форм в Cheat Engine, нужные контролы перетаскиваются на форму мышкой, а к ним пишутся лишь обработчики. Еще можно использовать, например, Qt, но это уже получается своеобразный overkill - такие широкие возможности вряд ли нужны для движка трейнера.
Ссылка на комментарий
Поделиться на другие сайты

Да два окна для трейнера можно накидать на чистом WinAPI. К тому же, даже контролы не придется на них раскладывать, если графическая часть движка трейнера предполагает какую-то анимацию, как у олдскульных команд.

Ссылка на комментарий
Поделиться на другие сайты

Да два окна для трейнера можно накидать на чистом WinAPI. К тому же, даже контролы не придется на них раскладывать, если графическая часть движка трейнера предполагает какую-то анимацию, как у олдскульных команд.

Анимация? Можно поподробней?

Ссылка на комментарий
Поделиться на другие сайты

Увы, статьи написаны далеко не все. Так что математика + терпение.

У меня, к примеру, есть код для градиента в D3D Хуке. Т.е. к примеру градиентная коробка или ограда или.. я не знаю текст. 

Хочу сделать такую же приблудину для обычной формочки на WinAPI

Ссылка на комментарий
Поделиться на другие сайты

Ищи и качай книгу "Фень Юань - Программирование графики для Windows (2002)" - это даст тебе нехилые познания в программировании графики под GDI. Дальше перейдешь на GDIPlus. Ну или можешь сразу начинать с OpenGL. Как хочешь.

Ссылка на комментарий
Поделиться на другие сайты

Ищи и качай книгу "Фень Юань - Программирование графики для Windows (2002)" - это даст тебе нехилые познания в программировании графики под GDI. Дальше перейдешь на GDIPlus. Ну или можешь сразу начинать с OpenGL. Как хочешь.

Надо бы название этой книги сохранить. Спасибо.

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.