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

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

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2013, 20:41   #1
volk-z
Новичок
Джуниор
 
Регистрация: 10.01.2013
Сообщений: 2
По умолчанию Вопрос по mfc приложению

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

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

enum { IDD = IDD_ABOUTBOX };

protected:
virtual void DoDataExchange(CDataExchange* pDX);


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(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::OnBnClickedButton 1)
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::OnIddOpenComDialo g)
END_MESSAGE_MAP()


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_ABOUTBO X);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}


SetIcon(m_hIcon, TRUE); // Крупный значок
SetIcon(m_hIcon, FALSE); // Мелкий значок

return TRUE;
}

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

void Copen_comDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this);

SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafe Hdc()), 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);
}
//начало
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|G ENERIC_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);
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();
}

}
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;

}

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();
}
return;
}

void Copen_comDlg::OnBnCloseClicked()
{
CloseHandle(h);
{
myfile.open ("d:/my_file_name.txt");
myfile<< "port_close";
myfile.close();
}

}
volk-z вне форума Ответить с цитированием
Старый 10.01.2013, 20:49   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,493
По умолчанию

После создания диалога пошлите самому себе нужную комманду, через PostMessage()
waleri вне форума Ответить с цитированием
Старый 10.01.2013, 21:07   #3
volk-z
Новичок
Джуниор
 
Регистрация: 10.01.2013
Сообщений: 2
По умолчанию

PostMessage() нужно использовать перед комментарием начало. Я правильно поняла? (Извините, наверное это очень глупый вопрос)
volk-z вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос чайника о MFC alberio Visual C++ 8 17.09.2011 00:47
Вопрос по Visual C++ 6.0 MFC IsDebuggerPresent Visual C++ 4 14.07.2010 14:20
Создание проекта MFC в VS 2008. Вопрос. spamer Visual C++ 2 28.01.2010 14:25
Вопрос по MFC ds.Dante Visual C++ 2 07.08.2009 11:08
И опять вопрос по MDI-приложению Технолог Общие вопросы Delphi 24 08.05.2008 18:07