Вопрос по C++
- NiGHt-LEshiY
- Полковник
- Сообщения: 10258
- Зарегистрирован: 13.06.2008
- Откуда: Россия
- Благодарил (а): 752 раза
- Поблагодарили: 2667 раз
- Контактная информация:
Ох.. переходить к графике, не выучив языка..
Прозреваю кривые, но побрякушестые приложения в скором будущем.
Прозреваю кривые, но побрякушестые приложения в скором будущем.
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.
Просьба присылать сообщения об ошибках в ЛС.
- GanGSISoft
- Полковник
- Сообщения: 1430
- Зарегистрирован: 27.03.2008
- Откуда: Бацькаўшчына
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
- Контактная информация:
NiGHt-LEshiY
Не волнуйся, ты и остальные их не увидите.
Просто хочу попробовать, кое чего сделать для себя, а там со временем и опыт, и знания придут. И тогда и со всем своим опытом и знаниями, накопленными годами, сделаю графическое приложение, и покажу общественности. :-)
Не волнуйся, ты и остальные их не увидите.
Просто хочу попробовать, кое чего сделать для себя, а там со временем и опыт, и знания придут. И тогда и со всем своим опытом и знаниями, накопленными годами, сделаю графическое приложение, и покажу общественности. :-)
- NiGHt-LEshiY
- Полковник
- Сообщения: 10258
- Зарегистрирован: 13.06.2008
- Откуда: Россия
- Благодарил (а): 752 раза
- Поблагодарили: 2667 раз
- Контактная информация:
GanGSISoft
Лучше сделай консольное.. Так больше народу сможет его использовать.
И выложи под GPL или BSD.
Лучше сделай консольное.. Так больше народу сможет его использовать.
И выложи под GPL или BSD.
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.
Просьба присылать сообщения об ошибках в ЛС.
- GanGSISoft
- Полковник
- Сообщения: 1430
- Зарегистрирован: 27.03.2008
- Откуда: Бацькаўшчына
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
- Контактная информация:
NiGHt-LEshiY
шо? я просто пошутил, ничего глобального на много лет не замыслил(просто очередная бесполезная побрикушка для себя, которая поможет мне лучше освоить C++), просто хочу знать, есть ли там canvas или что-то подобное, или как то по другому можно рисовать.
Добавлено спустя 29 минут 45 секунд:
Вроде рахобрался, но вот уже общий вопрос по C
Объявил переменную System::Drawing::Rectangle a;, она составная,(ещё вопрос правильно ли я её объявил)
как мне изменить её характеристики, Код
a::top
a->top
выдаёт ошибку
шо? я просто пошутил, ничего глобального на много лет не замыслил(просто очередная бесполезная побрикушка для себя, которая поможет мне лучше освоить C++), просто хочу знать, есть ли там canvas или что-то подобное, или как то по другому можно рисовать.
Добавлено спустя 29 минут 45 секунд:
Вроде рахобрался, но вот уже общий вопрос по C
Объявил переменную System::Drawing::Rectangle a;, она составная,(ещё вопрос правильно ли я её объявил)
как мне изменить её характеристики, Код
a::top
a->top
выдаёт ошибку
- NiGHt-LEshiY
- Полковник
- Сообщения: 10258
- Зарегистрирован: 13.06.2008
- Откуда: Россия
- Благодарил (а): 752 раза
- Поблагодарили: 2667 раз
- Контактная информация:
Ты целиком код дай. Объявление, присваивание... Всё-всё.
Кодекс поведения участников сообщества — обязательно к прочтению.
Просьба присылать сообщения об ошибках в ЛС.
Просьба присылать сообщения об ошибках в ЛС.
- GanGSISoft
- Полковник
- Сообщения: 1430
- Зарегистрирован: 27.03.2008
- Откуда: Бацькаўшчына
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
- Контактная информация:
Код: Выделить всё
System::Drawing::Bitmap ^bmp;//тут кстати тоже сомневаюсь что правильно, без знака ^ не компилировалось, new, gcnew тоже не работает
//----- тут будте загрузка изображения в переменную, или генерация его в программе
System::Drawing::Rectangle a;
//Ни одно из 3-х не работает.
a::Top=1;
a->Top=1;
a.Top=1;
Form1::pictureBox1->DrawToBitmap(bmp,a);
Последний раз редактировалось GanGSISoft 16.09.2010, 21:37, всего редактировалось 1 раз.
Из мсдн:
может чем поможет.
Хотя, имхо, если уж писать на C++, то тогда смысл использовать .NET классы? Используй WinAPI.
А если хочется .NET, то лучше на C# - он более понятно устроен (тоже имхо).
Код: Выделить всё
private:
Bitmap^ image1;
void Button1_Click( System::Object^ /*sender*/, System::EventArgs^ /*e*/ )
{
try
{
// Retrieve the image.
image1 = gcnew Bitmap( "C:\\Documents and Settings\\All Users\\"
"Documents\\My Music\\music.bmp",true );
int x;
int y;
// Loop through the images pixels to reset color.
for ( x = 0; x < image1->Width; x++ )
{
for ( y = 0; y < image1->Height; y++ )
{
Color pixelColor = image1->GetPixel( x, y );
Color newColor = Color::FromArgb( pixelColor.R, 0, 0 );
image1->SetPixel( x, y, newColor );
}
}
// Set the PictureBox to display the image.
PictureBox1->Image = image1;
// Display the pixel format in Label1.
Label1->Text = String::Format( "Pixel format: {0}", image1->PixelFormat );
}
catch ( ArgumentException^ )
{
MessageBox::Show( "There was an error."
"Check the path to the image file." );
}
}
Хотя, имхо, если уж писать на C++, то тогда смысл использовать .NET классы? Используй WinAPI.
А если хочется .NET, то лучше на C# - он более понятно устроен (тоже имхо).
- GanGSISoft
- Полковник
- Сообщения: 1430
- Зарегистрирован: 27.03.2008
- Откуда: Бацькаўшчына
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
- Контактная информация:
Lev2008
Спасибо может и поможет. И как использовать API для этого?
Еще вопрос. В совсем простой программе функции написаные мной работают нормально. А вот в более сложной вылетают. Если переменную объявить как char *s=new char; то вылетает при объявлении, если через char s[200] то всё нормально. Вылетает еще на закрытии файла. И пишет что неверный указатель 0хсссссс...
Я так понял что у меня что то с памятью в программе, всякие надо наверное применять memset и malloc, вот только где и как не знаю. И что еще делать.
Спасибо может и поможет. И как использовать API для этого?
Еще вопрос. В совсем простой программе функции написаные мной работают нормально. А вот в более сложной вылетают. Если переменную объявить как char *s=new char; то вылетает при объявлении, если через char s[200] то всё нормально. Вылетает еще на закрытии файла. И пишет что неверный указатель 0хсссссс...
Я так понял что у меня что то с памятью в программе, всякие надо наверное применять memset и malloc, вот только где и как не знаю. И что еще делать.
В C++ ты должен сам следить за временем жизни объектов.
char * это указатель. Его задача лишь содержать адрес на строку. Чтобы это стало строкой, соответственно, надо выделить под неё память и поместить адрес в указатель. И потом следить чтобы не выходить за границу выделенной памяти.
char *s = new char[200];
s[0] = 0;
char * это указатель. Его задача лишь содержать адрес на строку. Чтобы это стало строкой, соответственно, надо выделить под неё память и поместить адрес в указатель. И потом следить чтобы не выходить за границу выделенной памяти.
char *s = new char[200];
s[0] = 0;
Последний раз редактировалось $t@t!c_V()1D 18.09.2010, 23:09, всего редактировалось 2 раза.
Причина: Подчёркнутое: урок ты так и не извлёк..
Причина: Подчёркнутое: урок ты так и не извлёк..
- GanGSISoft
- Полковник
- Сообщения: 1430
- Зарегистрирован: 27.03.2008
- Откуда: Бацькаўшчына
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
- Контактная информация:
Lev2008
и так тоже самое.
Эта функция работала в других программах, а вот именно в этой не хочет, такое ощущение, что в процессе работы что-то приводит к нестабильности программы, вообще объявление переменной char *s=new char; в любой функции вставленой в эту программу приводит к вылету.
Ещё закрытие файла тоже стало вылетать с такой ошибкой.
и так тоже самое.
Эта функция работала в других программах, а вот именно в этой не хочет, такое ощущение, что в процессе работы что-то приводит к нестабильности программы, вообще объявление переменной char *s=new char; в любой функции вставленой в эту программу приводит к вылету.
Ещё закрытие файла тоже стало вылетать с такой ошибкой.
хДДД$t@t!c_V()1D писал(а):Подчёркнутое: урок ты так и не извлёк..
Это уже переход на личности, который мне совсем не нужен.
Для всех функций работы со строками, строки должны иметь завершающий ноль. На то, что содержится дальше в буфере, им абсолютно пофигу.
GanGSISoft
Давай куски кода побольше. Потому что зачем тебе указатель на единственный символ совершенно непонятно.
- GanGSISoft
- Полковник
- Сообщения: 1430
- Зарегистрирован: 27.03.2008
- Откуда: Бацькаўшчына
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
- Контактная информация:
Код: Выделить всё
#include "stdafx.h"
#include "..\functions.h"
char* RusAnsiiToDos(char *buf)
{
///А -128 Я -97
///а -96 п -81
///р -32 я -17
char *res=new char;
memset(res,0,140);
int l,i;
l=strlen(buf);
for(i=0;i<=l;i++){
if(buf[i]<0){
res[i]=buf[i]-64;
}if(buf[i]>'п'){res[i]=buf[i]-16;}
}
res[i-1]=0;
return res;
}
int _tmain(int argc, _TCHAR* argv[])
{
char *fb2_fn=new char;
wchar_t *fb2_fn_w=new wchar_t;
char fn[256]="d:\\temp\\bobik.fb2";
FILE *fp;
char *buf=new char;
char bc=0;
int i=0;
int fs;
printfln("Open File: ",fn,"(y/n)?");
char ans;
ans=getchar();
if(ans=='y'){
fopen_s(&fp,fn,"r");
if(fp==NULL){printfln("Error: File not Found");}else{
//Opening file
fs=_filelength(_fileno(fp));
while(ftell(fp)<fs-1){
while(bc!='\n'){
bc=fgetc(fp);
buf[i]=bc;
i++;
}
buf[i]='\0';
if(pos("<first-name>",buf)!=0){fb2_fn=xml_GetParamFromStr("<first-name>",buf);}
bc=0;
i=0;
buf[0]=0;
}
fclose(fp);
size_t* tmp23=new size_t;
mbstowcs_s(tmp23,fb2_fn_w,40,fb2_fn,255);
wchar_t *fnw=new wchar_t;
wchar_t *nfnw=new wchar_t;
mbstowcs_s(tmp23,fnw,190,fn,255);
nfnw[0]=0;
mbstowcs_s(tmp23,nfnw,190,"d:\\temp",255);
wcscat_s(nfnw,255,L"\\");
wcscat_s(nfnw,255,fb2_fn_w);
wcscat_s(nfnw,255,L".fb2");
MoveFile(fnw,nfnw);
//printf(RusAnsiiToDos(fb2_fn));
printf(RusAnsiiToDos("лололо"));//тут должна быть строка что выше, лололо это для теста,
}
}
pause();
exit(0);
return 0;
}
- $t@t!c_V()1D
- Разработчик
- Сообщения: 2639
- Зарегистрирован: 06.12.2007
- Благодарил (а): 10 раз
- Поблагодарили: 29 раз
Lev2008
Если ты не писал ничего сложнее калькулятора, то тебе и не понять разницы. Я тебе сообщаю, что ты отрезаешь нулём в самом начале массива символов, когда это же самое начало скорее всего будет перезаписано. Куда потом твой ноль денется? "Сдвинется"?
GanGSISoft
Б-же, зачем "RusAnsiiToDos" если прога не претендует на кроссплатформенность? Можно в начале программы вставить и не забыть про <windows.h>
И лучше делать printf("%s", "лололо"); - так МелкоМягкие рекомендуют.
Если ты не писал ничего сложнее калькулятора, то тебе и не понять разницы. Я тебе сообщаю, что ты отрезаешь нулём в самом начале массива символов, когда это же самое начало скорее всего будет перезаписано. Куда потом твой ноль денется? "Сдвинется"?
GanGSISoft
Б-же, зачем "RusAnsiiToDos" если прога не претендует на кроссплатформенность? Можно в начале программы вставить
Код: Выделить всё
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
И лучше делать printf("%s", "лололо"); - так МелкоМягкие рекомендуют.
Another guy on them internets
Уважайте команду CSMania.RU - задавайте вопросы правильно!
Уважайте команду CSMania.RU - задавайте вопросы правильно!
- GanGSISoft
- Полковник
- Сообщения: 1430
- Зарегистрирован: 27.03.2008
- Откуда: Бацькаўшчына
- Благодарил (а): 2 раза
- Поблагодарили: 3 раза
- Контактная информация:
$t@t!c_V()1D
Ну тогда другая функция будет глючить
Если у этой функции убрать всё тело оставить, то всё равно вылетает
Вот непонятно почему не хочет объявлять в функциях так именно в этой программе
Добавлено спустя 1 минуту 23 секунды:
И как в C присваивать значения "веткам" переменных, вот если есть переменная, а у неё ещё продолжения top, left, вот как top изменить. В Delphi это делается через точку, и как объявлять такие переменные, в pascal это было вида
Ну тогда другая функция будет глючить
Если у этой функции убрать всё тело оставить, то всё равно вылетает
Код: Выделить всё
char *res=new char;
memset(res,0,140);
res[0]=0;
return res;
Добавлено спустя 1 минуту 23 секунды:
И как в C присваивать значения "веткам" переменных, вот если есть переменная, а у неё ещё продолжения top, left, вот как top изменить. В Delphi это делается через точку, и как объявлять такие переменные, в pascal это было вида
Код: Выделить всё
var a=record
top:byte;
left:byte;
end;
Последний раз редактировалось GanGSISoft 19.09.2010, 17:43, всего редактировалось 1 раз.
- $t@t!c_V()1D
- Разработчик
- Сообщения: 2639
- Зарегистрирован: 06.12.2007
- Благодарил (а): 10 раз
- Поблагодарили: 29 раз
Если я тебя правильно понял, то этоGanGSISoft писал(а):И как в C присваивать значения "веткам" переменных, вот если есть переменная, а у неё ещё продолжения top, left, вот как top изменить. В Delphi это делается через точку, и как объявлять такие переменные, в pascal это было вида
И ещё мои поздравления, у тебя утечка памяти:
ты объявляешь : char *res=new char;
но не высвобождаешь.
Я сегодня добрый:
Код: Выделить всё
#include "stdafx.h"
#include "..\functions.h"
#include <windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
SetConsoleOutputCP(1251);
SetConsoleCP(1251);
char *fb2_fn=new char; //you're allocating a variable, but NOT an array
wchar_t *fb2_fn_w=new wchar_t;
char fn[256]="d:\\temp\\bobik.fb2";
FILE *fp;
char *buf=new char; //you're allocating a variable, but NOT an array
char bc=0;
int i=0;
int fs;
printfln("Open File: ",fn,"(y/n)?");
char ans;
ans=getchar();
if(ans=='y')
{
//Opening file
fopen_s(&fp,fn,"r");
if(fp==NULL)
{
printf("Error: File not Found\n");
else
{
fs=_filelength(_fileno(fp));
while(ftell(fp)<fs-1)
{
while(bc!='\n')
{
bc=fgetc(fp);
buf[i]=bc;
i++;
}
buf[i]='\0';
if(pos("<first-name>",buf)!=0)
{
fb2_fn=xml_GetParamFromStr("<first-name>",buf);
}
bc=0;
i=0;
buf[0]=0;
}
fclose(fp);
size_t* tmp23=new size_t;
mbstowcs_s(tmp23,fb2_fn_w,40,fb2_fn,255);
wchar_t *fnw=new wchar_t;
wchar_t *nfnw=new wchar_t;
mbstowcs_s(tmp23,fnw,190,fn,255);
nfnw[0]=0;
mbstowcs_s(tmp23,nfnw,190,"d:\\temp",255);
wcscat_s(nfnw,255,L"\\");
wcscat_s(nfnw,255,fb2_fn_w);
wcscat_s(nfnw,255,L".fb2");
MoveFile(fnw,nfnw);
printf(RusAnsiiToDos(fb2_fn));
}
}
pause();
exit(0);
return 0;
}
Код: Выделить всё
char *bla=new char; // a pointer to 1 char holder variable
char *res=new char[140]; // a 140-byte array
memset(res,0,140);
res[0]=0;
return res;
Another guy on them internets
Уважайте команду CSMania.RU - задавайте вопросы правильно!
Уважайте команду CSMania.RU - задавайте вопросы правильно!