Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
efimka90
0 / 0 / 1
Регистрация: 22.04.2010
Сообщений: 7
#1

Использование механизма обмена сообщениями для управления окнами в ОС Windows

22.04.2010, 17:27. Просмотров 920. Ответов 2
Метки нет (Все метки)

друзья, помогите кто чем может.
задание:

Разработать программу «рисования» дочерних окон на родительском окне. Рисования
производится следующим образом:
1. Активация режима рисования по нажатию левой кнопки мыши (сохранение первой
пары координат окна).
2. Растягивание элемента управления в соответствии с перемещением указателя мыши
(формирование второй пары координат окна).
3. Деактивация режима рисования по нажатию правой кнопки мыши (сохранение
второй пары координат окна).
Класс окна для рисования изменяется по нажатию на клавиатуре клавиши,
соответствующей первой букве в названии класса. Рисуются окна следующих классов:
BUTTON, COMBOBOX, EDIT, LISTBOX, SCROLLBAR.

чет прям не знаю, что и как
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2010, 17:27
Ответы с готовыми решениями:

Использование механизма обмена сообщениями для управления окнами в ОС Windows
Ошибка в строке wincl.lpszClassName = szClassName; собственно почему...

Создать клиент/серверное сетевое приложение для обмена текстовыми сообщениями
Создать клиент/серверное сетевое приложение для обмена текстовыми сообщениями...

api Windows функции для управления окнами
Здравствуйте мне необходимо найти api Windows функции для управления окнами. В...

Приложение для обмена сообщениями
Здравствуйте. Необходимо написать приложение для обмена сообщениями. Я так...

Программа для мгновенного обмена сообщениями
Скажи, пожалуйста, если писать программу для обмена через Интернет, а не по...

2
XuTPbIu_MuHTAu
Эксперт С++
2234 / 749 / 25
Регистрация: 27.05.2008
Сообщений: 1,498
30.04.2010, 03:12 #2
efimka90, За тебя писать не будем.Вопросы спрашивай. Если совсем не знаешь,что и как,начни с чтения про "цикл обработки сообщений".
0
efimka90
0 / 0 / 1
Регистрация: 22.04.2010
Сообщений: 7
30.04.2010, 15:17  [ТС] #3
Лучший ответ Сообщение было отмечено efimka90 как решение

Решение

Да я уже написал. Вот код, на будущее, у кого подобное будет

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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
#include "stdafx.h"
#include <windows.h>
#include <stdlib.h>
#include <string>
#include <iostream>
 
#define HEIGHT                        500
#define WIDTH                        1000
#define ID_BUTTON                     100
#define B                            0x42
#define C                            0x43
#define E                            0x45
#define L                            0x4c
#define S                            0x53
 
static TCHAR szWindowClass[] = "win32app";
 
static TCHAR szTitle[] = "LabWork8";
 
POINT lpPointActivate;
POINT lpPointDeactivate;
HINSTANCE hInst;
 
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
void PaintElement(HWND, char*, char*);
 
// FUNCTION: int APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
//
// PARAMETERS: [in]  hInstance      - дескриптор текущего экземпляра окна
//             [in]  hPrevInstance  - дескриптор предыдущего экземпляра окна
//             [in]  lpCmdLine      – указатель на командную строку
//             [in]  nCmdShow       – показывает состояние окна
//
// RETURN VALUE: значение выхода   - при принятии сообщения WM_QUIT
//               0                 - если функция завершается перед
//                                   вводом цикла сообщения
//
// COMMENTS: нет
//
int WINAPI WinMain(HINSTANCE hInstance
                   , HINSTANCE hPrevInstance
                   , LPSTR lpCmdLine
                   , int nCmdShow
                  )
{
    WNDCLASSEX wcex;
 
    wcex.cbSize         = sizeof(WNDCLASSEX);
    wcex.style          = CS_HREDRAW | CS_VREDRAW;
    wcex.lpfnWndProc    = WndProc;
    wcex.cbClsExtra     = 0;
    wcex.cbWndExtra     = 0;
    wcex.hInstance      = hInstance;
    wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
    wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
    wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW + 1);
    wcex.lpszMenuName   = NULL;
    wcex.lpszClassName  = szWindowClass;
    wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_APPLICATION));
 
    if (!RegisterClassEx(&wcex))
    {
        MessageBox(NULL
                   , "Call to RegisterClassEx failed!"
                   , "LabWork8"
                   , NULL
                  );
        return TRUE;
    }
 
    hInst = hInstance; 
 
    HWND hWindow = CreateWindow(szWindowClass
                                , szTitle
                                , WS_OVERLAPPEDWINDOW
                                , CW_USEDEFAULT
                                , CW_USEDEFAULT
                                , WIDTH
                                , HEIGHT
                                , NULL
                                , NULL
                                , hInstance
                                , NULL
                               );
 
    if (!hWindow)
    {
        MessageBox(NULL
                   , "Call to CreateWindow failed!"
                   , "LabWork8"
                   , NULL
                  );
        return TRUE;
    }
 
    ShowWindow(hWindow, nCmdShow);
    UpdateWindow(hWindow);
 
    MSG message2;
    while (GetMessage(&message2, NULL, 0, 0))
    {
        TranslateMessage(&message2);
        DispatchMessage(&message2);
    }
 
    return (int) message2.wParam;
}
 
/////////////////////////////////////////////////////////////////////////////////
// 
// FUNCTION: LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM)
//
// PARAMETERS: [in]  hWindow     - хэндл окна
//             [in]  message  - сообщение для окна
//             [in]  wParam   – дополнительная информация для сообщения
//             [in]  lParam   – дополнительная информация для сообщения
//
// RETURN VALUE: 0   - во всех случаях
//
// COMMENTS: нет
//
LRESULT CALLBACK WndProc(HWND hWindow
                         , UINT message
                         , WPARAM wParam
                         , LPARAM lParam
                        )
{
    switch (message)
    {
    case WM_LBUTTONDOWN:
        GetCursorPos(&lpPointActivate);
        ScreenToClient(hWindow, &lpPointActivate);
        break;
    case WM_RBUTTONDOWN:
        GetCursorPos(&lpPointDeactivate);
        ScreenToClient(hWindow, &lpPointDeactivate);
        break;
    case WM_KEYDOWN:
        switch(wParam)
        {
        case B:
            PaintElement(hWindow, "button", "Кнопка");
            break;
        case C:
            PaintElement(hWindow, "combobox", "");
            break;
        case E:
            PaintElement(hWindow, "edit", "edit");
            break;
        case L:
            PaintElement(hWindow, "listbox", "");
            break;
        case S:
            PaintElement(hWindow, "scrollbar", "");
            break;
        }
        break;
    case WM_DESTROY:
        PostQuitMessage(NULL);
        break;
    default:
        return DefWindowProc(hWindow
                             , message
                             , wParam
                             , lParam
                            );
        break;
    }
 
    return FALSE;
}
 
/////////////////////////////////////////////////////////////////////////////
//
//  FUNCTION: void PaintElement(HWND, char*, char*)
//
//  PARAMETERS: [in]  hWnd       - хэндл окна
//              [in]  className  - класс окна
//              [in]  greeting   - подпись окна
//
//  RETURN VALUE: нет
//
//  COMMENTS: Функция рисования окна выбранного класса
//
void PaintElement(HWND hWindow, char* className, char* greeting)
{
    HWND child;
    child = CreateWindow(className
                         , greeting
                         , WS_CHILD | WS_BORDER | WS_VISIBLE 
                         , lpPointActivate.x
                         , lpPointActivate.y
                         , (lpPointDeactivate.x - lpPointActivate.x)
                         , (lpPointDeactivate.y - lpPointActivate.y)
                         , hWindow
                         , (HMENU)(int)(ID_BUTTON)
                         , hInst
                         , NULL
                        );
    ShowWindow(child, SW_NORMAL);
    UpdateWindow(child);
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.04.2010, 15:17

Создание программы для обмена сообщениями
Здраствуйте! Я хочу создать программу для обмена сообщениями, что-то наподобие...

Разработка ActiveX для обмена сообщениями
Здравствуйте. Начинаю изучать написание ActiveX на С#. Нужно написать для...

Программа для мгновенно обмена сообщениями
здравствуйте. я хочу создать программу для мгновенного обмена сообщениями через...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru