char * o_file(char *filename)
{
char *result="";
FILE *f;
f = fopen(filename, "r");
if (f!= 0 )
{
char ch;
fseek(f, 0, SEEK_SET);
while (!feof(f) && ch != '\n' && ch != '\r')
{
ch = fgetc(f);
if ( ch != '\n' && ch != '\r' && !feof(f)) result+=ch;
};
return(result);
}
else
{
AfxMessageBox("Error: File not found",MB_OK | MB_ICONSTOP,0);
return("Error: File not found");
};
fclose(f);
};
проблема с отображением текста в CStatic
Функция
Код:
вызывается при создании CStatic:
Код:
CMainWnd::CMainWnd()
{
CRect rcwin(20,10,420,60), rcstat(30,10,110,70);
Create(NULL, "Test program" , WS_CAPTION | WS_SYSMENU | SBS_SIZEBOX,rcwin, NULL,NULL);
MyStatic = new CStatic();
if (MyStatic!=NULL) MyStatic->Create(o_file(filename),WS_CHILD|WS_VISIBLE|SS_CENTER, rcstat,this);
};
{
CRect rcwin(20,10,420,60), rcstat(30,10,110,70);
Create(NULL, "Test program" , WS_CAPTION | WS_SYSMENU | SBS_SIZEBOX,rcwin, NULL,NULL);
MyStatic = new CStatic();
if (MyStatic!=NULL) MyStatic->Create(o_file(filename),WS_CHILD|WS_VISIBLE|SS_CENTER, rcstat,this);
};
Но не работает так, как хотелось бы. Вместо латинских букв на CStatic появляется что-то вроде:
Как можно поправить ситуацию?
ЗЫ Большая просьба - ответы пояснять кодом, а код - по мере возможности, подробными пояснениями...
в строчке result+=ch;
а не добавление нового символа.
Надо либо выделять память под текст заранее
например:
...
result = new char[n];
...
result = ch;
...
либо пользоваться классами для работы с текстом, например вот так:) :
Код:
CString o_file(char *filename)
{
CString result="";
FILE *f = fopen(filename, "r");
if(f!=0){
char ch;
fseek(f,0,SEEK_SET);
do{
ch = fgetc(f);
if(ch != '\n' && ch != '\r' && !feof(f))
result+=ch;
}
while(!feof(f) && ch != '\n' && ch != '\r');
return result;
}
else {
AfxMessageBox("Error: File not found",MB_OK | MB_ICONSTOP,0);
return("Error: File not found");
}
fclose(f);
};
{
CString result="";
FILE *f = fopen(filename, "r");
if(f!=0){
char ch;
fseek(f,0,SEEK_SET);
do{
ch = fgetc(f);
if(ch != '\n' && ch != '\r' && !feof(f))
result+=ch;
}
while(!feof(f) && ch != '\n' && ch != '\r');
return result;
}
else {
AfxMessageBox("Error: File not found",MB_OK | MB_ICONSTOP,0);
return("Error: File not found");
}
fclose(f);
};
Спасибо огромное!!! Понял и исправил - все работает! :)