Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
60 / 60 / 19
Регистрация: 11.07.2013
Сообщений: 305
1

После создания диалога остальные окна неактивны

15.01.2017, 18:44. Показов 1036. Ответов 3
Метки нет (Все метки)

Всем привет

После того как создается диалог, все остальные окна отказываются работать и "отвечать" на какие-либо нажатия клавиш. Тот же MessageBox после нажатия на кнопку ( смотрим WndProc ) не закрывается.

Исходник:

Кликните здесь для просмотра всего текста
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
int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
    MSG msg;
    HWND hMainDialog = CreateDialog( hInstance, MAKEINTRESOURCE( IDD_DIALOG1 ), NULL, (DLGPROC) WndProc );
 
    ShowWindow( hMainDialog, SW_SHOW );
 
    AllocConsole();
    printf( "ThdID: %d\n", GetCurrentThreadId() );
 
    MessageBoxA( NULL, "AAA", "BBB", 0 );
 
    while( GetMessage( &msg, NULL, NULL, NULL ) )
    {
        TranslateMessage( &msg );
        DispatchMessage( &msg );
    }
 
    return 0;
}
 
LRESULT CALLBACK WndProc( HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam )
{
    switch( Message )
    {
        case WM_COMMAND:
            if( wParam == IDOK )
            {
                MessageBoxA( NULL, "Button pressed!", "caption", MB_OK | MB_ICONINFORMATION );
            }
            break;
        case WM_DESTROY:
            PostQuitMessage( 0 );
            break;
        default:
            return DefWindowProc( hWnd, Message, wParam, lParam );
            break;
    }
 
    return 0;
}

Файл ресурсов:

Кликните здесь для просмотра всего текста
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// Microsoft Visual C++ generated resource script.
//
#include "resource.h"
 
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
 
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
 
/////////////////////////////////////////////////////////////////////////////
// Russian (Russia) resources
 
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_RUS)
LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT
 
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
 
1 TEXTINCLUDE 
BEGIN
    "resource.h\0"
END
 
2 TEXTINCLUDE 
BEGIN
    "#include ""afxres.h""\r\n"
    "\0"
END
 
3 TEXTINCLUDE 
BEGIN
    "\r\n"
    "\0"
END
 
#endif    // APSTUDIO_INVOKED
 
 
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
 
IDD_DIALOG1 DIALOGEX 0, 0, 283, 165
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "DIALOG"
FONT 8, "MS Shell Dlg", 400, 0, 0x1
BEGIN
    DEFPUSHBUTTON   "OK",IDOK,59,128,50,14
    PUSHBUTTON      "Cancel",IDCANCEL,148,128,50,14
    LTEXT           "static",IDC_STATIC,43,23,126,61
END
 
 
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
 
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
BEGIN
    IDD_DIALOG1, DIALOG
    BEGIN
        LEFTMARGIN, 7
        RIGHTMARGIN, 276
        TOPMARGIN, 7
        BOTTOMMARGIN, 158
    END
END
#endif    // APSTUDIO_INVOKED
 
#endif    // Russian (Russia) resources
/////////////////////////////////////////////////////////////////////////////
 
 
 
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
 
 
/////////////////////////////////////////////////////////////////////////////
#endif    // not APSTUDIO_INVOKED


Добавлено через 6 минут
При чем для этого специально нашел уроки типа "вызывать новое окно по нажатию на кнопку", и нигде о такой проблеме не упоминается... Если же создаю еще один диалог, а не месседж бокс, то эффект такой, будто я просто не обрабатываю сообщения. Хотя я вроде через бряк на процедуре окна чекал - сообщения доходят, но окно (второе) все равно не реагирует.

Добавлено через 13 минут
Ы, походу не в том разделе создал. Перекиньте там в Visual, что ли...
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2017, 18:44
Ответы с готовыми решениями:

После создания диалога MessageBox-ы перестают закрываются
Создаю основное окно, не показываю его (без ShowWindow), инициализирую WinSock2, затем в WM_CREATE...

VC++ 6.0 (MFC) Dialog, : public CDialog - Как иниц-ть событие создания окна диалога?
Visual C++ 6.0 SP5 MFC - простой диало созданный встроенным мастером в общем мне нужно как...

DIR 320 - окна с настройками неактивны
Здравствуйте! Подскажите, что за фигня, в роутере DIR 320 практически все окна с настройками...

Как сделать при событии один пункт активным, а все остальные неактивны при условии что это общая функция
Вот к примеру: http://jsbin.com/uhiqap/1/edit на галерею когда клацаешь - чтоб была одна...

3
21 / 21 / 9
Регистрация: 09.10.2016
Сообщений: 113
15.01.2017, 18:57 2
при создании диалога, вместо HWND родителя передавать 0
C++
1
DialogBox(hInst, L"Dlg", NULL, Dlg);
0
60 / 60 / 19
Регистрация: 11.07.2013
Сообщений: 305
15.01.2017, 19:16  [ТС] 3
prokl9tiy, у меня и так передается NULL. Я ведь скинул код, там все видно.
0
1129 / 788 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
15.01.2017, 19:21 4
Лучший ответ Сообщение было отмечено uhx как решение

Решение

Цитата Сообщение от uhx Посмотреть сообщение
эффект такой, будто я просто не обрабатываю сообщения
uhx, см. документацию по DialogProc callback function
Although the dialog box procedure is similar to a window procedure, it must not call the DefWindowProc
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.01.2017, 19:21

Вызов функции после создания окна приложения
Здравствуйте, есть программа в которой создаються виджеты (QPlaintTextEdit), после их создания,...

Зависимость размера окна диалога от окна фрейма
Скажите, как на конкретном примере указать окну диалога, что оно должно быть в два раза меньше, чем...

Функция вызываемая после создания диалогового окна (MFC)
Добрый день Есть дилоговое приложение. Когда выполняются "долгие и тяжелые" операции, то форма...

Предотвращение создания окна после установки драйвера устройства
Вопрос такой: при автоматической установке драйверов некоторых устройств (это может быть и мышка,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru