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

С базовым курсом разобрался, переходим на оконные приложения. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ самое длинное слово http://www.cyberforum.ru/cpp-beginners/thread161226.html
#include <iostream> using namespace std; int main() { char line; int cur = 0, max = 0, index = 0, i; cin >> line; for(i = 0;; i++) { if(line == ' ' || line == '\0')
C++ PPL Сегодня наткнулся на такую тему, как парраллельные вычисления в VS2010. Для примера: #include <ppl.h> int main() { int nsum = 0; Concurrency::parallel_for(1, 100001, (int n){nsum +=... http://www.cyberforum.ru/cpp-beginners/thread161199.html
C++ Размер матрицы
Люди, помогите пожалуйста! У меня есть задание: создать библиотеку функций для работы с матрицами. Можно ли сделать ,так что в параметрах функций были только матрицы , а размеры их программа...
Перегрузка бинарных операций C++
Привет! Начал изучать перегрузку операций. В отступление хочется сказать, что это очень увлекательно и интересно. Но в моей книге, есть один момент, который я не понял. Вернее понял, но не до конца....
C++ Имитация нажатия клавиш С/С++ http://www.cyberforum.ru/cpp-beginners/thread161154.html
Задача такая: Программа должна имитировать нажатие клавиш в фоновом режиме. То-есть она должна нажимать заранее заданные кнопки(кнопку), с определенной периодичностью. Что-то вроде бота. Каким...
C++ Алгоритм Кнута-Морриса-Пратта здравствуйте. можете объяснить по примеру алгоритм кнута-морриса-пратта подробнее

Показать сообщение отдельно
Andrew_Lvov
Эксперт С++
259 / 189 / 5
Регистрация: 19.08.2010
Сообщений: 760
Записей в блоге: 1
25.08.2010, 17:48
Цитата Сообщение от CronoS0 Посмотреть сообщение
Пол года долбал базовый курс (все о консоли) и считаю что пора перейти на уровень выше.
Нашел на майкрософте маленький гайд по созданию оконных приложений. Ниже будет оконное приложение представлено в том гайде которое выводит "Hello world!".
Очень прошу помочь разобраться что к чему.
В дальнейшем развитии темы выйдет не плохой учебник...
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
// GT_HelloWorldWin32.cpp
// compile with: /D_UNICODE /DUNICODE /DWIN32 /D_WINDOWS /c
 
#include <windows.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
 
// Global variables
 
// The main window class name.
static TCHAR szWindowClass[] = _T("win32app");
 
// The string that appears in the application's title bar.
static TCHAR szTitle[] = _T("Win32 Guided Tour Application");
 
HINSTANCE hInst;
 
// Forward declarations of functions included in this code module:
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int WINAPI WinMain(HINSTANCE hInstance,
                   HINSTANCE hPrevInstance,
                   LPSTR lpCmdLine,
                   int nCmdShow)
{
    WNDCLASSEX wcex;
Главная функция. Выполнение кода по большому счёту начинается с него.

C++
1
2
3
4
5
6
7
8
9
10
11
12
    wcex.cbSize = sizeof(WNDCLASSEX);
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
    wcex.lpszMenuName   = NULL;
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
Параметры окна. Обычная иконка, обычный курсор и т.д.

C++
1
2
3
4
5
6
7
8
9
    if (!RegisterClassEx(&wcex))
    {
        MessageBox(NULL,
            _T("Call to RegisterClassEx failed!"),
            _T("Win32 Guided Tour"),
            NULL);
 
        return 1;
    }
Здесь мы просим зарегестрировать класс окна. Само окно создаётся позже.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    hInst = hInstance; // Store instance handle in our global variable
 
    // The parameters to CreateWindow explained:
    // szWindowClass: the name of the application
    // szTitle: the text that appears in the title bar
    // WS_OVERLAPPEDWINDOW: the type of window to create
    // CW_USEDEFAULT, CW_USEDEFAULT: initial position (x, y)
    // 500, 100: initial size (width, length)
    // NULL: the parent of this window
    // NULL: this application dows not have a menu bar
    // hInstance: the first parameter from WinMain
    // NULL: not used in this application
    HWND hWnd = CreateWindow(
        szWindowClass,
        szTitle,
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT,
        500, 100,
        NULL,
        NULL,
        hInstance,
        NULL
    );
Вот собственно и создание самого окна. Аргументы ф-ции - размеры и т.п.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    if (!hWnd)
    {
        MessageBox(NULL,
            _T("Call to CreateWindow failed!"),
            _T("Win32 Guided Tour"),
            NULL);
 
        return 1;
    }
 
    // The parameters to ShowWindow explained:
    // hWnd: the value returned from CreateWindow
    // nCmdShow: the fourth parameter from WinMain
    ShowWindow(hWnd,
        nCmdShow);
По-умолчанию, окно не видно. ШоуВиндоу - давайка мы его покажем.

C++
1
    UpdateWindow(hWnd);
Перерисовка окна.

C++
1
2
3
4
5
6
7
    // Main message loop:
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
Одна из важных концепцый окон. Без цикла сверху окно - это просто разрисованный квадрат на экране. В этом цикле окно ожидает событий от системы (и небезосновательно, скажу я вам!).
Например, нажатие мышки, события клавиатуры, закрытие, разворачивание и т.д. приходят как некие msg - они записываются в очередь окна и там себе скромно ожидают своей участи.
GetMessage вытягивает первое сообщение и обрабатывает его.
DispatchMessage, если не знает, чё с ним делать, вызывает главную функцию окна - по сути, почти всегда он именно это и делает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    return (int) msg.wParam;
}
 
//
//  FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  PURPOSE:  Processes messages for the main window.
//
//  WM_PAINT    - Paint the main window
//  WM_DESTROY  - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    PAINTSTRUCT ps;
    HDC hdc;
    TCHAR greeting[] = _T("Hello, World!");
Главная процедура окна. В ней происходят все судьбоносные решения для окна. Казнить/Помиловать - всё здесь. Когда вы закрываете окно Ворда, а оно противится, мол документ не сохранён - это постарались в WndProc. Заметьте, кстати, что указатель на фукнцию передаётся в структуре среди параметров перед созданием самого окна.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    switch (message)
    {
    case WM_PAINT:
        hdc = BeginPaint(hWnd, &ps);
 
        // Here your application is laid out.
        // For this introduction, we just print out "Hello, World!"
        // in the top left corner.
        TextOut(hdc,
            5, 5,
            greeting, _tcslen(greeting));
        // End application-specific layout section.
 
        EndPaint(hWnd, &ps);
        break;
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
В большинстве случаев мы решаем не вставлять палки в колёса жизненного цикла окна и отдаёмся в руки функции DefWindowProc - она то решает, что делать неистовым пользователем, кликающим по окну, сворачивающим и разворачивающим его и т.д.

C++
1
2
3
4
5
        break;
    }
 
    return 0;
}
Вот что нужно сделать:
1. Для начала сделать обычный текстовый редактор без каких либо опций и кнопок (Версия 1.0).
2. Затем вписать внутрь пару кнопок для сохранения и чтения текста по адресу (Версия 1.1).
3. И в дальнейшем придумывать и добавлять всевозможные опции типа цвета текста и т.д. (Версия 1.х++)

Вопросов будет много, если можно, отвечайте по максимуму.
Дальше думай сам, задавай вопросы. Не стесняйся пользоваться гуглом. Будет время - ответим.
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru