Доброе время суток, Fedor! Средства для вывода на печать предоставляет ОС, уcтановленная на компьютере к которому подключен принтер. Расширение файла и его содержимое несколько разные вещи, для примитивной маскировки я могу текстовый файл записать с расширением .com, но он по прежнему останется текстовам, хотя если его запустить, система попытается его выполнить. Вывод текста на принтер в Windows:
Да, чуть
не забыл, вконце в буфер еще нужно записать esc-последовательность <конец страницы>, чтобы печать началась немедленно, ее посмотри в документации к принтеру. Ответ отправлен: 28.05.2004, 15:21 Отправитель: bocha
Вопрос № 1643
Здраствуйте, уважаемые!! Как узнать адрес ф-кций? Пишу: void f1(){} void f2(){} void f3(){} int main(){ cout << "f1 = " << &f1 << " f2 = " << &f2 << " f3="<< &f3; return 0;} f1,f2,f3 - возвращают одно и тоже(004010000).
Приветствую Вас, qh! У меня Turbo C++ не позволяет писать так как ты пишешь. Вообще я в BCB написал так... void *ptr1 = (void *)&f1; void *ptr2 = (void *)&f2; void *ptr3 = (void *)&f3; int i1 = (int)ptr1; int i2 = (int)ptr2; int i3 = (int)ptr3; Ну и все, в i1 - i3 адреса функций (разные) Ответ отправлен: 28.05.2004, 19:23 Отправитель: CrackLab Отвечает vitya
Здравствуйте, qh! предлагаю вам написать содержание функций. Скорее всего компилятор генерит одинаковые заглушки для пустых функций. Крме того f == &f для функций, то есть она и есть свой адрес. Ответ отправлен: 27.05.2004, 08:55 Отправитель: vitya
Вопрос № 1644
Здравствуйте эксперты. У меня такой вопрос: При создании приложения на основе Document-View я создаю в классе MainFrame сплиттер, и уже в сплиттере я создаю представления(т.е. View-производные), но это, как я считаю, искусственный метод, т.к. теряется связь с CDocument. Как создавать предствления обычным методом, т.е. как стандортное CMyView, которое генерит App-Wizard, т.е. чтобы каждое View(представление) имело возможность получить указатель на документ(::GetDocument())? И еще может кто подскажет линки по этой теме, буду благодарен. Заранее спасибо Иван Абрамовский.
Добрый день, Иван Абрамовский! Все view, если созданы с помощью метода CreateView из сплиттера будут иметь доступ к документы. А проблема в том, что это не ::GetDocument(), а просто GetDocument() /this->GetDocument(); Ответ отправлен: 27.05.2004, 08:52 Отправитель: vitya Отвечает bocha
Добрый день, Иван Абрамовский! Ничего искусственного в этом нет. Документ один, а представлений -много. Если у каждого представления будет свой указатель на документ, то в один прекрасный момент, одно представление изменит местоположение документа, а второе ссылась на недействительную область памяти вызовет какую-нибуть его функцию. Для того, чтобы получить указатель на документ, добавьте в новый вид функцию, точно такую же как и впервом виде, который создается по умолчанию.
Включите заголовочный файл документа везде, где объявляете вид, до включения заголовочного файла вида.В функции OnDraw нового вида измените CDocument*pDoc=GetDocument(); на CMyDoc*pDoc=GetDocumen(); В MainFrame::OnCreateClient() в создайте эти
виды:
Ответ отправлен: 27.05.2004, 06:37 Отправитель: bocha
Вопрос № 1645
Здравствуйте эксперты. Я хочу создать на WinApi немодальное диалоговое окно, которое будет единственным отображаемым окном на экране. Проблема заключается в том, что я не могу закрыть приложение через немодальное окно с помощью вызова функции SendMessage: //... if(LOWORD(wParam) == IDOK) { hwndParent = GetParent(hwndDlg); SendMessage(hwndParent, WM_DESTROY, 0, 0); return TRUE; } //... Буду очень благодарен, если вы поможете преодолеть эту проблему! В приложении указан код.
Приветствую Вас, Alexandr! 1. грубый вариант - ExitProcess()/exit() 2. попробуйте посылать WM_QUIT, а не WM_DESTROY. Ответ отправлен: 27.05.2004, 08:48 Отправитель: vitya Отвечает Gibbel
Здравствуйте, Alexandr! А почему бы вам не вызывать PostQuitMessage из диалогового окна??? Ответ отправлен: 27.05.2004, 12:25 Отправитель: Gibbel
Вопрос № 1646
Здравствуйте. Насчет вопроса №1645. Я внес небольшие изменения в код и программа стала корректно завершатся, т.е. немодальное диалоговое окно посылает сообщение WM_DESTROY оконной процедуре, что приводит к завершению работы приложения. В программе я сделал такие изменения: сделал переменную hWnd глобальной, функция SendMessage теперь выглядит так: if(LOWORD(wParam) == IDOK) { hwndParent = GetParent(hwndDlg); SendMessage(hWnd, WM_DESTROY, wParam, lParam); return TRUE; } Почему не работает функция GetParent и стало быть возвращает непонятно какой описатель! Оставлять код с глобальной hWnd мне совесть не позволяет:), потому по прежнему рассчитываю на вашу помошь!!
Доброе время суток, Alexandr! Непонятно как она может корректно завершаться, если Вы не показываете ни одного окна (шоу где?), в т.ч. и диалога. Кстати, насколько я помню дочерние окна скрытого окна т.ж. являются скрытыми, т.о. показываться диалог будет только в том случае, если не будет являтся дочерним по отношению к основному. Ответ отправлен: 28.05.2004, 12:09 Отправитель: bocha
Вопрос № 1648
Здравствуйте эксперты. Я уже задавал вам вопрос по поводу Doc-View, спасибо отвтившим экспертам - bocha и vitya. Но остался еще один не выясненный момент: как получать указатль на виды (CMyView1, CMyView2 ...) из CMyDocument? Неужели через CMainFrame, т.е. следующим образом : BOOL CMyDoc::OnNewDocument() { CMainFrame* pFrm = (CMainFrame*)(AfxGetApp()->GetMainWnd()); CMyView1 * pView1 = (CMyView1*) pFrm->m_wndSplitter.GetPane(0,0); CMyView2 * pView2 = (CMyView2*) pFrm->m_wndSplitter.GetPane(0,1); } Заранее спасибо, Абрамовский Иван.
Доброе время суток, Иван Абрамовский! А вот из документа в виды загдядывать не стоит. При создании нового документа, приложение вызывает ф-ю OnInitialUpdate вида. Если в каком-то из представлений изменили документ, то из него нужно вызывать GetDocument()->UpdateAllViews(this); При вызове этой функции вызываются функции всех видов OnUpdate(), кроме указанного в параметре (он сам должен знать, что обновляется),этот параметр можно установить равным NULL, обновятся все виды. У функции есть еще два параметра, в них можно указать, например какую часть документа обновили. Архитектура документ-вид для того и создана, чтобы отделить данные от их представления и несанкционированого изменения. Документ должен предоставлять функции передачи данных, а изменять их должен сам. Вид же должен позабоотится о получении данных, их отображении, и вслучае изменения - полать сообщение
документу. Так что перепишите свою функцию на что-нибуть вроде:
BOOL CMyDoc::OnNewDocument(){ MyData.Clear();//эта ф-я целиком и полностью ваша //или так delete[] pMyData; pMyData = new CMyData; UpdateAllViews(NULL); }
При правильной организации взаимодействия документ-вид, указатели на виды в документе не нужны.
Ответ отправлен: 27.05.2004, 21:20 Отправитель: bocha
Форма отправки вопроса
Внимание!
Мы рекомендуем открывать рассылку в программе Internet Explorer 5.0+
или отправлять вопросы с сайта по адресу:
http://rusfaq.ru/cgi-bin/Message.cgi.