Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по программированию на C/С++

Автор: Abs62
Дата сообщения: 24.10.2011 22:13
G36
А зачем тогда создавать битмап, если уже есть готовый? Почему бы просто не загрузить его в контекст через SelectObject?
Автор: Red Planet
Дата сообщения: 27.10.2011 19:42
Здравствуйте. Как реализовать настройки своего проекта? Есть ли специализированные классы или просто создаем форму с RadioGroup'ами, Checkbox'ами и прочими элементами, которые будем потом использовать для настроек?
Автор: ValidolX
Дата сообщения: 27.10.2011 19:50
настройки своего проекта - у каждого свои
ясное дело что делаем под себя (разве что есть наработки с пред. проектов)
Автор: vkramnik
Дата сообщения: 28.10.2011 07:50
deman_ru
В запросе из Firebird используйте GROUP BY
Автор: Red Planet
Дата сообщения: 29.10.2011 19:40
Здравствуйте! Нужно считать данные из файла, в котором есть пустые строки. На выходе получаем заполненный вектор списков. Как пропустить пустые строки при использовании ifstream?


Цитата:
78
78.2471
80.261
86.1613

78
78.2471
79.9545
83.2786
84.8222
86.6739
89

78
80.261
80.9116
83.2786
84.3941
84.8222
86.1613
89


Должно получиться три списка.

Решено.

Код: ifstream openData;
string curr;
openData.open(openLog->FileName.c_str(), ios::in);

while (getline(openData, curr))
if (curr.length() == 0)
ShowMessage("Empty!");
openData.close();
Автор: Red Planet
Дата сообщения: 30.10.2011 22:21
С задачей, для которой нужно считать данные, не получается. Есть вектор списков, в него и нужно считать. Если встречаем пустую строку, то начинаем заполнять следующий список.

В файле сначала идет поле a объекта класса X, через пробел следует поле b.

Файл.

Цитата:
56 34
78 22
3 9

3 7
89 55

1 5
7 77



Код: #include <vcl>
#include <list>
#include <vector>
#include <iostream>
#include <fstream>

using namespace std;

class X {
public: X(int aa = 1, int bb = 1) : a(aa), b(bb) {}
int a, b;
};

int main() {
vector< list<X> > xl(3, list<X>());
ifstream ifs;
string curr;
ifs.open("file.txt", ios::in);

for (int i = 0; i < xl.size(); ) {
X temp;
ifs >> temp.a >> temp.b;
xl[i].push_back(temp);
// сюда бы нужно вставить условие:
// if (пустая строка) {++i; continue;}
}

ifs.close();

for (int i = 0; i < xl.size(); ++i) {
cout << i+1 << " element." << endl;
for (list<X>::iterator it = xl[i].begin(); it != xl[i].end(); ++it)
cout << it->a << " " << it->b << endl;
cout << endl;
}

system("pause");
return 0;
}
Автор: Master_Profi
Дата сообщения: 31.10.2011 23:36
каким образом можно включить параметр в название окна? например если написать
TEXT("i-ое окно") - запись так и выведется, а мне нужно чтоб было 1-ое, 2-ое и т.д. окно
Win32 api
Автор: Abs62
Дата сообщения: 31.10.2011 23:45
Master_Profi
Смотри описание сишной sprintf или апишной wsprintf.
Автор: bomzzz
Дата сообщения: 01.11.2011 00:01

Цитата:
каким образом можно включить параметр в название окна?

http://vsokovikov.narod.ru/New_MSDN_API/Window/fn_setwindowtext.htm
http://vsokovikov.narod.ru/New_MSDN_API/Window/fn_getwindowtext.htm

Добавлено:
а блин, ты уже вывел - тогда
Цитата:
wsprintf



Добавлено:

Цитата:

.data
form db "окошечко маё № %u", 0

.data?
buffer db 512 dup(?)

invoke wsprintf,ADDR buffer,ADDR form,Number
invoke SetWindowText,hWnd, addr buffer

на Си очень похоже
Автор: Master_Profi
Дата сообщения: 01.11.2011 00:52
bomzzz
и опять вы со своим ассемблеров вновь тут как тут )))
получается мы записывам в буфер необходимую строку, преобразовывая ее с помощью wsprintf ? а потом после преобразования и как раз SetWindowText на подмоге? ну впринципе понятно...надо будет завтра только более внимательно просмотреть в описании wsprintf...но что понял...что не надо ее почему-то использовать...рекомендуется какими-то другими функциями пользоваться... я из предложенных выбрал например StringCbPrintf(), просто скопировал пример оттудого, но не откомпилировалось, потому как саму ф-ю почему-то не распознало...какую надо библиотеку подключить?
Abs62 это к вам тоже)
Автор: bomzzz
Дата сообщения: 01.11.2011 01:01
http://www.vsokovikov.narod.ru/New_MSDN_API/Strings/fn_wsprintf.htm
User32.lib
на ночь глядя тебе и на асме пример пойдет, а завтра напишут тебе на Си. только я ступил - не понял что вопрос в том как строку сформировать, а не вывести.
заменить ее нечем. разве самому собрать строку, если не лень расписывать.

Добавлено:
апи функции жрут много ресурсов пока их вызовешь, они универсальные, а тут надо то один символ из численного значения в символьный перевести, для этого всего то надо 2 такта процессора, прибавть к численному значению 48 и получишь асци код

Добавлено:
универсальные в смысле они умеют все и знак учитывать и куча там примочек, и всю эту мощь обрушивать на такое простое задание - из пушки по воробьям
Автор: Abs62
Дата сообщения: 01.11.2011 07:42
Master_Profi

Цитата:
но что понял...что не надо ее почему-то использовать...рекомендуется какими-то другими функциями пользоваться... я из предложенных выбрал например StringCbPrintf()

Можно и так. Только надо на всякий случай не забывать, что она появилась только в XP SP2. На более ранних системах будут проблемы.

Цитата:
просто скопировал пример оттудого, но не откомпилировалось, потому как саму ф-ю почему-то не распознало...какую надо библиотеку подключить?


Цитата:
Function Information

Header strsafe.h
Import library strsafe.lib

Автор: Master_Profi
Дата сообщения: 01.11.2011 23:18
Abs62 благодарю!! все работает
Автор: tibs
Дата сообщения: 02.11.2011 11:17
Есть вопрос по поводу деструкторов и delete.
Вот класс Студент:

student.h

Код:
#pragma once
#include <iostream>
using namespace std;

class Student
{
private:
    char* name;
public:
    void SetName(const char* name);
    void Show();
public:
    Student(){
        name = new char[30];
        strcpy(name,"Unknown");
    }
    Student(const char* name){
        this->name = new char[strlen(name)];
        strcpy(this->name,name);
    }
    Student(const Student& st){
        name = new char[strlen(st.name)];
        strcpy(name, st.name);
    }
    ~Student(){
        cout << "deleted" << endl;
        delete[] name;
    };
};
Автор: DmitryKz
Дата сообщения: 02.11.2011 13:50
Я работаю в борландовской среде, в основном это Дельфи, иногда Си. Смотрю в сторону Visual C++ (Express) и вот такой вопрос меня интересует:
Где брать библиотеки для этой среды? Ну то есть у Борладна всё просто - ставишь компонент и работаешь с объектами классов, которые в них содержатся.
Как это будет происходить в случае с Visual C++? Конкретнее: нужна библиотека для работы с XML-файлами.
То есть как бы два вопроса: общий и частный...
Автор: Abs62
Дата сообщения: 02.11.2011 18:35
tibs

Цитата:
name = new char[strlen(name)];

Про завершающий ноль не забываем.

Код: name = new char[strlen(name)+1];
Автор: Molniev
Дата сообщения: 02.11.2011 20:56
Как заметил Abs62 с памятью вы напортачили, что намекает: лучше не мешать С и С++. Хотите массивы и связанные списки - используйте структуры & malloc. Хотите классы - используйте stl, в примерно таком ключе:

Код:
#include <vector>
...
    vector<Student> a; /* Земетьте, не через new работа. Если хотите использовать указатели вместо - то через smart_ptr, но большинство задач можно решить так */
    a.push_back(Student("Alex")); /* Добавляем новый элемент в вектор */
    a.push_back(Student("Andrey"));
    for (vector<Student>::iterator i = a.begin(); i != a.end(); i++)
        i->Show(); /* Класический доступ к элементам коллекции */
    for (unsigned int i = 0; i < a.size(); i++)
        a[ i ].Show(); /* С вектором можно работать как с массивом */
    for (auto i = a.begin(); i != a.end(); i++)
        i->Show(); /* С 2010 студии и нового стандарта, слово auto вместо громозкого указания типа */
Автор: karakurt2
Дата сообщения: 06.11.2011 11:55
есть статическая библиотека (LCMS-1.18), собранная с отладочной информацией в файле lcms-1.18_debug_static.pdb. копирую файлы *.lib и *.pdb в катклог, куда указывает перененная окружения LIB. теперь, когда пытаюсь собрать исполнимый файл с учётом этой отладочной информации сборщик весело рапортует о её отсутствии.


Код:
    cmd /c mkdir obj-x86_debug_static
    cl -c -DCRTAPI1=_cdecl -DCRTAPI2=_cdecl -nologo -GS -D_X86_=1 -DWIN32 -D_WIN32 -W3 -D_WINNT -D_WIN32_WINNT=0x0501 -DNTDDI_VERSION=0x05010000 -D_WIN32_IE=0x0600 -DWINVER=0x0501 -Zi -Od -DDEBUG -D_MT -MTd /D_SCL_SECURE_NO_WARNINGS /D_SCL_SECURE_NO_DEPRECATE /D__STDC_WANT_SECURE_LIB__ /D_BIND_TO_CURRENT_VCLIBS_VERSION /D_CRT_SECURE_NO_WARNINGS /I..\include /I..\src /WX /Fdobj-x86_debug_static\testbed.pdb /EHsc /GR /I..\include /WX /Foobj-x86_debug_static\testthread.obj ./testthread.cpp
testthread.cpp
    link /DEBUG /DEBUGTYPE:cv /manifest /INCREMENTAL:NO /NOLOGO -subsystem:windows,5.01 kernel32.lib ws2_32.lib mswsock.lib advapi32.lib user32.lib gdi32.lib comdlg32.lib winspool.lib /out:..\testthread.exe obj-x86_debug_static\testthread.obj
lcms-1.18_debug_static.lib(cmscnvrt.obj) : warning LNK4099: PDB 'lcms-1.18_debug_static.pdb' was not found with 'c:\vs2008\lib\lcms-1.18_debug_static.lib' or at 'P:\pkg\lcms2-2.2\lcms-1.18_debug_static.pdb'; linking object as if no debug info
lcms-1.18_debug_static.lib(cmserr.obj) : warning LNK4099: PDB 'lcms-1.18_debug_static.pdb' was not found with 'c:\vs2008\lib\lcms-1.18_debug_static.lib' or at 'P:\pkg\lcms2-2.2\lcms-1.18_debug_static.pdb'; linking object as if no debug info
lcms-1.18_debug_static.lib(cmsgamma.obj) : warning LNK4099: PDB 'lcms-1.18_debug_static.pdb' was not found with 'c:\vs2008\lib\lcms-1.18_debug_static.lib' or at 'P:\pkg\lcms2-2.2\lcms-1.18_debug_static.pdb'; linking object as if no debug info
lcms-1.18_debug_static.lib(cmsgmt.obj) : warning LNK4099: PDB 'lcms-1.18_debug_static.pdb' was not found with 'c:\vs2008\lib\lcms-1.18_debug_static.lib' or at 'P:\pkg\lcms2-2.2\lcms-1.18_debug_static.pdb'; linking object as if no debug info
lcms-1.18_debug_static.lib(cmsintrp.obj) : warning LNK4099: PDB 'lcms-1.18_debug_static.pdb' was not found with 'c:\vs2008\lib\lcms-1.18_debug_static.lib' or at 'P:\pkg\lcms2-2.2\lcms-1.18_debug_static.pdb'; linking object as if no debug info
lcms-1.18_debug_static.lib(cmsio0.obj) : warning LNK4099: PDB 'lcms-1.18_debug_static.pdb' was not found with 'c:\vs2008\lib\lcms-1.18_debug_static.lib' or at 'P:\pkg\lcms2-2.2\lcms-1.18_debug_static.pdb'; linking object as if no debug info
lcms-1.18_debug_static.lib(cmsio1.obj) : warning LNK4099: PDB 'lcms-1.18_debug_static.pdb' was not found with 'c:\vs2008\lib\lcms-1.18_debug_static.lib' or at 'P:\pkg\lcms2-2.2\lcms-1.18_debug_static.pdb'; linking object as if no debug info
lcms-1.18_debug_static.lib(cmslut.obj) : warning LNK4099: PDB 'lcms-1.18_debug_static.pdb' was not found with 'c:\vs2008\lib\lcms-1.18_debug_static.lib' or at 'P:\pkg\lcms2-2.2\lcms-1.18_debug_static.pdb'; linking object as if no debug info
lcms-1.18_debug_static.lib(cmsmatsh.obj) : warning LNK4099: PDB 'lcms-1.18_debug_static.pdb' was not found with 'c:\vs2008\lib\lcms-1.18_debug_static.lib' or at 'P:\pkg\lcms2-2.2\lcms-1.18_debug_static.pdb'; linking object as if no debug info
lcms-1.18_debug_static.lib(cmsmtrx.obj) : warning LNK4099: PDB 'lcms-1.18_debug_static.pdb' was not found with 'c:\vs2008\lib\lcms-1.18_debug_static.lib' or at 'P:\pkg\lcms2-2.2\lcms-1.18_debug_static.pdb'; linking object as if no debug info
lcms-1.18_debug_static.lib(cmsnamed.obj) : warning LNK4099: PDB 'lcms-1.18_debug_static.pdb' was not found with 'c:\vs2008\lib\lcms-1.18_debug_static.lib' or at 'P:\pkg\lcms2-2.2\lcms-1.18_debug_static.pdb'; linking object as if no debug info
lcms-1.18_debug_static.lib(cmspack.obj) : warning LNK4099: PDB 'lcms-1.18_debug_static.pdb' was not found with 'c:\vs2008\lib\lcms-1.18_debug_static.lib' or at 'P:\pkg\lcms2-2.2\lcms-1.18_debug_static.pdb'; linking object as if no debug info
lcms-1.18_debug_static.lib(cmspcs.obj) : warning LNK4099: PDB 'lcms-1.18_debug_static.pdb' was not found with 'c:\vs2008\lib\lcms-1.18_debug_static.lib' or at 'P:\pkg\lcms2-2.2\lcms-1.18_debug_static.pdb'; linking object as if no debug info
lcms-1.18_debug_static.lib(cmssamp.obj) : warning LNK4099: PDB 'lcms-1.18_debug_static.pdb' was not found with 'c:\vs2008\lib\lcms-1.18_debug_static.lib' or at 'P:\pkg\lcms2-2.2\lcms-1.18_debug_static.pdb'; linking object as if no debug info
lcms-1.18_debug_static.lib(cmsvirt.obj) : warning LNK4099: PDB 'lcms-1.18_debug_static.pdb' was not found with 'c:\vs2008\lib\lcms-1.18_debug_static.lib' or at 'P:\pkg\lcms2-2.2\lcms-1.18_debug_static.pdb'; linking object as if no debug info
lcms-1.18_debug_static.lib(cmswtpnt.obj) : warning LNK4099: PDB 'lcms-1.18_debug_static.pdb' was not found with 'c:\vs2008\lib\lcms-1.18_debug_static.lib' or at 'P:\pkg\lcms2-2.2\lcms-1.18_debug_static.pdb'; linking object as if no debug info
lcms-1.18_debug_static.lib(cmsxform.obj) : warning LNK4099: PDB 'lcms-1.18_debug_static.pdb' was not found with 'c:\vs2008\lib\lcms-1.18_debug_static.lib' or at 'P:\pkg\lcms2-2.2\lcms-1.18_debug_static.pdb'; linking object as if no debug info
    if exist ..\testthread.exe.manifest mt -nologo -manifest ..\testthread.exe.manifest -outputresource:..\testthread.exe;#1

Автор: akaGM
Дата сообщения: 06.11.2011 17:25
karakurt2
а где ты её lcms-1.18_debug_static.lib просишь?

и нет ли у тебя конфликта версий нет?
lcms2-2.2
lcms-1.18
Автор: karakurt2
Дата сообщения: 06.11.2011 18:47
у меня они с помощью #pragma добавляются

нет, с версиями всё в порядке

вопрос уже не актуален, перекомпилировал заново, ошибка исчезла, но всё равно осталось чувство непонимания. надо будет разобраться как будет время.
Автор: bomzzz
Дата сообщения: 07.11.2011 00:14
никто не подскажет какое сообщение получают окна при выключении или перезагрузке системы - чтоб сбросить на диск данные из кеша.
Автор: Abs62
Дата сообщения: 07.11.2011 00:23
bomzzz
Какой системы? Топик-то по C++, а он под разными системами есть.
Если разговор за Windows, то смотри WM_QUERYENDSESSION и WM_ENDSESSION. И кстати, по WinAPI своя тема есть.
Автор: akaGM
Дата сообщения: 07.11.2011 04:18
karakurt2
а что так? обычно в библиотеки суют полностью отлаженные функи...
Автор: bomzzz
Дата сообщения: 07.11.2011 08:56
Abs62


никто реально их не обрабатывал WM_QUERYENDSESSION и WM_ENDSESSION? погуглил люди даже hook пытаются использовать. мне надо сбросить из памяти 100 кб скорее всего, может конечно быть и мб-ты, но врядли. так что я просто не пойму правильно сделал или нет.

ответить на WM_QUERYENDSESSION FALSE и ждать WM_ENDSESSION?

Добавлено:
http://yvs-it.blogspot.com/2010/05/windows-shutdown.html
вот что дельфисты пишуть про семерку
[more]
Цитата:

Microsoft рекомендует в случае, если приложение должно заблокировать выключение компьютера, использовать это API
1. Если приложению надо заблокировать завершение работы, оно должно вызвать ShutdownBlockReasonCreate для регистрации строки-причины, передав хэндл окна, которое будет обрабатывать WM_QUERYENDSESSION
2. Когда у приложения больше не будет причин для блокирования shutdown-а, оно должно вызвать ShutdownBlockReasonDestroy для отмены регистрации строки-причины.
3. ShutdownBlockReasonQuery используется для получения строки-причины, зарегистрированной ранее
[/more]
Автор: bomzzz
Дата сообщения: 07.11.2011 12:31
пока только фигня получилась - прога завершает все что надо, только винда выключаться перестала
Автор: Abs62
Дата сообщения: 07.11.2011 14:46
bomzzz

Цитата:
ответить на WM_QUERYENDSESSION FALSE и ждать WM_ENDSESSION?

Зачем FALSE? FALSE - это запрет на завершение работы системы. Надо вернуть TRUE, а в обработчике WM_ENDSESSION сделать все необходимые программе действия.
Автор: bomzzz
Дата сообщения: 07.11.2011 15:07
вот уж не подумал бы что так. попробую, сенкс

Добавлено:
нет вернуть надо все таки FALSE - 0, а то WM_ENDSESSION вообще не приходит. пока получилось тоже самое не перезагрузился комп. правда опыт не совсем чистый чтоб закончить программу надо: запустить тред, оставить тред и запустить еще один тред.

Добавлено:
http://msdn.microsoft.com/en-us/library/ms700677(v=vs.85).aspx
вот тут вот вроде как написано, но чета я чем больше читаю тем слабее понимаю.
Автор: Abs62
Дата сообщения: 07.11.2011 16:23
bomzzz

Цитата:
нет вернуть надо все таки FALSE - 0, а то WM_ENDSESSION вообще не приходит.


Цитата:
вот тут вот вроде как написано

Ну так английским же языком написано: "Applications can return TRUE to indicate that they can be closed, or FALSE to indicate that they should not be closed". TRUE - можно закрываться, FALSE - нельзя.
Автор: bomzzz
Дата сообщения: 07.11.2011 16:26
ну так я ж попробовал. и так и так. работает только винда больше не выключается\перегружается

Добавлено:
а если тру вернуть тут же процесс прибивается и ниче не скидывается уже на винт
Автор: bomzzz
Дата сообщения: 07.11.2011 20:02
ну как правельна то сделать

Цитата:

WM_QUERYENDSESSION
====> THREAD ==> STOP APPLICATION

пришло сообщение WM_QUERYENDSESSION окно запускает тред завершающий обработку и сбрасывающие данные на диск. если вернуть 1 то перезагрузка\выключение вообще останавливаются, приходит сообщение WM_ENDSESSION - а че с ним делать?

если на сообщение WM_QUERYENDSESSION вернуть ноль то не успевает ничего на диск сброситься. если воткнуть паузу, то тред конечно сбросить все успевает, но некорректно ждать пять сек когда реально надо доли секунды

может у меня чета отключено в винде, я когда то менял что то на быстрое выключение

как вообще правильно сделать - сбросить данные на диск и вернуть 1 - но тогда зачем WM_ENDSESSION вообще?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193

Предыдущая тема: не знаю как назвать тему :-)


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.