Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить "снимок окна"? Графический, который пользователь видит 
:(
    Опции темы
Nuzur
Дата 16.6.2006, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: 3
Всего: 5




И передать его потом для печати.
Вообще-то проблема такова что нужно "снять" только определенный компонент, в частности сторонний Grid, хотя я не думаю что что-то поменяеться от компонента.
Боюсь говорить но надо  smile , проблема еще в том что он можен не помещяться а окне а печатать нада весь...

Короче жду с нетерпением ваших предложений  smile  


--------------------
Never again...
PM MAIL   Вверх
Coocky
Дата 16.6.2006, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Где снять надо? В чужом окне? 


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Nuzur
Дата 16.6.2006, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: 3
Всего: 5



Нет в своем. Тоесть можна получить все что можна получить. Красиво сказал  smile 
Я думаю в чужом задача была б нереализуема в принцыпе тем более со сторонним компонентом. 


--------------------
Never again...
PM MAIL   Вверх
Coocky
Дата 16.6.2006, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Если чужого окна-то все предельно просто :
Получаешь чужое окно через FindWindow ,а с его указателя GetDC();
Если с "невидимого окна" (говорю как соавтор многих шпионских и анти программ) нужно послать окну сообщение WM_PRINT/WM_PRINTCLIENT
 


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Nuzur
Дата 16.6.2006, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: 3
Всего: 5




Ладно, согласен получил я CDC подготовил принтер, ну тоесть нашел его и все такое - как мне теперь прикрутить CDC к "принтерному" CDC.
И все-таки мои страхи подтвердяться он напечатает только то  что видно, а до чего нужно добраться скролингом нет? 


--------------------
Never again...
PM MAIL   Вверх
Coocky
Дата 16.6.2006, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата(Nuzur @  16.6.2006,  15:45 Найти цитируемый пост)
Ладно, согласен 

Еще бы smile 

Цитата(Nuzur @  16.6.2006,  15:45 Найти цитируемый пост)
как мне теперь прикрутить CDC к "принтерному" CDC

Перед тем как выводить что-либо на печать, достаточно вызвать эту функцию: 
Код

... 

CDC* dc; // полученый указатель окна
..............................................................................
// Создаем контекст устройства для принтера 

AfxGetApp()->CreatePrinterDC(dc);  

 // Теперь можно выводить информацию в контекст устройства dc 

... 



Добавлено @ 16:04 
Цитата(Nuzur @  16.6.2006,  15:45 Найти цитируемый пост)
И все-таки мои страхи подтвердяться он напечатает только то  что видно, а до чего нужно добраться скролингом нет?

90% твои страхи оправдываются.. Это по логике. Но я таким не страдал никогда, поэтому незнаю smile  smile 
 

Это сообщение отредактировал(а) Coocky - 16.6.2006, 16:03


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Nuzur
Дата 16.6.2006, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: 3
Всего: 5



Сделал вот так вот:

Код

    // get the default printer
    CPrintDialog dlg(FALSE);
    if(dlg.DoModal() == IDOK)
    {
        // dlg.GetDefaults();
        // is a default printer set up?
        HDC hdcPrinter = dlg.GetPrinterDC();
        if (hdcPrinter == NULL)
        {
            MessageBox(_T("Ïðèíòåð íå íàéäåí!"));
        }
        else
        {
            // create a CDC and attach it to the default printer
            CDC dcPrinter;

            AfxGetApp()->CreatePrinterDC(dcPrinter);

            dcPrinter.Attach(hdcPrinter);
            // call StartDoc() to begin printing
            DOCINFO docinfo;
            memset(&docinfo, 0, sizeof(docinfo));
            docinfo.cbSize = sizeof(docinfo);
            docinfo.lpszDocName = _T("Max");

            // if it fails, complain and exit gracefully
            if (dcPrinter.StartDoc(&docinfo) < 0)
            {
                MessageBox(_T("Ïðèíòåð îòêàçàë â ïå÷àòè!"));
            }
            else
            {
                // start a page
                if (dcPrinter.StartPage() < 0)
                {
                    MessageBox(_T(" Îøèáêà íà÷àëà ñòðàíèöû"));
                    dcPrinter.AbortDoc();
                }
                else
                {
                    // actually do some printing
                    CGdiObject* pOldFont = dcPrinter.SelectStockObject(SYSTEM_FONT);
                    //////////
                    //Prepear information for output to the printer

                    dcPrinter.EndPage();
                    dcPrinter.EndDoc();
                    dcPrinter.SelectObject(pOldFont);
                }
            }
        }
    }


В результате чего увидел приятный белый лист, что я сделал не так?  

Это сообщение отредактировал(а) Nuzur - 16.6.2006, 16:28


--------------------
Never again...
PM MAIL   Вверх
Coocky
Дата 16.6.2006, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Для меня вообще этот код полный бред. Я такого никогда не делал по крайней мере. Тебе нужно научится печатать, для начала smile 
Почитай топики и статьи. В двух приложениях не обьяснишь smile  


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Nuzur
Дата 16.6.2006, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: 3
Всего: 5



Coocky,  Ладно, сейчас я на работе, прийду домой покурю книжку. Но всеравно от вашей помощи не откажусь. Если вас не затруднит и вы СЛУЧАЙНО набредете на какой-то вкусный и красивый код, по печати конечно, не сочтите за труд поделиться, буду очень признателен. 


--------------------
Never again...
PM MAIL   Вверх
Coocky
Дата 16.6.2006, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата(Nuzur @  16.6.2006,  17:27 Найти цитируемый пост)
СЛУЧАЙНО набредете на какой-то вкусный и красивый код, по печати конечно, не сочтите за труд поделиться, буду очень признателен

Есть и код smile  Все есть. Только не спасет тебя код без теории smile 
http://www.realcoding.net/article/view/2018
 


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Nuzur
Дата 19.6.2006, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: 3
Всего: 5



Покурил вашу статью вот что наваял:

Код

    CPrintDialog dlgPD(TRUE);

    PRINTDLG pd;

    pd.hDevMode = NULL;

    AfxGetApp()->GetPrinterDeviceDefaults(&pd);

    DEVMODE *dm = (DEVMODE *) LocalLock(pd.hDevMode);

    dm->dmFields = DM_ORIENTATION | DM_PAPERSIZE;
    dm->dmOrientation = DMORIENT_LANDSCAPE;
    dm->dmPaperSize = DMPAPER_LETTER; 

    dlgPD.m_pd.hDevMode = pd. hDevMode;

    LocalUnlock(pd.hDevMode);

    if(dlgPD.DoModal() == IDOK)
    {
        HDC hdcPrinter = dlgPD.GetPrinterDC();
        if (hdcPrinter == NULL)
        {
            MessageBox(_T("Ïðèíòåð íå íàéäåí!"));
        }
        else
        {

            CDC dcPrinter;
            AfxGetApp()->CreatePrinterDC(dcPrinter); 
            dcPrinter.Attach(hdcPrinter);

            DOCINFO docinfo;
            memset(&docinfo, 0, sizeof(docinfo));
            docinfo.cbSize = sizeof(docinfo);
            docinfo.lpszDocName = _T("Morning Evening Max");

            if(dcPrinter.StartDoc(&docinfo) < 0)
            {
                MessageBox(_T("Íåâîçìîæíî íà÷àòü ïå÷àòü!"));
            }
            else
            {
/////////////////////////////////////////////////////////////////
                // start a page
                if (dcPrinter.StartPage() < 0)
                {
                    MessageBox(_T(" Îøèáêà íà÷àëà ñòðàíèöû"));
                    dcPrinter.AbortDoc();
                }
                else
                {
                    // actually do some printing
                    CGdiObject* pOldFont = dcPrinter.SelectStockObject(SYSTEM_FONT);
                    //////////
                    //Prepear information for output to the printer

                    dcPrinter.EndPage();
                    dcPrinter.EndDoc();
                    dcPrinter.SelectObject(pOldFont);

                };
/////////////////////////////////////////////////////////////////
            };

        }
    }


Врезультате моих трудов у меня вылетает прога на 

Код

        HDC hdcPrinter = dlgPD.GetPrinterDC();


Что я снова не так делаю. Помогите плиз!  

Это сообщение отредактировал(а) Nuzur - 19.6.2006, 12:10


--------------------
Never again...
PM MAIL   Вверх
Coocky
Дата 19.6.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


GUI гуру
****


Профиль
Группа: Участник Клуба
Сообщений: 2879
Регистрация: 16.2.2004
Где: Украина. Запорожь е

Репутация: 25
Всего: 62



Цитата(Nuzur @  19.6.2006,  12:09 Найти цитируемый пост)
Что я снова не так делаю.


Код

CPrintDialog dlgPD(TRUE,PD_RETURNDC );
  if(dlgPD.DoModal() == IDOK)
  {
 
    HDC hdcPrinter = dlgPD.GetPrinterDC();
    if (hdcPrinter == NULL)
    {
      MessageBox(_T("Ïðèíòåð íå íàéäåí!"));
    }

  }


или

Код

 CPrintDialog dlgPD(FALSE);
  if (dlgPD.DoModal() == IDOK)
  {

    HDC hdc = dlg.GetPrinterDC();
 
if (hdcPrinter == NULL)
        {
            MessageBox(_T("Ïðèíòåð íå íàéäåí!"));
        }

  }



Чувствуешь разницу? smile 
Знаешь почему так получилось? А потому, что сломя голову летим делать кейлогер. что б удивить знакомых, друзей, родителей, похвастаться перед девченкой на свидании smile , но забываем одно -ЧИТАТЬ МСДН smile 
А там черному по делому написано

Цитата

Note that when you call the constructor with bPrintSetupOnly set to FALSE, the PD_RETURNDC flag is automatically used;

Исходя из логики можно догадаться , что если не bPrintSetupOnly set to TRUE. то the PD_RETURNDC flag уже не" is automatically used" smile  


--------------------
Верю в смерть после жизни, в любовь после секса ,в крем после бритья smile        
PM ICQ   Вверх
Nuzur
Дата 20.6.2006, 09:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1019
Регистрация: 4.7.2004

Репутация: 3
Всего: 5



Кстати выяснилось что у моего сторонненго контрола есть возможность "самопичати".
Так что читайте документацию. Как я был зол вчера....уууу....
Всем спасибо. Хотя лично мне кажеться что подобную темку надо было бы в ФАКУ сделать ИМХО.
Потому что как пичатать из SDI и MDI всем вроде как ясно а вот как распичатать свой диалог не очень.
 


--------------------
Never again...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0523 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.