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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.02.2011, 18:46   #1
Phontan
Новичок
Джуниор
 
Регистрация: 27.02.2011
Сообщений: 1
Подмигивание Считывание из файла WIN32 API

Я пишу программу на C + + win32 api, и мне нужно читать из файла текст. Но там несовместимость кодирования. Пишу методы которые я использовал, и скажите как их исправить.

Код:
#include<windows.h>
#include<vector>
#include<string>
#include<fstream>
#include<tchar.h>
using namespace std;
class KDocument
{
private:
	vector<string> lines;
public:
	int cxChar;
	int yStep;
	int lineLenMax;
	SCROLLINFO vsi;
	int vertRange;
	SCROLLINFO hsi;
	int horzRange;
	BOOL Open(const char* file)
	{
		ifstream finp(file);
		char buf[300];
		if(!finp.good())
		{
			MessageBox(NULL, _T("Cannot found file"), _T("ERROR"), MB_OK);
			return false;
		}
		while(!finp.eof())
		{
			finp.getline(buf, 299);
			buf[199]=0;
			lines.push_back(string(buf));
		}
		return TRUE;
	}
	void Initialize(LPTEXTMETRIC tm)
	{
		cxChar=tm->tmAveCharWidth;
		yStep=tm->tmHeight+tm->tmExternalLeading;
		vsi.nMin=vsi.nPos=0;
		hsi.nMin=hsi.nPage=0;
	}
	void ScrollSettings(HWND hWnd, int width, int height)
	{
		vsi.cbSize=sizeof(vsi);
		vsi.fMask=SIF_RANGE | SIF_PAGE | SIF_POS;
		vsi.nPage=height/yStep-1;
		vsi.nMax=lines.size()-1;
		if(vsi.nPage>vsi.nMax)
			vsi.nPos=vsi.nMin;
		vertRange=vsi.nMax-vsi.nMin+1;
		SetScrollInfo(hWnd, SB_VERT, &vsi, TRUE);
		hsi.cbSize=sizeof(SCROLLINFO);
		hsi.fMask=SIF_RANGE | SIF_PAGE | SIF_POS;
		hsi.nPage=width/cxChar-2;
		hsi.nMax=lineLenMax;
		if(hsi.nPage>hsi.nMax)
			hsi.nPos=hsi.nMin;
		horzRange=hsi.nMax-hsi.nMin+1;
		SetScrollInfo(hWnd, SB_HORZ, &hsi, TRUE);
	}
	void UpdateVsroll(HWND hWnd, int yInc)
	{
		yInc=min(yInc, vertRange-(int)vsi.nPage-vsi.nPos);
		yInc=max(yInc, vsi.nMin-vsi.nPos);
		if(yInc)
		{
			ScrollWindow(hWnd, 0, -yStep*yInc, NULL, NULL);
			vsi.nPos+=yInc;
			SetScrollInfo(hWnd, SB_VERT, &vsi, TRUE);
			InvalidateRect(hWnd, NULL, TRUE);
			UpdateWindow(hWnd);
		}
	}
	void UpdateHscroll(HWND hWnd, int xInc)
	{
		xInc=min(xInc, horzRange-(int)hsi.nPage-hsi.nPos);
		xInc=max(xInc, hsi.nMin-hsi.nPos);
		if(xInc)
		{
			ScrollWindow(hWnd, -cxChar* xInc, 0, NULL, NULL);
			hsi.nPos+-xInc;
			SetScrollInfo(hWnd, SB_HORZ, &hsi, TRUE);
			InvalidateRect(hWnd, NULL, TRUE);
			UpdateWindow(hWnd);
		}
	}
	void PutText(HWND hWnd, HDC hdc)
	{
		RECT rect;
		GetClientRect(hWnd, &rect);
		rect.left+=cxChar;
		rect.right-=cxChar;
		HRGN hRgn=CreateRectRgnIndirect(&rect);
		SelectClipRgn(hdc, hRgn);
		int x=cxChar*(hsi.nMin-hsi.nPos+1);
		int y=yStep;
		int amountLines=lines.size();
		int iBeg=vsi.nPos;
		int iEnd=(vsi.nPos+vsi.nPage<amountLines)? vsi.nPos+vsi.nPage : amountLines;
		for(int i=iBeg; i<iEnd; ++i)
		{
			int iTabPos=lines[i].find('\t');
			if(-1==iTabPos)
				TextOut(hdc, x, y,(LPCWSTR)lines[i].c_str(), 300);
			else 
				TabbedTextOut(hdc, x, y,(LPCWSTR)lines[i].c_str(), lines[i].size(), 0, 0, x);
			y+=yStep;
		}
		SelectClipRgn(hdc, NULL);
	}
}

Последний раз редактировалось Stilet; 27.02.2011 в 19:04.
Phontan вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа в Win32 API Ko3blpb Помощь студентам 0 05.01.2011 20:35
win32 API.Visual Studio 2008.Создание проекта Win32 Aleksandr_Yanov Visual C++ 2 12.09.2010 13:09
Win32 API. VS2008. Как создать приложение win32 в vs2008? Aleksandr_Yanov Visual C++ 4 12.09.2010 00:59
Win32 Api revaldo666 Win Api 10 06.07.2010 00:48
Win32 Api! alexov Общие вопросы C/C++ 7 09.02.2009 22:25