Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Программирование под Windows > Visual C++
Перезагрузить страницу Помогите пожалуйста
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
volk volk вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.12.2012
По умолчанию Помогите пожалуйста - 10.01.2013, 20:33

Привет!Пишу прогу для com-порта: открытие, считывание, запись( для проверки в файл кидаю инфу). Работаю с Visual Studio не давно, пишу в MFC приложении. Чтобы создать интерфейс использую Dialog, по нажатию кнопочек прога работает, но мне нужно чтобы сразу при компиляции и открытии Dialog порт открывался и из него считывались данные, когда они будут поступать из порта. Подскажите пожалуйста как это сделать?
Вот мой код:
// open_comDlg.cpp : файл реализации

#include "stdafx.h"
#include "open_com.h"
#include "open_comDlg.h"
#include "afxdialogex.h"
#include <iostream>
#include <fstream>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// Диалоговое окно CAboutDlg используется для описания сведений о приложении

class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();

// Данные диалогового окна
enum { IDD = IDD_ABOUTBOX };

protected:
virtual void DoDataExchange(CDataExchange* pDX); // поддержка DDX/DDV

// Реализация
protected:
DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}

void CAboutDlg:: DoDataExchange(CDataExchange* pDX)
{
CDialogEx:: DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()


// диалоговое окно Copen_comDlg




Copen_comDlg::Copen_comDlg(CWnd* pParent /*=NULL*/)
: CDialogEx(Copen_comDlg::IDD, pParent)
, m_write(_T(""))
, m_read(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void Copen_comDlg:: DoDataExchange(CDataExchange* pDX)
{
CDialogEx:: DoDataExchange(pDX);
DDX_Text(pDX, IDC_EDIT2, m_write);
DDX_Text(pDX, IDC_EDIT1, m_read);
}

BEGIN_MESSAGE_MAP(Copen_comDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, &Copen_comDlg::OnBnClickedButton1)
ON_BN_CLICKED(IDC_BUTTON3, &Copen_comDlg::OnBnWriteClicked)
ON_BN_CLICKED(IDC_BUTTON2, &Copen_comDlg::OnBnReadClicked)
ON_BN_CLICKED(IDC_BUTTON4, &Copen_comDlg::OnBnCloseClicked)
ON_COMMAND(IDD_OPEN_COM_DIALOG, &Copen_comDlg::OnIddOpenComDialog)
END_MESSAGE_MAP()


// обработчики сообщений Copen_comDlg

BOOL Copen_comDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();

// Добавление пункта "О программе..." в системное меню.

// IDM_ABOUTBOX должен быть в пределах системной команды.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);

CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}

// Задает значок для этого диалогового окна. Среда делает это автоматически,
// если главное окно приложения не является диалоговым
SetIcon(m_hIcon, TRUE); // Крупный значок
SetIcon(m_hIcon, FALSE); // Мелкий значок

// TODO: добавьте дополнительную инициализацию

return TRUE; // возврат значения TRUE, если фокус не передан элементу управления
}

void Copen_comDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}

// При добавлении кнопки свертывания в диалоговое окно нужно воспользоваться приведенным ниже кодом,
// чтобы нарисовать значок. Для приложений MFC, использующих модель документов или представлений,
// это автоматически выполняется рабочей областью.

void Copen_comDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // контекст устройства для рисования

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

// Выравнивание значка по центру клиентского прямоугольника
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;

// Нарисуйте значок
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}

// Система вызывает эту функцию для получения отображения курсора при перемещении
// свернутого окна.
HCURSOR Copen_comDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
//char *buf_out="u";
//char *buf_in;
//DWORD NumberOfBytesRead, NumberOfBytesWritten;//число фактически принятых или переданных байт
//CString buffer;
HANDLE h;
using namespace std;
ofstream myfile;
void Copen_comDlg::OnBnClickedButton1()

{
COMMTIMEOUTS timeout={1000,1000,1000,1000,1000};
DCB dcb;
h=CreateFile(L"COM6",GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING,0,NULL);
if (h==INVALID_HANDLE_VALUE)//если ошибка открытия
{
myfile.open ("d:/my_file_name.txt");
myfile<< "errorOpen";
myfile.close();
}
else
{
bool res;
SetCommTimeouts(h,&timeout); //загрузить структуру таймаутов в порт
res=GetCommState(h, &dcb); //читает структуру dcb из порта
res=BuildCommDCB(L"COM6: baud=2400 parity=N data=8 stop=1", &dcb);
res=SetCommState(h,&dcb); //загрузить структуру в порт
myfile.open ("d:/my_file_name.txt");
myfile<< "Open";
myfile.close();
}

// TODO: добавьте свой код обработчика уведомлений
}
void Copen_comDlg::OnBnWriteClicked()
{
DWORD b;
UpdateData(true);

if(!WriteFile(h,m_write,8,&b, NULL))
{
myfile.open ("d:/my_file_name.txt");
myfile<< "error";
myfile.close();
}
return;

// TODO: добавьте свой код обработчика уведомлений
}

void Copen_comDlg::OnBnReadClicked()
{
DWORD d;
char *buf_in = new char[10];

if(ReadFile(h,buf_in,strlen(buf_in),&d,NULL)==0)
{
myfile.open ("d:/my_file_name.txt");
myfile<< "errorRead";
myfile.close();
}
else
{
buf_in[d]='\0';
m_read += buf_in;
UpdateData(false);

myfile.open ("d:/my_file_name.txt");
myfile<< buf_in;
myfile.close();
}
// TODO: добавьте свой код обработчика уведомлений
return;
}

void Copen_comDlg::OnBnCloseClicked()
{
CloseHandle(h);
{
myfile.open ("d:/my_file_name.txt");
myfile<< "port_close";
myfile.close();
}
// TODO: добавьте свой код обработчика уведомлений
}
Ответить с цитированием
  (#2 (permalink)) Старый
Rius Rius вне форума
Программист
 
Аватар для Rius
 
Сообщений: 7,470
Сказал(а) спасибо: 22
Поблагодарили 944 раз(а) в 928 сообщениях
Регистрация: 27.08.2004
Адрес: Russian Federation
По умолчанию 10.01.2013, 20:59

Извините, вам принципиально нужно написать это на древнем Visual C++ ?
Ответить с цитированием
  (#3 (permalink)) Старый
volk volk вне форума
Новичок
 
Сообщений: 4
Сказал(а) спасибо: 1
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 16.12.2012
По умолчанию 10.01.2013, 21:25

к сожалению да(
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите пожалуйста angelochek7 Pascal 0 08.05.2012 21:15
помогите пожалуйста Низами DHTML, JavaScript, VBScript 3 17.04.2012 12:25
помогите пожалуйста! maksim401 Pascal 1 15.01.2012 23:30
Помогите, пожалуйста zEROma Pascal 1 09.01.2012 18:43
Пожалуйста помогите! XzhenekX Любые вопросы от новичков 4 07.01.2012 18:46
Помогите , пожалуйста ! Cap.Price Память 1 29.10.2011 12:29
Помогите пожалуйста! Cote_D_Or Любые вопросы от новичков 17 20.06.2011 13:17
ПОМОГИТЕ ПОЖАЛУЙСТА! РУЗАНА Pascal 0 12.06.2011 20:24
Помогите пожалуйста!!! vikulja Pascal 6 19.10.2010 17:51
помогите пожалуйста PHP/Sql imported_ti_ PHP 0 18.08.2010 09:54
помогите пожалуйста sovsem_ novichok Prolog 1 13.07.2010 21:16
Помогите пожалуйста Irina19952008 Подбор комплектующих 7 22.01.2009 00:48



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов