Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вывод на принтер 
:(
    Опции темы
oper54
  Дата 1.7.2005, 15:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 13.5.2005

Репутация: нет
Всего: 1



Создаю значит диалог, получаю dc принтера все параметры старницы есть....
Что делать дальше?
Если просто написать DrawText(hdc, pszBuff... естественно принтер печатать не начнет.
В MFC, когда таким приходилось страдать надо было создать страниуцу 1, 2 и т.д, потом в них рисовать(текст графика).
Привидите пожалуйста пример на Api...

PM MAIL   Вверх
Alastis
Дата 2.7.2005, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 15.11.2004
Где: Казахстан, Астана

Репутация: нет
Всего: 10



вот пример из "Programming Windows" (Charles Petzold):


Код

PRINT3.C

/*---------------------------------------
   PRINT3.C -- Printing with Dialog Box
               (c) Charles Petzold, 1998
  ---------------------------------------*/

#include <windows.h>

HDC  GetPrinterDC (void) ;              // in GETPRNDC.C
void PageGDICalls (HDC, int, int) ;     // in PRINT.C

HINSTANCE hInst ;
TCHAR     szAppName[] = TEXT ("Print3") ;
TCHAR     szCaption[] = TEXT ("Print Program 3 (Dialog Box)") ;

BOOL bUserAbort ;
HWND hDlgPrint ;

BOOL CALLBACK PrintDlgProc (HWND hDlg, UINT message, 
                            WPARAM wParam, LPARAM lParam)
{
     switch (message)
     {
     case WM_INITDIALOG:
          SetWindowText (hDlg, szAppName) ;
          EnableMenuItem (GetSystemMenu (hDlg, FALSE), SC_CLOSE, MF_GRAYED) ;
          return TRUE ;
          
     case WM_COMMAND:
          bUserAbort = TRUE ;
          EnableWindow (GetParent (hDlg), TRUE) ;
          DestroyWindow (hDlg) ;
          hDlgPrint = NULL ;
          return TRUE ;
     }
     return FALSE ;
}

BOOL CALLBACK AbortProc (HDC hdcPrn, int iCode)

{
     MSG msg ;
     
     while (!bUserAbort && PeekMessage (&msg, NULL, 0, 0, PM_REMOVE))
     {
          if (!hDlgPrint || !IsDialogMessage (hDlgPrint, &msg))
          {
               TranslateMessage (&msg) ;
               DispatchMessage (&msg) ;
          }
     }
     return !bUserAbort ;
}

BOOL PrintMyPage (HWND hwnd)
{
     static DOCINFO di = { sizeof (DOCINFO), TEXT ("Print3: Printing") } ;
     BOOL           bSuccess = TRUE ;
     HDC            hdcPrn ;
     int            xPage, yPage ;
     
     if (NULL == (hdcPrn = GetPrinterDC ()))
          return FALSE ;
     
     xPage = GetDeviceCaps (hdcPrn, HORZRES) ;
     yPage = GetDeviceCaps (hdcPrn, VERTRES) ;
     
     EnableWindow (hwnd, FALSE) ;
     
     bUserAbort = FALSE ;
     hDlgPrint = CreateDialog (hInst, TEXT ("PrintDlgBox"), 
                               hwnd, PrintDlgProc) ;
     
     SetAbortProc (hdcPrn, AbortProc) ;
     
     if (StartDoc (hdcPrn, &di) > 0)
     {
          if (StartPage (hdcPrn) > 0)
          {
               PageGDICalls (hdcPrn, xPage, yPage) ;
               
               if (EndPage (hdcPrn) > 0)
                    EndDoc (hdcPrn) ;
               else
                    bSuccess = FALSE ;
          }
     }
     else
          bSuccess = FALSE ;

     if (!bUserAbort)
     {
          EnableWindow (hwnd, TRUE) ;
          DestroyWindow (hDlgPrint) ;
     }
     
     DeleteDC (hdcPrn) ;
     
     return bSuccess && !bUserAbort ;
}



Код

PRINT.RC (excerpts)

//Microsoft Developer Studio generated resource script.

#include "resource.h"
#include "afxres.h"

/////////////////////////////////////////////////////////////////////////////
// Dialog

PRINTDLGBOX DIALOG DISCARDABLE  20, 20, 186, 63
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
FONT 8, "MS Sans Serif"
BEGIN
    PUSHBUTTON      "Cancel",IDCANCEL,67,42,50,14
    CTEXT           "Cancel Printing",IDC_STATIC,7,21,172,8
END


Вообще советую качнуть эту книгу, там работа с принтером через API очень подробно описана


--------------------
Прости, что я говорю, когда ты меня перебиваешь.
PM MAIL WWW ICQ   Вверх
Guest
Дата 2.7.2005, 15:50 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо большее Alastis, буду пробовать

  Вверх
oper54
Дата 3.7.2005, 13:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 217
Регистрация: 13.5.2005

Репутация: нет
Всего: 1



smile smile smile smile smile smile
Никак не получается напечатать.....
Вот код вывода на печать(посмотрите пожалуйста)
Код

bool PrintPage(HDC hPrinterDC){
    if(!hPrinterDC)return false;

    DOCINFO di;
    bool bSuccess = true;
    RECT rc;
    int len = GetWindowTextLength(hEdit);
    char* pszBuff = new char[len + 1];
    
    GetWindowText(hEdit, pszBuff, len + 1);//получаем текст из едита
    ps.GetRect(&rc);        
    memset(&di, 0, sizeof(DOCINFO));
    di.cbSize        = sizeof(DOCINFO);
    di.lpszOutput    = pszBuff;
    di.lpszDocName    = szFileName;//имя файла и будит именем документа
    if(StartDoc(hPrinterDC, &di) > 0)
        if(StartPage(hPrinterDC) > 0){
            DrawText(hPrinterDC, pszBuff, strlen(pszBuff), &rc, DT_NOCLIP);
            //PageGDICalls(hPrinterDC, ps.xPageSize, ps.yPageSize); //ту визуал матюкается
            //полдключал gdi32.lib и wingdi.h - не помогло
            if(EndPage(hPrinterDC) > 0)EndDoc(hPrinterDC);
            else bSuccess = false;
           }
    else bSuccess = false;
    delete[] pszBuff;
    return bSuccess;
}

bool BeginPrint(){
    PRINTDLG pd;
    //вызываем стандартный диалог печати
    memset(&pd, 0, sizeof(PRINTDLG));
    pd.lStructSize           = sizeof(pd);
    pd.hwndOwner           = hMainWnd;
    pd.hDevMode           = 0;
    pd.hDevNames           = 0;
    pd.Flags               = PD_USEDEVMODECOPIESANDCOLLATE|PD_RETURNDC;
    pd.nCopies               = 1;
    pd.nFromPage           = 0xFFFF; 
    pd.nToPage           = 0xFFFF; 
    pd.nMinPage           = 1; 
    pd.nMaxPage           = 0xFFFF;
    if(PrintDlg(&pd)){
        //если нажата ОК начинаем выводим на принтер
        if(!PrintPage(pd.hDC))ErrorMsg("Print ERROR!!!");//ErrorMsg - самописная ф-я
        DeleteDC(pd.hDC);
    }    
    return true;
}

Возникла еще одна проблема....
Если перевести кодировку программа выполняет недопустимую опрецию, а окошко сообщающее об этом не закрывается(натупил как видно я конкретно smile )
Код перевода в кодировку дос
Код

void SetCharSet(unsigned int uCharSet){
    if(!uCharSet){
        lf.lfCharSet            = ANSI_CHARSET;
        strcpy(lf.lfFaceName, "Fixedsys");//Имя шрифта
    }
    else{
        lf.lfCharSet            = uCharSet;//в моем млучае uCharSet = OEM_CHARSET - кодировка дос
        lf.lfWeight            = FW_BOLD;
        strcpy(lf.lfFaceName, "Terminal");        
    }
    
    HFONT hf = CreateFontIndirect(&lf);
    
    SendMessage(hEdit, WM_SETFONT, (WPARAM)hf, 0);
    RedrawText();//моя самописная функция
}

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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