Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
SlimSky
0 / 0 / 0
Регистрация: 13.12.2013
Сообщений: 11
#1

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

14.12.2013, 17:13. Просмотров 195. Ответов 0
Метки нет (Все метки)

Ошибка в строке wincl.lpszClassName = szClassName; собственно почему ругается???


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
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
 
/* кол-во строчек */
#define LINES 30
 
LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
 
char szClassName[] = "WindowsApp";
 
int WINAPI WinMain(HINSTANCE hThisInstance,HINSTANCE hPrevInstance,LPSTR lpszArgument,int nFunsterStil)
{
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = &szClassName;
    wincl.lpfnWndProc = WindowProcedure;
    wincl.style = CS_HREDRAW | CS_VREDRAW ;
    wincl.cbSize = sizeof(WNDCLASSEX);
    wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = (HBRUSH) GetStockObject(WHITE_BRUSH);
    if (!RegisterClassEx(&wincl)) return(0);
 
    hwnd = CreateWindowEx(0,szClassName,"Поставь мне + пжлста",WS_OVERLAPPEDWINDOW | WS_VSCROLL | WS_HSCROLL,CW_USEDEFAULT,CW_USEDEFAULT,400,300,NULL,NULL,hThisInstance,NULL);
 
    ShowWindow(hwnd, nFunsterStil);
 
    /* Цикл обработки мессаджей */
    while (GetMessage(&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }
    return(messages.wParam);
}
 
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    static int  cxChar, cxCaps, cyChar, cyClient, cxClient, VscrollPos, HscrollPos;
    int i;
    int j;
 
    PAINTSTRUCT ps;
    char buffer[1024]; //размер буфера для текста ставь побольше если будет много текста
    TEXTMETRIC tm;
 
 
    if (message ==WM_VSCROLL)
    {
            EnableScrollBar(hwnd, false, SB_BOTH);
            EnableScrollBar(hwnd, false, SB_VERT);
    }
    else if (message ==WM_HSCROLL)
    {
            EnableScrollBar(hwnd, false, SB_BOTH);
            EnableScrollBar(hwnd, true, SB_VERT);
    }
    else
    {
            EnableScrollBar(hwnd, false, SB_BOTH);
            EnableScrollBar(hwnd, false, SB_HORZ);
    }
 
    switch (message)
    {
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        case WM_CREATE:
            {
            HDC hdc = GetDC(hwnd);
 
            GetTextMetrics(hdc, &tm);
            cxChar = tm.tmAveCharWidth;
            cxCaps = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2;
            cyChar = tm.tmHeight + tm.tmExternalLeading;
 
            ReleaseDC(hwnd, hdc);
 
            SetScrollRange(hwnd, SB_VERT, 0, LINES - 1, FALSE);
            SetScrollPos(hwnd, SB_VERT, VscrollPos, TRUE);
 
            //SetScrollRange(hwnd, SB_HORZ, 0, LINES - 1, FALSE);
            SetScrollPos(hwnd, SB_HORZ, HscrollPos, TRUE);
            }
        case WM_PAINT:
        {
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hwnd, &ps);
 
            i = GetScrollPos(hwnd, SB_VERT);
            j = GetScrollPos(hwnd, SB_HORZ);
            sprintf(buffer,"Здравствуйте! Уже несколько дней мучаюсь с такой проблемой: ");
            TextOut(hdc, cxChar * -j, cyChar * -i, buffer, strlen(buffer));
            i = GetScrollPos(hwnd, SB_VERT) - 1;
            sprintf(buffer,"Нужно создать окно с горизонтальной и вертикальной");
            TextOut(hdc, cxChar * -j, cyChar * -i, buffer, strlen(buffer));
            i = GetScrollPos(hwnd, SB_VERT) - 2;
            sprintf(buffer,"прокруткой. Горизонтальная прокрутка должна блокироваться ");
            TextOut(hdc, cxChar * -j, cyChar * -i, buffer, strlen(buffer));
            i = GetScrollPos(hwnd, SB_VERT) - 3;
            sprintf(buffer,"при нажатии на вертикальную, и наоборот. Я не знаю как");
            TextOut(hdc, cxChar * -j, cyChar * -i, buffer, strlen(buffer));
            i = GetScrollPos(hwnd, SB_VERT) - 4;
            sprintf(buffer,"передать текст в окно.");
            TextOut(hdc, cxChar * -j, cyChar * -i, buffer, strlen(buffer));
 
            EndPaint(hwnd, &ps);
            break;
        }
 
 
        case WM_VSCROLL:
        {
 
            switch (LOWORD(wParam))
            {
                case SB_LINEUP:
                    VscrollPos -= 1;
                    break;
                case SB_LINEDOWN:
                    VscrollPos += 1;
                    break;
                case SB_PAGEUP:
                    VscrollPos -= cyClient / cyChar;
                    break;
                case SB_PAGEDOWN:
                    VscrollPos += cyClient / cyChar;
                    break;
                case SB_THUMBPOSITION:
                    VscrollPos = HIWORD(wParam);
                    break;
                default:
 
                    break;
            }
 
            VscrollPos = max(0, min(VscrollPos, LINES - 1));
 
            if (VscrollPos != GetScrollPos(hwnd, SB_VERT)) {
                SetScrollPos(hwnd, SB_VERT, VscrollPos, TRUE);
                InvalidateRect(hwnd, NULL, TRUE);
            }
 
        case WM_HSCROLL:
        {
            switch (LOWORD(wParam))
            {
                case SB_LINEUP:
                    HscrollPos -= 1;
                    break;
                case SB_LINEDOWN:
                    HscrollPos += 1;
                    break;
                case SB_PAGEUP:
                    HscrollPos -= cxClient / cxChar;
                    break;
                case SB_PAGEDOWN:
                    HscrollPos += cxClient / cxChar;
                    break;
                case SB_THUMBPOSITION:
                    HscrollPos = HIWORD(wParam);
                    break;
                default:
                    
                    break;
            }
        }
 
            if (HscrollPos != GetScrollPos(hwnd, SB_HORZ)) {
                SetScrollPos(hwnd, SB_HORZ, HscrollPos, TRUE);
                InvalidateRect(hwnd, NULL, TRUE);
            }
            break;
            }
        default:
            return DefWindowProc(hwnd, message, wParam, lParam);
    }
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2013, 17:13
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Использование механизма обмена сообщениями для управления окнами в ОС Windows (C++):

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

Создать клиент/серверное сетевое приложение для обмена текстовыми сообщениями - C++
Создать клиент/серверное сетевое приложение для обмена текстовыми сообщениями через среду передачи данных стека TCP/IP. Для реализации...

Система обмена сообщениями - C++
Здраствуйте форумчане! И так мне надо написать клиент-серверное сетевое приложение реализующее функционал системы обмена сообщениями...

Нужна проверка кода (система обмена сообщениями) - C++
есть код C++,компилируется в Mingw/bin при помощи g++. Данный код представляет собой систему обмена сообщениями. Идеальный случай,когда...

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

Использование свойства полиморфизма и исследование механизма виртуальных функций - C++
Создайте класс Matr, определите в нем виртуальную функцию-член matrica(int n), которая определяет произведение элементов квадратной...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.12.2013, 17:13
Привет! Вот еще темы с ответами:

IPC. Обмен сообщениями в Windows. - C++
В Винде процессы могут обмениваться сообщениями, но везде, где про это написано, обмен идет между окнами, а можно ли организовать обмен с...

Использование механизма обмена сообщениями для управления окнами в ОС Windows - C++ WinAPI
Ошибка в строке wincl.lpszClassName = szClassName; собственно почему ругается??? #include &quot;stdafx.h&quot; #include &lt;windows.h&gt; #include...

Использование механизма обмена сообщениями для управления окнами в ОС Windows - C++ WinAPI
друзья, помогите кто чем может. задание: Разработать программу «рисования» дочерних окон на родительском окне. Рисования ...

api Windows функции для управления окнами - C++ Builder
Здравствуйте мне необходимо найти api Windows функции для управления окнами. В книге по С++ приведены только три функции (CloseWindow(),...


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

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

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