Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.10.2013, 13:30   #11
Грендайзер
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 29
По умолчанию

Всё ясно... Спасибо! Теперь попытаюсь привести программу в должный вид..
Грендайзер вне форума Ответить с цитированием
Старый 06.12.2013, 13:59   #12
Грендайзер
Пользователь
 
Регистрация: 15.10.2013
Сообщений: 29
По умолчанию

Здравствуйте, товарищи. Снова появилась проблемка, теперь с ком портом. Интерфейс я худо бедно написал, пока достаточно, вроде в порт даже пишется, но вот с чтением беда + не разобрался нормально с классами, поэтому не выходит по человечески структурировать программу и приходится лепить всё в одну кучу. Может кто нибудь поможет прикрутить часть кода для чтения данных из порта. Система следующая, при нажатии какой нибудь кнопки (например "Температура") с порта выдаётся некоторая последовательность (пока реализована запись какого то одного числа). Затем внешнее устройство посылает некоторое кол - во байт в порт (от 5 до 8 в зависимости от команды). Эти байты надо считать и вывести в какое нибудь окошко (пока я замыкаю порт на себя и пытаюсь вывести данные в MessageBox). После того когда я прикрутил часть кода взятую отсюда http://piclist.ru/S-COM-THREAD-RUS/S...HREAD-RUS.html и запустил программу ничего не произошло, а компилиться она после этого перестала.
Вложения
Тип файла: rar Hello1.rar (4.6 Кб, 20 просмотров)
Грендайзер вне форума Ответить с цитированием
Старый 19.02.2014, 17:48   #13
vvmcpp
Форумчанин
 
Аватар для vvmcpp
 
Регистрация: 11.12.2010
Сообщений: 116
По умолчанию

Чтобы программа не разрасталась у меня такие предложения:

В общем я вынес функцию обработки кнопки,
если также сделать для других кнопок то программа разрастаться сильно не будет. Возможно лучшее решение, если функция будет принадлежать
какому-то классу.
Как это вообще обычно делается?

Код:
#include <windows.h>

#define ID_BUTTON_1 3000
#define ID_BUTTON_2 3001

HWND hBtn1;
HWND hBtn2;
HANDLE hCOM; // хендл сом порта


/*  Декларируем процедуры Windows  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/* Создать имя класса как глобальную переменную */
 
char szClassName[ ] = "WindowsApp";

// можно сделать чтобы она принимала значение
// например номер порта
int fButton1()
    {
    SetWindowText(hBtn1, "Закрыть порт");
    
    // возвращает 0 например при успехе обработки
    return 0;
    } 

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil)

{
    // хендл будущего окна
    HWND hwnd;                
    MSG messages;           
    
    // структура данных для класса window
    WNDCLASSEX wincl;        

  
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;

    wincl.lpfnWndProc = WindowProcedure;      
    
    // отлов дабл-кликов
    wincl.style = CS_DBLCLKS;                 
    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;                 /* No menu */
    
    // никаких экстра байтов после window класса
    wincl.cbClsExtra = 0;                    
   
    // структура или экземпляр window
    wincl.cbWndExtra = 0;                   
    /*использовать Windows's цвет по умолчанию как фон окна */
  
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;


     /*регистрируем класс window */
 
    if (!RegisterClassEx (&wincl))
        return 0;

    /* класс зарегестрирован, давайте создадим программу */
 
    hwnd = CreateWindowEx (
           0,                 
           szClassName,        
           "Windows App",       
           WS_OVERLAPPEDWINDOW,  
           CW_USEDEFAULT,        
           CW_USEDEFAULT,      
           544,                
           375,                 
           HWND_DESKTOP,        
           NULL,                /* No menu */
           hThisInstance,        
           NULL                 /* No Window Creation data */
           );


//Создаем кнопки hBtn1 и hBtn2;
	hBtn1 = CreateWindow("BUTTON", "Открыть порт", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 70, 45, 240, 20, hwnd, (HMENU)ID_BUTTON_1, hThisInstance, NULL);

// то же сделать со второй кнопой
//	hBtn2 = CreateWindow("BUTTON", "Generate key2", BS_PUSHBUTTON | WS_VISIBLE | WS_CHILD | WS_TABSTOP, 400, 200, 250, 250, hwnd, (HMENU)ID_BUTTON_2, hInstance, NULL);
	
    
    /* показываем окно */
 
    ShowWindow (hwnd, nFunsterStil);


    /* запускает цикл. Будет работать пока GetMessage() возвратит 0 */
  
    while (GetMessage (&messages, NULL, 0, 0))
    {

        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }




 
    return messages.wParam;
}


 

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    
    /* обработка сообщений */
    switch (message)                  
    {
         
					
        case WM_COMMAND:
            
            switch(wParam) 
                    {
        				case ID_BUTTON_1:
                          /*    
        					SetWindowText(hBtn1, "Закрыть порт");
        					 
                             вынести обрабoтку в отдельную функцию
        					Например сделать так: 
        					return fButton1();
        					и пусть функция возвращает сюда 0
        				 
                          */	
        					return fButton1();
        				
        				case ID_BUTTON_2:
        					  {
                                               // также
                                                 }
        
        					return 0;
        			}
                
              break;
             
        case WM_DESTROY:
            PostQuitMessage (0);      
            break;
            
        default:                      
            return DefWindowProc (hwnd, message, wParam, lParam);
    }




    return 0;
}
vvmcpp вне форума Ответить с цитированием
Старый 19.02.2014, 22:21   #14
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Цитата:
Сообщение от vvmcpp Посмотреть сообщение
Как это вообще обычно делается?
Диалоги обчно через ресурс делаются.
waleri вне форума Ответить с цитированием
Старый 21.02.2014, 20:47   #15
vvmcpp
Форумчанин
 
Аватар для vvmcpp
 
Регистрация: 11.12.2010
Сообщений: 116
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
Диалоги обчно через ресурс делаются.
Что такое ресурс? И где он в данном примере?
vvmcpp вне форума Ответить с цитированием
Старый 21.02.2014, 22:40   #16
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

http://msdn.microsoft.com/en-us/library/d573580h.aspx
waleri вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Различие кода mfc и WinApi(mfc ручками набили, а WinApi автоматически с генерировался!! нужно явное отличие, не могу найти) Артём1991 Помощь студентам 0 25.03.2012 17:13
Цвет кнопки,Delphi WinApi red-eye Win Api 0 08.01.2012 21:49
Изменение свойств кнопки через WinAPI Никки Win Api 12 20.09.2009 15:01
UCOZ: Кнопки кнопки на изображении ReDuX HTML и CSS 19 25.04.2008 02:39
триггерные кнопки и кнопки переключатели в DELPHI MARGO Помощь студентам 3 12.11.2007 17:35