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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2011, 19:19   #1
Neolit1819
Пользователь
 
Регистрация: 28.03.2011
Сообщений: 51
По умолчанию консольное приложение в MFC.

Доброго дня уважаемые кодеры. Собственно прошу помоч с задачей по переводу консольной программы в MFC приложение. Консольная программа выводит инфу об указанном BMP файле.
Код:
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <tchar.h>

using namespace std;

class WorkToBMP {
public : 
	
	BITMAPFILEHEADER bmfHeader; //заголовок файла
	BITMAPINFOHEADER bmiHeader; // структура файла
	HANDLE FileHandle;//файл для записи BMP
	DWORD bf,bf1;

	void openfile(const wchar_t* filepath)  
	{ 
	  FileHandle=CreateFile(filepath,GENERIC_READ |
      GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING,
	  FILE_ATTRIBUTE_NORMAL, 0);
	  if(INVALID_HANDLE_VALUE == FileHandle){
		  cout  <<" File  "<<filepath<< " not find"; exit (1);}
	}

	    
	void closefile()
	{ CloseHandle(FileHandle);}

	void scanfile()
	{
		 // читаем заголовок файла
   if (!(ReadFile(FileHandle,&bmfHeader,sizeof(bmfHeader),&bf,NULL) )) {
	   fputs( "Eror header reads",stderr );
	   cout << GetLastError();
	
       exit(2) ;
   }
         // читаем структура файла
    if (!(ReadFile(FileHandle,&bmiHeader,sizeof(bmiHeader),&bf1,NULL) )) {
	   fputs( "Error read info header",stderr ); 
	   cout << GetLastError();
       exit(2) ;
   }
 
  


   printf( "Size = %d bytes\n", bmfHeader.bfSize ) ; // выводим размер
   printf( "Width = %d\n", bmiHeader.biWidth ) ;     //ширину 
   printf( "Height = %d\n", bmiHeader.biHeight ) ;   //и высоту изображения
	}
};


int _tmain(int argc, CHAR* argv[]) 
{
	WorkToBMP myBMP;
 
	myBMP.openfile(L"C:\\2.bmp"); 
	myBMP.scanfile();
	myBMP.closefile();
	return 0;
}
Код рабочий.
Для решения создал программу имеющию такой интерфейс




Обработчик по щелчку кнопки обзор
Код:
void CMFC_BMP_READDlg::OnBnClickedButtonOpen()
{
		UpdateData(TRUE);  //Обновить переменные
     	CFileDialog fDialog(TRUE); // Открываем диалогове окно с выбором файла
                fDialog.DoModal(); 
				m_EDIT_FILE = fDialog.GetFileName(); //Заносим выбранное значение в переменную отвечающию за путь файла 
    UpdateData(FALSE);            
}
Далее далее переношу из консольного вариант созданный мной класс
Код:
class WorkToBMP {
public : 
	
	BITMAPFILEHEADER bmfHeader; //заголовок файла
	BITMAPINFOHEADER bmiHeader; // структура файла
	HANDLE FileHandle;//файл для записи BMP
	DWORD bf,bf1;

	void openfile(const wchar_t* filepath)  
	{ 
	  FileHandle=CreateFile(filepath,GENERIC_READ |
      GENERIC_WRITE, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING,
	  FILE_ATTRIBUTE_NORMAL, 0);
	  if(INVALID_HANDLE_VALUE == FileHandle)
		Error = "File not find ";  //присваиваю глобальной переменной сообщение об ошибке
         
	}

	    
	void closefile()
	{		CloseHandle(FileHandle);	}

	void scanfile()
	{
		 // читаем заголовок файла
   if (!(ReadFile(FileHandle,&bmfHeader,sizeof(bmfHeader),&bf,NULL) )) 
	  Error = "Eror header reads  "+ GetLastError(); //присваиваю глобальной переменной сообщение об ошибке
	  
  
         // читаем структура файла
    if (!(ReadFile(FileHandle,&bmiHeader,sizeof(bmiHeader),&bf1,NULL) )) 
	   Error = "Eror info reads  "+ GetLastError(); //присваиваю глобальной переменной сообщение об ошибке


  /*             Присваиваем глобальным значениям полученные данные 
     
   Size  =   bmfHeader.bfSize;      
   Width =  bmiHeader.biWidth;     
   Height= bmiHeader.biHeight ;   
	*/
	}
	
};
с изменениями в обработчике ошибок, а так же присваиваю глобальным переменным получинную инфу о файле. Данный отрезок я закоментил, так как не знаю как сделать корректное преобразование. Пробывал itoa но не то. может нужно скорректировать типы данных, счас глобальные переменные Size,Width,Height имеют тип CString, а данные формата - DWORD bfSize;
LONG biWidth;
LONG biHeight
Ну и на последок в обработчике Кнопки Узнать следующий код
Код:
WorkToBMP MyBMP;

	MyBMP.openfile(m_EDIT_FILE); 
	MyBMP.scanfile();
	MyBMP.closefile();
	
	UpdateData(TRUE);  //Обновить переменные
	// присвоим значение глобальных переменных
	m_STATIC_SIZE   = Size;  
	m_STATIC_Width  = Width;
	m_STATIC_Height = Height;
	m_ERROR = Error;  
	UpdateData(FALSE); //закончим обновленние данных
Соответвенно из за закоментированного участка и возможно еще прочих ошибок, программа не выполняет должных функций.
Neolit1819 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Консольное приложение Horus92 Общие вопросы C/C++ 4 10.12.2010 09:45
Консольное приложение shock-in Общие вопросы Delphi 2 19.12.2009 22:03
Консольное приложение a_priori Общие вопросы Delphi 6 12.03.2008 08:33
Консольное приложение eks-s Общие вопросы Delphi 17 25.01.2008 03:12
Консольное приложение MAcK Общие вопросы Delphi 2 03.12.2006 18:28