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

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

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

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

14.12.2013, 17:13. Просмотров 180. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.12.2013, 17:13     Использование механизма обмена сообщениями для управления окнами в ОС Windows
Посмотрите здесь:

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

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

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

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

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

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

Управление окнами (windows.h) - C++
Возник вопрос по следующей задаче: Создайте 2 разных окна. При изменении размеров первого окна, размеры второго тоже меняються. При...

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

Два счетчика для обмена и сравнений для сортировки массива - C++
написал два счетчика для обмена и сравнений для сортировки массива.Проблема при выводе выводится сначала кучу чисел сортировки и обмена,а...

Приложение для кассы обмена валюты vs 2010 - C++
Приложение для кассы обмена валюты. Исходное значение (доллары или рубли) вводится в текстовое поле (TextBox). Курс доллара задан в...


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

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

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