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

Работа с двумя окнами - C++ - C++

Войти
Регистрация
Восстановить пароль
 
Nicl
 Аватар для Nicl
0 / 0 / 0
Регистрация: 07.10.2008
Сообщений: 26
20.02.2009, 19:45     Работа с двумя окнами - C++ #1
Всех приветствую.
При изучении WinAPI возникла следующая проблема:

Требуется создать два окна, причем:
- При изменении размера одного окна второе тоже меняется
-При нажатии на кнопку в первом окне второе начинает каждую секунду менять заголовок.

Вроде бы все просто, но вот как реализовать - не знаю. Два HWND создал, окна создал, а вот что дальше, как их "связать"?
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
#include <windows.h>
LONG WINAPI WndProc (HWND, UINT, WPARAM, LPARAM);
VOID CALLBACK procTimer1(HWND,UINT,UINT,DWORD);
VOID CALLBACK procTimer2(HWND,UINT,UINT,DWORD);
 
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    HWND hwnd;
    HWND hwnd2;
    MSG msg;
    WNDCLASS w;
    memset(&w, 0, sizeof(WNDCLASS));
    w.lpfnWndProc = WndProc;
    w.hInstance = hInstance;
    w.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
    w.lpszClassName = "My Class";
    RegisterClass(&w);
    hwnd = CreateWindow("My Class", "My title",WS_OVERLAPPEDWINDOW,  
        0, 0,500,333, NULL, NULL, hInstance, NULL);
 
    hwnd2 = CreateWindow("My Class", "My title",WS_OVERLAPPEDWINDOW,  
        100, 100,500,333, NULL, NULL, hInstance, NULL);
    ShowWindow(hwnd, nCmdShow);
    UpdateWindow(hwnd);
 
    ShowWindow(hwnd2, nCmdShow);
    UpdateWindow(hwnd2);
 
    while (GetMessage (&msg, NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
 
    return msg.wParam;
}
 
 
LONG WINAPI WndProc (HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
    { 
        switch (Message)
        {
        
        case WM_SIZE:
 
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:    
        return DefWindowProc(hwnd, Message, wparam, lparam);
        }
        return 0;
    }
Помогите пожалуйста советом.

Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2009, 19:45     Работа с двумя окнами - C++
Посмотрите здесь:

C++ Управление окнами (windows.h)
C++ Как работать с окнами?
C++ Как работать с окнами?
C++ Перевод данных между окнами
Управление окнами другой программы C++
C++ управление окнами
C++ Работа с массивами. Реализовать заполнение массива двумя вариантами
C++ Разработка приложений с диалоговыми окнами
C++ Создание программы с окнами
Программа для работы с окнами C++
C++ Переключение между окнами по горячим клавишам
C++ Взаимодействие з чужими окнами

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
TurboDune
22 / 22 / 1
Регистрация: 20.02.2009
Сообщений: 59
20.02.2009, 23:50     Работа с двумя окнами - C++ #2
Цитата Сообщение от Nicl Посмотреть сообщение
При изменении размера одного окна второе тоже меняется
Примерно таким образом:
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
HWND g_hwnd;
HWND g_hwnd2;
 
int WINAPI WinMain (...) {}
 
LONG WINAPI WndProc (HWND hwnd, UINT Message, WPARAM wparam, LPARAM lparam)
{ 
    switch (Message)
    {
    case WM_MOVE:
    case WM_SIZE:
    {
        RECT r1 = {}, r2 = {};
        GetWindowRect(g_hwnd, &r1);
        GetWindowRect(g_hwnd2, &r2);
 
        if(hwnd == g_hwnd)
        {
            r2.right = r2.right - r2.left; // Сохраним первоначальную ширину в это поле, чтобы не заводить новую переменную
            r2.left = r1.right;
            r2.top = r1.top;
            r2.bottom = r1.bottom;
            r2.right += r2.left;
 
            MoveWindow(g_hwnd2, r2.left, r2.top, r2.right-r2.left, r2.bottom-r2.top, TRUE);
        }
        else if(hwnd == g_hwnd2)
        {
            r1.left = r1.right - r1.left; // См. выше
            r1.right = r2.left;
            r1.top = r2.top;
            r1.bottom = r2.bottom;
            r1.left = r1.right - r1.left;
 
            MoveWindow(g_hwnd, r1.left, r1.top, r1.right-r1.left, r1.bottom-r1.top, TRUE);
        }
    }
    break;
    ...
}
Цитата Сообщение от Nicl Посмотреть сообщение
При нажатии на кнопку в первом окне второе начинает каждую секунду менять заголовок.
А тут совсем непонятна задача. Если имеется ввиду изменение текста заголовка,
то необходимо создать оконный таймер функцией SetTimer, обработать сообщение типа WM_TIMER, и изменить заголовок окна функцией SetWindowText . Описание всех функций см. MSDN.
Yandex
Объявления
20.02.2009, 23:50     Работа с двумя окнами - C++
Ответ Создать тему
Опции темы

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