Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
61 / 28 / 24
Регистрация: 28.09.2017
Сообщений: 399

Не открывается окно

05.12.2017, 20:42. Показов 2347. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! У меня возникла проблема при изучении WinAPI. Когда я переписал код из учебника и скомпилировал, то ошибок не было, но при этом не выходит окно, то есть ни консоли, ни окна Windows. Используемый код:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <Windows.h>
#include <tchar.h>
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
TCHAR WinName[] = _T("MainFrame");
 
int APIENTRY _tWinMain(HINSTANCE This, HINSTANCE Prev, LPTSTR cmd, int mode)
{
    HWND hWnd;
    MSG msg;
    WNDCLASS wc;
 
    wc.hInstance = This;
    wc.lpszClassName = WinName;
    wc.lpfnWndProc = WndProc;
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.lpszMenuName = NULL;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hbrBackground = (HBRUSH)(COLOR_WINDOW + 1);
 
    if (!RegisterClass(&wc))
        return 0;
    hWnd = CreateWindow(WinName, _T("Мое первое приложение Windows"),
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        CW_USEDEFAULT,
        HWND_DESKTOP, NULL, This, NULL);
 
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
    case WM_DESTROY: PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}
Компилирую в Visual Studio 2017
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
05.12.2017, 20:42
Ответы с готовыми решениями:

Не открывается окно!
Всем привет! Нашел код игры &quot;Пятнашки&quot;, решил запустить. Компилирую,все хорошо, но окно с игрой не появляется. Почему так?...

Окно не открывается на полный экран
Делаю FullScreen с помощью функции void FullScreen() { COORD coord; SetConsoleDisplayMode(GetStdHandle(STD_OUTPUT_HANDLE),...

Диалоговое окно открывается за главным
Как создать модальное диалоговое окно, чтобы оно отображалось перед главным окном? CDialog dlg(IDD_ABOUTBOX); // Создать объект...

8
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
05.12.2017, 21:07
во-первых, в WndProc return должен быть не 0, а DefWindowProc(hWnd, message, wParam, lParam)
во-вторых, не вижу функции ShowWindow
да и цикл обработки так себе... короче говнокод.

держите нормальное окно
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
27
28
29
30
31
32
33
34
#include <Windows.h>
 
LRESULT CALLBACK WindowProc(_In_ HWND hWnd, _In_ UINT uMsg, _In_ WPARAM wParam, _In_ LPARAM lParam) {
    switch (uMsg) {
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    }
    return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
 
int CALLBACK WinMain(_In_ HINSTANCE hInstance, _In_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow) {
    WNDCLASSEX wc = {};
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = CS_HREDRAW | CS_VREDRAW;
    wc.lpfnWndProc = WindowProc;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.lpszClassName = "WindowClass";
    RegisterClassEx(&wc);
    HWND hWnd = CreateWindow(wc.lpszClassName, "Test",
        WS_SYSMENU | WS_MINIMIZEBOX,
        (GetSystemMetrics(SM_CXSCREEN) - 1024) / 2,
        (GetSystemMetrics(SM_CYSCREEN) - 576) / 2,
        1024, 576, nullptr, nullptr, hInstance, 0);
    ShowWindow(hWnd, nCmdShow);
    MSG msg = {};
    while (msg.message != WM_QUIT)
        if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    return static_cast<char>(msg.wParam);
}
2
61 / 28 / 24
Регистрация: 28.09.2017
Сообщений: 399
05.12.2017, 21:09  [ТС]
Спасибо!
0
05.12.2017, 21:12

Не по теме:

Цитата Сообщение от pavel2210057 Посмотреть сообщение
переписал код из учебника
не нужно переписывать код из "учебника" для ВСЕГО есть msdn
к примеру, нужен прототип WinMain - вбейте в гугле и сразу в первую ссылку на msdn
https://msdn.microsoft.com/ru-... s.85).aspx

нужен CALLBACK WindowProc, пожалуйста
https://msdn.microsoft.com/ru-... s.85).aspx

надеюсь мысль ясна.

0
61 / 28 / 24
Регистрация: 28.09.2017
Сообщений: 399
05.12.2017, 21:14  [ТС]
На одних запросах API не выучишь.

Добавлено через 1 минуту
Нужно понимание, а на msdn не очень то и разъясняется на самом деле.
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
05.12.2017, 21:18
там и учить то особо нечего.
да и само понятие что-то учить абсурдно, всё знать не возможно.
для этого и делают такие вещи как msdn - нужно мне что-то, нашёл, посмотрел, взял себе в код. Собственно так и работают многие программисты.
а забивать голову функциями, прототипами, кодом, структурами и прочей ерундой совершенно нет никакой необходимости.

Добавлено через 1 минуту
Цитата Сообщение от pavel2210057 Посмотреть сообщение
Нужно понимание
понимание это база - типы, циклы, условия, английский язык. Всё остальное строится вокруг этого.
0
61 / 28 / 24
Регистрация: 28.09.2017
Сообщений: 399
05.12.2017, 21:19  [ТС]
Я и не собираюсь, вот выучу основное, что каждый уважающий себя программист должен на автомате писать, а дальше уже практика.
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
05.12.2017, 23:58
Цитата Сообщение от pavel2210057 Посмотреть сообщение
не выходит окно, то есть ни консоли, ни окна Windows.
pavel2210057, на ошибках учатся. Благодаря этому случаю, хорошо запомните, что после CreateWindow еще надо ShowWindow. В Вашем коде не хватает двух строк
C++
1
2
3
// после строки  hWnd = CreateWindow( ... )
    ShowWindow(hWnd,mode);
    UpdateWindow(hWnd);
Добавлено через 1 час 22 минуты
Цитата Сообщение от _lunar_ Посмотреть сообщение
во-первых, в WndProc return должен быть не 0, а DefWindowProc(hWnd, message, wParam, lParam)
Неверно, _lunar_. Вы сами-то msdn читаете?
Notice that each case returns a specific value for each message. For messages that it does not process, the window procedure calls the DefWindowProc function.
Цитата Сообщение от _lunar_ Посмотреть сообщение
да и цикл обработки так себе
Здесь все правильно. Можно только добавить условие "больше нуля"
C++
1
2
3
4
5
    while (GetMessage(&msg, NULL, 0, 0)> 0 )
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
1
61 / 28 / 24
Регистрация: 28.09.2017
Сообщений: 399
06.12.2017, 05:43  [ТС]
А ты прав, добавил эти две строки в код и все замечательно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.12.2017, 05:43
Помогаю со студенческими работами здесь

Окно программы не открывается C++ Builder 6
при запуске запуск идет а окно программы не появляется, что я делаю не так ? что выложить для анализа ?

Диалоговое окно открывается пустым
Доброго времени суток! Не могу реализовать небольшой участок кода: BOOL CALLBACK LoaderDlg(HWND hLoaderDlg, UINT LoaderMsg, WPARAM...

Не открывается диалоговое окно QPrintDialog
Доброго дня всем! Очень нужна помощь, помогите, пожалуйста. Проблема такая: в режиме отладки в VS окошко открывается, всё отлично....

При загрузке Windows открывается окно cmd и открывается сайт в браузере
Добрый вечер. У меня такая проблема. При включении компьютера открывается пустая командная строка, в названии которой есть...

При загрузке Windows открывается окно cmd и открывается сайт в браузере
Здравствуйте! Помогите, пожалуйста! При загрузке компьютера открывается окно cmd и загружается сайт в хроме При этом не открывается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Функция установки текстового статуса в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru