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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2012, 16:28   #1
feniksss
 
Регистрация: 07.10.2012
Сообщений: 8
По умолчанию Программа просмотра текстовых файлов

Код:
#include <commdlg.h>
#include <fstream>
#include <vector>
#include <string>
#include <commctrl.h>

TBBUTTON tbb[] =
{
{STD_FILENEW, ID_FILE_NEW, TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, 0},
{STD_FILEOPEN, ID_FILE_OPEN,TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, 0},
{STD_FILESAVE, ID_FILE_SAVE,TBSTATE_ENABLED, TBSTYLE_BUTTON, 0, 0, 0, 0}
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	HDC hdc;
	static TCHAR name[256] = _T("");;
	static OPENFILENAME file;
	std::ifstream in;
	std::ofstream out;
	static std::vector<std::string> v;
	std::vector<std::string>::iterator it;
	std::string st;
	int y, k;
	static int n,lengt,sx,sy,cx,iVscrollPos,iHscrollPos,COUNT,MAX_WIDTH;
	static SIZE size = {8, 16 };
	static HWND hWndToolBar;
	static int size_Toolbar;
	RECT rt;
	static LOGFONT if;
	static CHOOSEFONT cf;
	static HFONT hfont;
	TEXTMETRIC tm;
	switch (message)
	{
		case WM_CREATE:
			file.lStructSize = sizeof(OPENFILENAME);
			file.hInstance = hInst;
			file.lpstrFilter = _T("Text .txt\0 *.txt\0Все файлы\0 *.*");
			file.lpstrFile = name;
			file.nMaxFile = 256;
			file.lpstrInitialDir = _T(".\\");
			file.lpstrDefExt = _T("txt");
			hWndToolBar = CreateToolbarEx(hWnd,WS_CHILD|WS_VISIBLE|CCS_TOP,1,0,HINST_COMMCTRL,IDB_STD_SMALL_COLOR,tbb,3,0,0,0,0,sizeof(TBBUTTON));
			cf.lStructSize = sizeof(CHOOSEFONT);
			cf.hwndOwner = hWnd;
			cf.lpLogFont = &lf;
			break;
		case WM_SIZE:
			sx = LOWORD(lParam);
			sy = HIWORD(lParam);
			k = n - (sy - size_Toolbar)/size.cy;
			if (k > 0) COUNT = k; else COUNT = iVscrollPos = 0;
			SetScrollRange(hWnd, SB_VERT, 0, COUNT, FALSE);
			SetScrollPos (hWnd, SB_VERT, iVscrollPos, TRUE);
			k = length - sx/size.cx;
			if (k > 0) MAX_WIDTH = k; else MAX_WIDTH = iHscrollPos = 0;
			SetScrollRange(hWnd, SB_HORZ, 0, MAX_WIDTH, FALSE);
			SetScrollPos(hWnd, SB_HORZ, iHscrollPos, TRUE);
			SendMessage(hWndToolBar, TB_AUTOSIZE, 0, 0);
			GetWindowRect(hWndToolBar, &rt);
			size_Toolbar = rt.bottom - rt.top;
			break;
		case WM_HSCROLL:
			switch(LOWORD(wParam))
			{
			case SB_LINEUP : iHscrollPos--; break;
			case SB_LINEDOWN : iHscrollPos++; break;
			case SB_PAGEUP : iHscrollPos -= 8; break;
			case SB_PAGEDOWN : iHscrollPos += 8; break;
			case SB_THUMBPOSITION : iHscrollPos = HIWORD(wParam); break;
			}
			iHscrollPos = max(0, min(iHscrollPos, MAX_WIDTH));
			if (iHscrollPos != GetScrollPos(hWnd, SB_HORZ))
			{
				SetScrollPos(hWnd, SB_HORZ, iHscrollPos, TRUE);
				InvalidateRect(hWnd, NULL, TRUE);
			}
		break;
		case WN_COMMAND:
			switch (LOWORD(wParam))
			{
			case ID_FILE_NEW :
				if ((v.empty()) std::vector<std::string>(),swap(v); // возможна ошибка
				n = length = 0;
				SendMessage(hWnd,NULL,TRUE);
				break;
			case ID_FILE_OPEN:
				file.lpstrTitle = _T("Открыть файл для чтения");
				file.Flags = OFN_HIDEREADONLY;
				in.open(name);
				while (getline(in,st))
				{
					if (length < st.length()) length = st.length();
					v.push_back(st);
				}
				in.close();
				n = v.size();
				SendMessage(hWnd, WM_SIZE, 0, sy << 16 | sx);
				InvalidateRect(hWnd,NULL,l);
				break;
			case ID_FILE_SAVE:
				file.lpstrTitle = _T("Открыть файл для записи");
				file.Flags = OFN_NOTESTFILECREATE;
				if (!GetSaveFileName(&file)) return 1;
				out.open(Name);
				for (it = v.begin(); it != v.end(); ++it) out << *it <<'\n';
				out.close();
				break;
			case ID_FONT :
				if(ChooseFont(&cf))
				{
					if(hfont) DeleteObject(hfont);
					hfont = CreateFontIndirect(&lf);
					hdc = GetDC(hWnd);
					SelectObject(hdc, hfont);
					GetTextMetrics(hdc, &tm);
					size cx = tm.tmAveCharWidth;
					size.cy = tm.tmHeigt + tm.tmExternalLeading;
					ReleaseDC(hWnd, hdc);
					SendMassage(hWnd, WM_SIZE, 0, sy << 16 | sx);
					InvalidateRect(hWnd, NULL, TRUE);
				}
				break;
			case IDM_EXIT: DestroyWindow(hWnd); break;
			default: return DefWindowProc(hWnd, massage, wParam, lParam);
			}
			break;
		case WM_PAINT:
			hdc = BeginPaint(hWnd, &ps);
			if (hfont)
			{
				SelectObject(hdc, hfont);
				SetTextColor(hdc, cf.rgbColors):
			}
			for (y = size_Toolbar, it = v.begin() + iVscrollPos;
				it != v.end() && y < sy; ++it, y += size.cy)
			  if(iHscrollPos < it->length())
				  TabbedTextOutA(hdc, 0, y, it->data()+iHscrollPos, it->length()-iHscrollPos, 0, NULL, 0);
			EndPaint(hWnd, &ps);
			break;
		case WM_DESTROY:
			if (hfont) DeleteObject(hfont);
			PostQuitMassage(0);
			break;
		default: return DefWindowProc(hWnd, massage, wParam, lParam);
	}
	return 0;
}
Помогите исправить ошибки, пожалуйста!
feniksss вне форума Ответить с цитированием
Старый 07.10.2012, 16:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А в чем они заключаются?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.10.2012, 16:34   #3
feniksss
 
Регистрация: 07.10.2012
Сообщений: 8
По умолчанию

error C2065: 'CALLBACK' : undeclared identifier
error C2065: 'LPFNPSPCALLBACKA' : undeclared identifier
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
fatal error C1903: unable to recover from previous error(s); stopping compilation
feniksss вне форума Ответить с цитированием
Старый 07.10.2012, 16:45   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А ты какой тип проекта выбрал?
И потом - где ты этот код взял? Там синтаксических ошибок тьма.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.10.2012, 16:57   #5
feniksss
 
Регистрация: 07.10.2012
Сообщений: 8
По умолчанию

Win32 project, код из книги "Технология программирования на c++"
ну мне выдает только эти 4 ошибки.
а исправить их возможно вообще? очень нужно просто. помогите, если можете.
feniksss вне форума Ответить с цитированием
Старый 07.10.2012, 17:29   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Исправить конечно можно, но нужно это именно тебе и именно ты сам должен понять почему эти ошибки появились.
Тут такой момент - ты хоть и выбрал верный тип проекта, но судя по всему то что предложила среда в качестве шаблона удалил бездумно скопипастив то что выложил в топе, а ведь это только обработчик сообщений окна, но это только часть программы. То ли ты книгу читаешь не внимательно не вдумчиво, то ли книга такая, что не описывает от А до Я.
Создай еще раз простой проект Win32 project и посмотри что IDE тебе предложит в качестве шаблона-кода.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.10.2012, 17:39   #7
feniksss
 
Регистрация: 07.10.2012
Сообщений: 8
По умолчанию

я понимаю что мне, поэтому и спросил с чего начать.
буду перечитывать заново. в любом случае спасибо за подсказку.
feniksss вне форума Ответить с цитированием
Старый 07.10.2012, 18:44   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Шаблон! Изучай шаблон, который тебе предоставит среда, я надеюсь речь идет о VS.
Если да - то программу-оконку она сама готовит, а тебе остается только обработчики перепрограммировать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.10.2012, 23:09   #9
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Попробуйте добавить #include <windows.h> в самом начале.
waleri на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа, удаляющая историю просмотра всех файлов Nadi55 Помощь студентам 2 26.07.2011 06:01
Программа, для просмотра точного размера файлов. Ibanez Wizard Софт 2 26.03.2011 12:56
Программа просмотра PCX файлов Денис999 Помощь студентам 0 29.11.2010 20:53
Программа просмотра PCX-файлов Yana_ Помощь студентам 4 28.11.2010 00:34
Программа просмотра файлов в директории asale Microsoft Office Excel 4 06.01.2009 13:53