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

Диалоговые окна. - C++

Восстановить пароль Регистрация
 
AnnG
Сообщений: n/a
15.06.2011, 19:47     Диалоговые окна. #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
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include <windows.h>
#include "resource.h"
 
const char szClassName[]="WinLabClass\0";
 
HINSTANCE hInstance=0;
HWND hDlg=(HWND)-1;
 
INT_PTR CALLBACK ModalProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK ModeLessProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
    HWND hWnd=0;
    WNDCLASSA WndClass;
    MSG Msg;
 
    WndClass.lpszClassName=szClassName; 
    WndClass.hInstance=hInstance;
    WndClass.lpfnWndProc=WndProc; 
    WndClass.hCursor=LoadCursor(NULL, IDC_ARROW); 
    WndClass.hIcon=LoadIcon(0, IDI_WINLOGO); 
    WndClass.lpszMenuName=MAKEINTRESOURCEA(IDR_MENU); 
    WndClass.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH); 
    WndClass.style=CS_HREDRAW | CS_VREDRAW;
    WndClass.cbClsExtra=0;
    WndClass.cbWndExtra=0;
 
    if(RegisterClassA(& WndClass) == FALSE)
        return 0;
 
    hWnd=CreateWindowA(szClassName, 0, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 
                        CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL); 
    ShowWindow(hWnd, SW_SHOW);
    SetTimer(hWnd, 1, 1000, NULL);
 
    while(GetMessageA(& Msg, hWnd, 0, 0) != FALSE){ 
        if(IsWindow(hDlg) == FALSE || IsDialogMessage(hDlg, & Msg) == FALSE){
            TranslateMessage(& Msg); 
            DispatchMessage(& Msg); 
        }
    }
    
    return(Msg.wParam);
}
 
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hDC=0;
    PAINTSTRUCT ps;
    static RECT Rect;
    static int t=0;
    static char mass[0x10]={0};
 
    switch(message)
    { 
    case WM_TIMER:
        t++;
        itoa(t, mass, 10);
        hDC=GetDC(hWnd);
        DrawTextA(hDC, mass, -1, & Rect, DT_CENTER | DT_VCENTER);
        ReleaseDC(hWnd, hDC);
        break;
    case WM_PAINT:
        GetClientRect(hWnd, & Rect);
        hDC=BeginPaint(hWnd,& ps);
        itoa(t, mass, 10);
        DrawTextA(hDC, mass, -1, & Rect, DT_CENTER | DT_VCENTER);
        EndPaint(hWnd,& ps);
    break;
    case WM_COMMAND:
        if(LOWORD(wParam) == ID_MES1)
            MessageBoxA(hWnd, "Message 1 was called.\0", "Info...\0", MB_OK | MB_ICONINFORMATION);
        else if(LOWORD(wParam) == ID_MES2)
            MessageBoxA(hWnd, "Message 2 was called.\0", "Info...\0", MB_OK | MB_ICONINFORMATION);
        break;
    case WM_LBUTTONUP:
        DialogBoxParamA(hInstance, MAKEINTRESOURCEA(IDD_DIALOG), hWnd, ModalProc, NULL);
        break;
    case WM_RBUTTONUP:
        if(IsWindow(hDlg) == FALSE){
            hDlg=CreateDialogA(hInstance, MAKEINTRESOURCEA(IDD_LESS), hWnd, ModeLessProc);
            ShowWindow(hDlg, SW_SHOW);
        }
        break;
    case WM_DESTROY:
        KillTimer(hWnd, 1);
        PostQuitMessage(0);
        break;
    default: 
        break;
    }
    
    return(DefWindowProc(hWnd, message, wParam, lParam));
}
 
INT_PTR CALLBACK ModalProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
    case WM_INITDIALOG:
        SetWindowTextA(hDlg, "Modal Dialog\0");
        return TRUE;
        break;
    case WM_COMMAND:
        if(LOWORD(wParam) == ID_OK)
            EndDialog(hDlg, ID_OK);
        break;
    case WM_CLOSE:
        EndDialog(hDlg, ID_OK);
        break;
    default:
        break;
    }
 
    return FALSE;
}
 
INT_PTR CALLBACK ModeLessProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
    case WM_INITDIALOG:
        SetWindowTextA(hDlg, "Modeless Dialog\0");
        return TRUE;
        break;
    case WM_COMMAND:
        if(LOWORD(wParam) == ID_OK)
            DestroyWindow(hDlg);
        break;
    case WM_CLOSE:
        DestroyWindow(hDlg);
        break;
    default:
        break;
    }
 
    return FALSE;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2011, 19:47     Диалоговые окна.
Посмотрите здесь:

Размер окна C++
нет окна C++
Изменение окна... C++
C++ Подскажите функцию для получения HWND текущего окна, или по названию окна (для экспорта в VFP6)
C++ С++ и окна
C++ Как запретить сворачивание окна приложения при нажатии кнопки "свернуть все окна"
Активные окна C++
C++ Почему авторы диалоговых окон стараются сделать свои окна максимально похожими на стандартные окна?

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 19:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru