Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 17.01.2010
Сообщений: 4

Почему DialogBox возвращает (-1) ?

17.01.2010, 19:21. Показов 3630. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет! Начал писать программу на Visual C++ (Microsoft Visual Studio 6.0) и сразу же столкнулся с проблемой. Вроде всё примитивно и просто, а диалоговое окно почему-то не создаётся. DialogBox возвращает -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
24
25
26
#include <windows.h>
#include <stdio.h>
#include "resource.h"
 
 
 
BOOL CALLBACK DlgProc (HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch (uMsg)
    {
    case WM_INITDIALOG:
        return FALSE;
    }
 
    return FALSE;
}
 
 
 
int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance,
                    LPSTR lpCmdLine, int nShowCmd )
{
    DialogBox (hInstance, MAKEINTRESOURCE (IDD_DIALOG1),
                        NULL, DlgProc);
    return 0;
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.01.2010, 19:21
Ответы с готовыми решениями:

Как добавить ActiveX на DialogBox
Приветсвую! Есть диалоговое окно, созданное MSDN 2012 Visual C++ с помощью resource.rc Так как программа без использования MFC,...

Почему ExecuteScalar возвращает 0?
Не пойму, почему запрос возвращает 0. Кто сталкивался с таким? SqlCommand getID = new SqlCommand(&quot;Select from Auto where ='&quot; +...

Почему переменная возвращает None?
Приветствую, форумчане Подскажите, почему в данном коде div выводит None, а не верстку import urllib.request from bs4 import...

13
Эксперт С++
1675 / 1047 / 174
Регистрация: 27.09.2009
Сообщений: 1,945
17.01.2010, 19:51
Вероятно, причина в том, что ты написал return FALSE; в обработчике WM_INITDIALOG. Из описания этого сообщения в MSDN:
An application can return FALSE only if it has set the keyboard focus to one of the controls of the dialog box.
Попробуй написать там return TRUE;
0
0 / 0 / 0
Регистрация: 17.01.2010
Сообщений: 4
17.01.2010, 23:33  [ТС]
Нет, дело не в этом. Я пробовал и так, и так.

Добавлено через 2 часа 13 минут
Кстати, вот ссылка на весь проект (потому как код вроде бы правильный): Optima.rar (файл Optima.rar)

Добавлено через 55 минут
GetLastError() выдаёт код ошибки 1812 (Наполеон вспоминается =) ).
Я посмотрел в MSDN, этот код трактуется так: ERROR_RESOURCE_DATA_NOT_FOUND, The specified image file did not contain a resource section. Какие-то проблемы с ресурсом? Не понимаю, какие.

Добавлено через 22 секунды
Мда, мне тут объяснили всё, и я понял, что кретин =) Забыл добавить .rc-файл и resource.h в состав проекта. Всегда удивлялся: почему они автоматически не добавляются? =)
0
1 / 1 / 0
Регистрация: 14.03.2011
Сообщений: 13
14.03.2011, 09:27
Подниму тему.
Работал на MVS6 и MVS2003 проблем не знал. Решил попробовать MVS2008. Делаю простенький проект под Win32 API. Создаю стандартный диалог и запускаю его в WinMain - всё работает, но стоит добавить в диалог ListBox, то всё - не запускается, хотя, при компиляции ошибок не даёт. DialogBox возвращает -1, GetLastError - ноль.
Куда копать?
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
14.03.2011, 15:03
Karloson2, что-то вразумительное пока сказать не представляется возможным. Копай в сторону ListBox или выложи код, проверим на 2008.
0
1 / 1 / 0
Регистрация: 14.03.2011
Сообщений: 13
14.03.2011, 15:45
Там, вроде, всё просто:
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
#include "stdafx.h"
#include "Test_ListBox.h"
 
LRESULT CALLBACK    DlgProc(HWND, UINT, WPARAM, LPARAM);
 
int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE, LPTSTR, int){
    DWORD dwTemp;
 
    dwTemp = DialogBox(hInstance, MAKEINTRESOURCE(IDD_DLG), NULL, (DLGPROC)DlgProc);
    dwTemp = GetLastError();
    return (int) 0;
}
 
LRESULT CALLBACK DlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
 
    switch (message)
    {
    case WM_INITDIALOG:
        break;
    case WM_COMMAND:
        if(wParam == IDCANCEL)
            EndDialog(hWnd, 0x0);
            break;
        break;
    default:
        return FALSE;
    }
    return TRUE;
}
Добавляю в диалог List Contol и перестаёт работать.
ЗЫ: приклеил проект.
Вложения
Тип файла: 7z Test_ListBox.7z (3.7 Кб, 22 просмотров)
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
14.03.2011, 17:04
))) Так она у тебя и не будет работать. Вернее она работает, но только закрывается лишь начавшись.
WinMain .../не важно что/... return (int) 0; А где обработка сообщений?
C++
1
2
3
4
{
    TranslateMessage(&msg);
    DispatchMessage(&msg);
}
0
1 / 1 / 0
Регистрация: 14.03.2011
Сообщений: 13
15.03.2011, 08:17
Всё там правильно. Убери из диалога List Contol и сообщения будут обрабатываться в DlgProc, пока не будет вызвана EndDialog() и управление не вернется в tWinMain().

Нашёл в чем ошибка: пренебрёг ф-цией InitCommonControls(). Раньше обходился без неё, скармливая линкиру Comctl32.lib и прокатывало, теперь нет.
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
15.03.2011, 14:46
Karloson2, два раза ))). Добавь вместо List Contol Radio Button и попытайся сделать ее отметку... Куда от нее пойдет отосланное сообщение?
Я понял к чему ты клонишь. При таком подходе вся последующая обработка сообщений должна производиться в самом DlgProc.
0
1 / 1 / 0
Регистрация: 14.03.2011
Сообщений: 13
15.03.2011, 14:54
Цитата Сообщение от Digit@ll Посмотреть сообщение
.. При таком подходе вся последующая обработка сообщений должна производиться в самом DlgProc.
Вот именно. Вся прога и есть диалог. Винмайн нужна только для загрузки диалога.
Уходим от темы)
0
375 / 322 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
16.03.2011, 18:09
Digit@ll
Суть в том, что если создается dialog based приложение при помощи макроса DialogBox (функции DialogBoxParam), то создается модальный диалог. При этом, в самом простом случае, WinMain приостанавливается вплоть до закрытия диалога. А система забирает управление очередью сообщений приложения, запускает отдельный цикл сообщений и отправляет сообщения, предназначенные этому диалогу, непосредственно в его DialogProc. Поэтому while (GetMessage...) {...DispatchMessage...} в данном случае не нужен. Но это было бы не так, если бы создавался немодальный диалог (CreateDialog).

Цитата Сообщение от Karloson2 Посмотреть сообщение
C++
1
EndDialog(hWnd, 0x0);
При неуспешном выполнении DialogBoxParam возвращает 0 или -1, при успешном значение второго параметра из EndDialog. Так что в общем случае лучше так EndDialog(hWnd, 1).
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
16.03.2011, 19:57
bigredcat, та все это понятно. TranslateMessage(&msg); это вообще, для обработки сообщений с клавиатуры. Пример был дан в общих чертах ), не вдаваясь особо в подробности, но цель работы приложения была в итоге разобрана.
0
1 / 1 / 0
Регистрация: 14.03.2011
Сообщений: 13
18.04.2011, 15:54
Проблема была в отсутствие явной загрузки DLLки ф-цей InitCommonControlsEx
C++
1
2
3
4
5
   INITCOMMONCONTROLSEX icex;
    // Ensure that the common control DLL is loaded. 
    icex.dwSize = sizeof(INITCOMMONCONTROLSEX);
    icex.dwICC  = ICC_LISTVIEW_CLASSES;
    InitCommonControlsEx(&icex); // To ensure that common controls DLL loads
0
Brainsbreaker
 Аватар для Digit@ll
899 / 374 / 54
Регистрация: 01.02.2011
Сообщений: 1,608
19.04.2011, 08:21
Да, покатило. ИМХО: бред какой-то, все в целом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.04.2011, 08:21
Помогаю со студенческими работами здесь

Почему GetDateFormatEx возвращает 0?
Помогите, нужно написать функцию, которая выводит значение текущей даты. файл .cpp BOOL WINAPI DllMain(HINSTANCE hlnstDLL, DWORD...

Почему код не возвращает 8?
Дан массив целых чисел. Создайте Java-метод, который возвращает true в случае, если сумма всех элементов массива со значением 2 равна 8. ...

Почему возвращает нули?
Собственно вопрос в следующем: почему возвращает нули? int nums = new int; for (int i = 0; i &lt; nums.length; i++) { nums =...

Почему операция ~0>>1 возвращает значение -1?
ПОчему операция ~0&gt;&gt;1 возвращает значение -1, не зависимо от того, что стоит после &quot;&gt;&gt;&quot; ведь после ~0 у нас в битовом...

Почему функция возвращает undefined
Может кто подсказать, а то думалка уже болит. Наверняка ошибка очевидна, просто у меня не особо практики еще и не пойму в чем проблема.. ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru