Форум программистов, компьютерный форум, киберфорум
C/C++: WinAPI
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
1 / 1 / 0
Регистрация: 09.04.2012
Сообщений: 101
1

Обработка сообщений дочернего окна в другом файле

16.03.2015, 14:10. Показов 659. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!Мне надо описать Callback функцию дочернего окна в другом файле. Это дочерняя функция создана для работы с Com-портом. Кроме этого у меня есть еще stdafx.h, stdafx.cpp, main.h файлы. Я в них запуталась. помогите, пожалуйста, разобраться

stdafx.cpp
C++
1
2
3
#include <windows.h>
#include <string>
#include <Strsafe.h>
Settings.cpp

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
#include "main.h"
HANDLE hPort=INVALID_HANDLE_VALUE;
int CreatePort(const char* name)
{
    hPort=CreateFile(name, GENERIC_READ|GENERIC_WRITE,NULL,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);                //для асинхронного режима
    if(hPort==INVALID_HANDLE_VALUE)
    {
        DWORD dwError;
        dwError=GetLastError();
        return dwError;
    }    
    return 0;       
}
BOOL WINAPI ChildWndProc (HWND Childhwnd,UINT ChilduMsg,WPARAM Childwpar,LPARAM Childlpar)
{
    static HWND hComb;
    switch (ChilduMsg)
    {
        case WM_INITDIALOG:
        {
            char COMmas[6], COMnum[3];    //массив для полного названия ком-порта с номером
            hComb=GetDlgItem(Childhwnd,IDC_COMBO11);
            SendMessage (hComb,CB_RESETCONTENT,0,0);
            int count=1;
            SendMessage(hComb,CB_ADDSTRING,0,(LPARAM)"Select COM port");
            for (int i=1;i<99;i++)
            {
                strcpy_s(COMmas,"COM");
                _itoa_s(i,COMnum,10);
                strcat_s(COMmas,COMnum);
                int Res=CreatePort(COMmas);
                if (Res==5)    
                    strcat_s(COMmas,"*");
                if(Res==0 || Res==5)
                {        
                    SendMessage(hComb,CB_ADDSTRING,0,(LPARAM)COMmas);
                    SendMessage(hComb,CB_SETITEMDATA,count,(LPARAM)i);
                    count++;
                    if(Res==0) CloseHandle(hPort);  
                }
            }
            SendMessage(hComb,CB_SETCURSEL,0,0);
            break;
        }
        case WM_CLOSE:
        {
            EndDialog (Childhwnd,LOWORD (Childwpar));
            return TRUE;
        }
        case WM_COMMAND:
        {
            switch(LOWORD(Childwpar))
            {
                case IDC_COMBO11:
                {
                    if(HIWORD(Childwpar)==CBN_SELENDOK) //выбор элемента списка
                    {
                        char COMmas[8], COMnum[3];    
                        int index;
                        char cFindmas[7]="Select";
                        index=SendDlgItemMessage(Childhwnd,IDC_COMBO11,CB_GETCURSEL,0,0);
                        index=SendDlgItemMessage(Childhwnd,IDC_COMBO11,CB_GETITEMDATA,index,0);
                        if (index >0)
                        {
                            int ind=SendMessage(hComb,CB_FINDSTRING,0,(LPARAM)cFindmas);
                            if (ind!=CB_ERR)
                                SendMessage(hComb,CB_DELETESTRING,0,0);
                        }
                        else
                            break;
                        if(hPort!=INVALID_HANDLE_VALUE)
                        {
                            CloseHandle(hPort); hPort = INVALID_HANDLE_VALUE;
                        }
                        strcpy_s(COMmas,"COM");
                        _itoa_s(index,COMnum,10);
                        strcat_s(COMmas,COMnum);
                        if(!CreatePort(COMmas))
                        {   
                            ComPortTimeOut();
                            ComPortSettings(); 
                        }
                    }
                    break;
                }
                case IDC_CLOSE:      
                {
                    EndDialog(Childhwnd,NULL);
                    return TRUE;
                }
            }
        }
        return TRUE;
    }
    return FALSE;
}
main.h
C++
1
2
3
4
5
6
7
8
#include "stdafx.h"
#include "resource.h"
int CreatePort(const char*);
bool ComPortTimeOut(void);
bool ComPortSettings(void);
DCB MyDcb;
COMSTAT State;
BOOL WINAPI ChildWndProc (HWND Childhwnd,UINT ChilduMsg,WPARAM Childwpar,LPARAM Childlpar);
Выдает такие ошибки:
error LNK2005: "struct _COMSTAT State" (?State@@3U_COMSTAT@@A) already defined in main.obj
1>Settings.obj : error LNK2005: "struct _DCB MyDcb" (?MyDcb@@3U_DCB@@A) already defined in main.obj
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2015, 14:10
Ответы с готовыми решениями:

Обработка сообщений из дочернего окна
Здравствуйте. Недавно работаю с WinApi и наткнулся на проблему: в Edit control не могу обрабатывать...

Как получить размеры клиентской области окна-родителя в функции дочернего окна?
задание такое: имеется дочернее окно,которое &quot;убегает&quot; от курсора мыши в пределах родительского...

При открытии дочернего окна, отображаются формы и кнопки с основного окна; как исправить?
при открытии дочернего окна, отображаются формы и кнопки с основного окна, как можно исправить? ...

Позиционирование дочернего окна относительно элемента главного окна
Всем привет. Подскажите пожалуйста, как можно сделать. У меня есть главное окно, на котором условно...

0
16.03.2015, 14:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.03.2015, 14:10
Помогаю со студенческими работами здесь

Закрытие дочернего окна приводит к закрытию основного окна
Суть задания &quot;После нажатия левой кнопки мышки в области окна в левом углу окна создать временное...

Вызов окна из дочернего WPF окна
Здравствуйте. Надеюсь , правильно сформулировал вопрос. Имеется проект на WPF В нём имеется...

MFC Отправка сообщений в основной поток из дочернего
Как из дочернего потока отправить сообщение своему окну? То есть что бы главный поток MFC принял...

Как одному классу узнать о другом в другом файле, если они не имеют общего наследования
Есть два класса в разных файлах, первому классу нужно знать о втором и использовать указатели типа...

Закрытие дочернего окна
Привет всем !!! Есть программа на WinApi состоящая из родительского и дочернего окон (hWnd и hWnd1...

Отображение дочернего окна
При нажатии лкм должно создаваться дочернее окно, но открывается только главное окно и не реагирует...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru