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

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

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

Передача параметров в функцию WndProc - C++

24.01.2012, 19:35. Просмотров 816. Ответов 3
Метки нет (Все метки)

Начал осваивать WinAPI и столкнулся со следующей проблемой - необходимо передать в качестве параметров некоторые переменные в функцию WndProc:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
LRESULT CALLBACK WndProc(
  HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    cout<<"at bottom of message\n";
  switch (message)
  {
      cout<<"In msg\n";
 
  case WM_PAINT:
 
    cout<<"In paint";
    hdc=BeginPaint(hWnd, &ps);
    CRASH(timecount,CAR,n,ROAD,NumOfRoad);
 
    EndPaint(hWnd, &ps);
 
    break;
В функцию CRASH надо передать 2 массива объектов (CAR,ROAD) и 3 целочисленные переменные(n, NumOfRoad, timecount).
Собственно вопрос как это сделать, если возможно, и если это глупо и невостребовано, то как сделать так, чтобы функция CRASH "увидела" вышеперечисленные переменные, объявленные в другом месте программы?
Вот кусок кода, где они объявляются и происходит цикл отправки сообщений:

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
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow)
{
        HDC hdc; //создаём контекст устройства
    PAINTSTRUCT ps; //создаём экземпляр структуры графического вывода
  // выборка и обработка сообщений
  srand(time(NULL));
    //Параметры дорог
        char inputfile[255];
        cout << "Input name of file with description of roads: ";
        cin >> inputfile;
        int NumOfRoad=numberroad(inputfile);
        cout<<NumOfRoad<<'\n';
        //Выход в случае, если файл не найден
            if (NumOfRoad<1)
            {
                cout << "There is no roads. Maybe you input wrong name of file" << '\n';
            };
        ROADS ROAD[NumOfRoad];
        cout<<"Make roads\n";
        inputroad(inputfile, ROAD, NumOfRoad);
    cout<<"out of NOR\n";
    //Параметры машин
        int n;
        cout << "Input number of cars: ";
        cin >> n;
        CARS CAR[n];
 
    //Распределяем машины по дорогам
        distribution(ROAD, NumOfRoad, CAR, n);
    //Параметры аварии
        float NumRoad,HMLine,NumLine;//Номер дороги, количество линий, Начальный номер линии
        //cout << "Input crash parametrs: number of road, how many lines busy, number of first busy line(from left to right) ";
        //cin >> NumRoad>>HMLine>>NumLine;
        int timecount;
        //cout << "Input time passing from accident in seconds: ";
        //cin >> timecount;
 
    //Создание окна для рисования
        LPCTSTR lpzClass = TEXT("My Window Class!");
        RegMyWindowClass(hInstance, lpzClass);
        HWND hWnd = CreateWindow(lpzClass, TEXT("Dialog Window"),
        WS_OVERLAPPEDWINDOW | WS_VISIBLE, 0, 0, XSCR, YSCR, NULL, NULL,
        hInstance, NULL);
        MSG msg = {0};    // структура сообщения
        int iGetOk = 0;   // переменная состояния
        while ((iGetOk = GetMessage(&msg, NULL, 0, 0 )) != 0) // цикл сообщений
        {
            if (iGetOk == -1) return 3;  // если GetMessage вернул ошибку - выход
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
 
    return msg.wParam;
 }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.01.2012, 19:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Передача параметров в функцию WndProc (C++):

Передача параметров в функцию - C++
void f(int a) ; // передача по значению void f(int *a);//передача по ссылке void f(int &amp;a) ; // а если так написано - что это...

Передача параметров в функцию - C++
Добрый вечер Не получается передать в функцию массив выдает ошибку #include &lt;cstdio&gt; struct morse_code { const char*...

Передача параметров в функцию - C++
Люди помогите, пожалуйста. Есть такая простая задачка: В одномерном массиве, состоящем из n элементов вычислить произведение...

передача параметров в функцию - C++
Здарвствуйте! Неделю изучаю С++, и в книге по которой изучаю сказано: &quot;Передавать параметры по значению только при необходимости и...

Передача параметров в функцию - C++
Можно ли сделать так, чтобы при совпадении переменных в функцие и основной программе, значения изменялись и в основной программе? И еще,...

Передача параметров в функцию - C++
Толи я чего-то туплю, толи всё же в мейн ошибка. Итак: есть функция, которая должна сообщать о результатах поиска изменением переменных...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
24.01.2012, 22:33 #2
Ну если эти переменные объявлены в функциий, отличной от CRASH, последняя вряд ли их увидит. Ты их сделай глобальными и она их будет видеть.
...Хотя можно и передать, это не глупо. Главное объявить её с соответствующими параметрами. И передатся не сам массив, а указатель на него
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
#include <stdio.h>
 
void g (int* k) {
 k[0]= 76;
}
 
 
void k () {
 
 //Это воттвой массив
 int ss [24];
 ss[0]= 12;
 printf ("ss= %d\n", ss[0]);
 
 //Вот мы его передали в функцию.
 g(ss);
 //А вот результат.
 printf ("ss= %d\n", ss[0]);
}
 
 
int main () {
 printf ("hello, word!\n");
 k();
 getchar ();
 return 0;
}
0
GotoFreeMan
0 / 0 / 0
Регистрация: 09.12.2011
Сообщений: 20
24.01.2012, 23:03  [ТС] #3
Проблема в том, что я не могу так сделать - ведь тогда придётся переопределять функцию WndProc, чего делать нельзя - в ней параметры по умолчанию и вызывается она функцией DispatcheMessage, для этого придётся лезть в библиотеку(sic!), от чего я бы воздержался.
0
kravam
быдлокодер
1695 / 882 / 45
Регистрация: 04.06.2008
Сообщений: 5,459
24.01.2012, 23:41 #4
Не, переопределять не надо. Тут с функцией CRASH на самом деле проблем быть не должно, действительно, параметры стандартных типа она примет без проблем. Если тип нестандартный (указатель на массив хитрого типа), то опять же, просто надо познакомить CRASH с таким типом- это практикуется сплошь и рядом, и тогда она без проблем примет указатель на его массив и будет с ним работать
C++
1
2
3
struct CAR {
};
void* CRASH (CAR*);
НО вот что дейтствительно вызывает затруднения, как передать этот массив в оконную процедуру? Хз, наверное действительно придётся делать массив глобальным. Чё-то больше ничё в голову не приходит.

Ну тут я бы поковырядся ещё на предмет параметров WPARAM wParam и LPARAM lParam, ведь как я понял ты будешь CRASH вызывать только при определёных сообщениях, а насколько я знаю, не все сообщения используют эти параметры. А если нам хоть один параметр будет доступен это то что надо, ведь через него можно передавать любой указатель, на какую угодно структуру или массив. Если край неохота массивы делать глобальными, то надо пробовать.
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2012, 23:41
Привет! Вот еще темы с ответами:

Передача параметров в функцию - C++
Кто может подсказать как работает метод __fastcall.И как связан стэк и управление им в с++(желательно на Visual C++.NET

Передача параметров в функцию - C++
Как понять , что передаётся в функцию при такой записи : void Fun(str* &amp;r) при этом есть такие данные: struct str {int b; ...

Передача параметров в функцию по умолчанию - C++
Передача параметров в функцию по умолчанию. Написать встроенную функцию, которая считает площадь квадрата со стороной А, если известно, что...

Передача параметров в функцию по адресу - C++
Привет! Помогите, пожалуйста, исправить ошибку. Конкретного задания нет, это пример передачи параметров в функцию по адресу. ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.01.2012, 23:41
Ответ Создать тему
Опции темы

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