Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197

CreateWindow проблема с созданием окна

06.03.2014, 11:12. Показов 2860. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, есть у меня две програмки.
Такая
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
#include <Windows.h>
const wchar_t * ClassName = L"Window1";
const wchar_t * WindowName = L"Window1";
LRESULT CALLBACK WndProc1(HWND hwnd, UINT Comand, WPARAM Wparam, LPARAM Lparam);
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE phInst, LPSTR lpszCmdLine, int nCmdShow)
{
    WNDCLASSEX Window1 =
    {
        sizeof(WNDCLASSEX),
        CS_HREDRAW | CS_VREDRAW,
        WndProc1,
        0,
        0,
        hInst,
        LoadIcon(hInst,MAKEINTRESOURCE(IDI_APPLICATION)),
        LoadCursor(NULL, IDC_ARROW),
        (HBRUSH)(COLOR_WINDOW+1),
        NULL,
        ClassName,
        LoadIcon(Window1.hInstance, MAKEINTRESOURCE(IDI_APPLICATION))
        
    };
    if (!RegisterClassEx(&Window1))
    {
        return 1;
    }
    HWND hwnd = CreateWindow(ClassName, WindowName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 500, NULL,NULL, hInst, NULL);
    if (!hwnd)
    {
        return 2;
    }
    ShowWindow(hwnd, SW_NORMAL);
    UpdateWindow(hwnd);
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0)!=0 )
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return msg.wParam;
}
И такая
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
#include <Windows.h>
const wchar_t *g_MainWindowName = L"Tab";
const wchar_t *g_MainWindowClass = L"TabMainWindow";
const wchar_t *g_ButtonName = L"Start";
const wchar_t *g_TextName = L"Result";
LRESULT CALLBACK WndProc(HWND hwnd, UINT Comand, WPARAM wParam, LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE phInst, LPSTR lpszCmdLine, int nCmdShow)
{
    WNDCLASSEX TabMainWindow =
    {
        sizeof(WNDCLASSEX),
        CS_VREDRAW | CS_HREDRAW,
        WndProc,
        NULL,
        NULL,
        hInst,
        LoadIcon(TabMainWindow.hInstance, IDI_APPLICATION),
        LoadCursor(TabMainWindow.hInstance, IDC_ARROW),
        (HBRUSH)(COLOR_WINDOW),
        NULL,
        g_MainWindowClass,
        LoadIcon(TabMainWindow.hInstance, MAKEINTRESOURCE(IDI_APPLICATION))
    };
    if (!RegisterClassEx(&TabMainWindow))
    {
        return 1;
    }
    HWND hwnd = CreateWindow(g_MainWindowClass, g_MainWindowClass, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 500, NULL, NULL, hInst, NULL);
    if (!hwnd)
    {
        return 2;
    }
    ShowWindow(hwnd, SW_NORMAL);
    UpdateWindow(hwnd);
    MSG msg;
    while (!GetMessage(&msg, hwnd, NULL, NULL))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    return 0;
}
Первая вполне себе замечательно работает, а вот вторая возвращает 2. Т.е. проблема в
C++
1
HWND hwnd = CreateWindow(g_MainWindowClass, g_MainWindowClass, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 500, NULL, NULL, hInst, NULL);
Объясните, пожалуйста, что я делаю не так и как это надо делать? И вообще почему две одинаковых программы выдают разный результат?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.03.2014, 11:12
Ответы с готовыми решениями:

Проблема c созданием окна
При нажатии на одну из кнопок должно создаваться ещё одно окно, но ничего не происходит. Не могу найти, в чём проблема. Вот мой код: ...

Как изменить параметры окна, которые указываются в CreateWindow?
как изменить параметры окна которые указываются в CreateWindow? я так понимаю нужно юзать sendmesage но безпонятя где почитать о том что...

Проблема с созданием окна GLFW
Товарищи, объясните проблему, вот исходник из учебника на habr.com: // hellow.cpp : Defines the entry point for the console...

15
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
06.03.2014, 12:37
MAKEINTRESOURCE лишний в LoadIcon. Почему во втором примере while НЕ GetMessage?
А вообще так всё нормально. Наверное, WndProc с WM_CREATE возвращает не 0.
0
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
06.03.2014, 15:31  [ТС]
Somebody, WM_CREATE в WndProc вообще не описан ни в одной. Для него DefWindowProc() используется. Непонятно почему CreateWindow() возвращает 0.

Не по теме:

Требуется психиатр для работы с С++...



Добавлено через 12 минут
В смысле в первой программе CreateWindow возвращает окно, а во второй возвращает 0. И вот в этом и вся беда(
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
06.03.2014, 16:09
Во второй окно тоже создается, но сразу же закрывается. Проблема в цикле 36 строки.
0
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
06.03.2014, 17:18  [ТС]
Digit@ll, да у меня уже и цикл поправлен на вот такой, а все равно тоже самое творится.
C++
1
2
3
4
5
while (GetMessage(&msg, NULL, NULL, NULL)!=0)
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
0
208 / 45 / 13
Регистрация: 06.09.2010
Сообщений: 99
06.03.2014, 18:03
Цитата:To get extended error information, call GetLastError...
0
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
06.03.2014, 18:41  [ТС]
mms_ua, а как этим пользоваться?(ну правда не понимаю)
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
06.03.2014, 20:26
Окна без файла ресурсов
так проще, имхо.. ну или сравнивайте с эталоном - ново созданным (Win32)проэктом.
0
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
06.03.2014, 20:55  [ТС]
Кто идиот, я или Майкрософт? После полного копирования кода первой программы(вместе с WndProc()) в новый проект в Visual Studio он перестал работать и стал так же возвращать двойку. Это как так? Visual Studio использовалась та же самая разумеется.

Добавлено через 24 минуты
Так может кто объяснить, что тут неправильно и почему это возвращает 0?
C++
1
HWND hwnd = CreateWindow(g_MainWindowClass, g_MainWindowClass, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 500, 500, NULL, NULL, hInst, NULL);
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
06.03.2014, 21:01
Можно только предположить, что новый проект не юникодовый. Хотя в таком случае должны быть ошибки преобразований типов указателей при компиляции.

Добавлено через 21 секунду
В любом случае GetLastError FTW.
0
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
06.03.2014, 21:04  [ТС]
Somebody, ну вот еще бы кто пояснил, как и куда этот GetLastError вставить, потому что по WINAPI у меня ток один учебничек и в нем про это нихрена нет.
0
 Аватар для Izual
143 / 122 / 21
Регистрация: 13.11.2012
Сообщений: 1,564
07.03.2014, 00:48
Angeline, у вас есть целый интернет и куча поисковых систем в браузере. Вам нужно научиться искать информацию, особенно если уж специализированную, то по названиям функций...
Как раз эту тему обсуждаем в соседнем топике, о том что новички не умеют искать инфу и не знают сайта MSDN... =)
0
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
07.03.2014, 15:08  [ТС]
Izual, к сожалению MSDN сообщает только то, что такое эта функция, а вот как ее в выводимый какой-то вид преобразовать у меня идей что-то нет.
Ну а искать действительно не особо так получается.
0
208 / 45 / 13
Регистрация: 06.09.2010
Сообщений: 99
07.03.2014, 20:07
Функция GetLastError вставляется туда, где Вы хотите получить развернутую информацию о ПОСЛЕДНЕЙ ошибке. В Вашем случае - между 30 и 31 строкой. Вышеуказанная функция возвращает код ошибки, который Вы ищите, ну скажем, здесь:http://msdn.microsoft.com/en-u... s.85).aspx и здесь же находим описание, что этот код обозначает. Все просто...
0
37 / 31 / 4
Регистрация: 21.10.2013
Сообщений: 197
10.03.2014, 15:21  [ТС]
mms_ua, а все-таки почему CreateWindow, которая правильно работает(GetLastError()==0) возвращает ноль?
0
2838 / 1647 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
10.03.2014, 19:04
Цитата Сообщение от Angeline Посмотреть сообщение
а все-таки почему CreateWindow, которая правильно работает(GetLastError()==0) возвращает ноль?
http://msdn.microsoft.com/en-u... 79360.aspx
The Return Value section of the documentation for each function that sets the last-error code notes the conditions under which the function sets the last-error code. Most functions that set the thread's last-error code set it when they fail. However, some functions also set the last-error code when they succeed. If the function is not documented to set the last-error code, the value returned by this function is simply the most recent last-error code to have been set; some functions set the last-error code to 0 on success and others do not.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.03.2014, 19:04
Помогаю со студенческими работами здесь

Ошибка при создании окна в ф-ции CreateWindow
Почему-то не хочет создавать окно. Подскажите,где ошибка #include&lt;Windows.h&gt; #include&lt;gl\glut.h&gt; using namespace std; static...

Проблема с созданием цикла
Всем доброго времени суток. Прошу помощи у форумчан по следующему вопросу. Есть входные параметры и заданные формулы. Проблема в...

Проблема с созданием экземпляра БД
Стоит Oracle 7.3 и windows XP имеется в наличии 1) холодный бекап базы 2) init.ora 3) create.sql-сценарий 4)...

Проблема с созданием запроса
Здравствуйте! Имеется база данных, в таблице есть значения марка материала и гост, подскажите, как сделать такой запрос(?), ...

Проблема с созданием классов
Проблема с создованием классов в IDE такая: Создал классы в visual добавить-&gt;класс Все отлично работает, но мне не нужны...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru