|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.01.2013, 20:41 | #1 |
Новичок
Джуниор
Регистрация: 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(); } } |
10.01.2013, 20:49 | #2 |
Старожил
Регистрация: 13.07.2012
Сообщений: 6,331
|
После создания диалога пошлите самому себе нужную комманду, через PostMessage()
|
10.01.2013, 21:07 | #3 |
Новичок
Джуниор
Регистрация: 10.01.2013
Сообщений: 2
|
PostMessage() нужно использовать перед комментарием начало. Я правильно поняла? (Извините, наверное это очень глупый вопрос)
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
вопрос чайника о 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 |