Проблема с CreateD C принтера после вызова функции PageSetupDlg () - PullRequest
0 голосов
/ 04 августа 2020

Я работаю над проектом на C ++ WinAPI для WindowsCE 2013. IDE, которую я использую, - это Visual Studio 2013. Сначала я инициализирую PageSetupDialog в своем приложении. Экран ниже: введите описание изображения здесь

К сожалению, у меня все еще проблема с началом печати. У меня есть предположение, что проблема в CreateD C, что значения из DialogBox не пересылаются в функцию CreateD C. Я читал в этой документации, что функция PageSetupDlg возвращает структуру DEVMODE, но я понятия не имею, как передать ее функции Create D C. Спасибо за помощь в этом вопросе. Ставлю определение ответственной функции:

BOOL OknoDrukowania(HWND hWnd)
{
    PAGESETUPDLG psd;   
    DEVMODE dm;// common dialog box structure
    // Initialize PAGESETUPDLG
    ZeroMemory(&psd, sizeof(psd));
    psd.lStructSize = sizeof(psd);
    psd.hwndOwner = hWnd;
    psd.hDevMode = NULL; // Don't forget to free or store hDevMode.
    psd.hDevNames = NULL; // Don't forget to free or store hDevNames.
    psd.Flags = PSD_INTHOUSANDTHSOFINCHES | PSD_MARGINS ;
    psd.rtMargin.top = 1000;
    psd.rtMargin.left = 1250;
    psd.rtMargin.right = 1250;
    psd.rtMargin.bottom = 1000;
    //psd.lpfnPagePaintHook = PaintHook;
 
    if (PageSetupDlg(&psd) == TRUE)
    {
        HDC hDC;
        hDC = CreateDC(NULL, dm.dmDeviceName, NULL, NULL);
        StartDoc(hDC, NULL);
        StartPage(hDC);
        Ellipse(hDC, 500, 500, 1000, 1000);
        Ellipse(hDC, 1000, 800, 1500, 1300);
        Ellipse(hDC, 800, 1000, 1800, 2000);
        EndPage(hDC);
        EndDoc(hDC);
        DeleteDC(hDC);  // check paper size and margin values here.
    }
    return TRUE;
 
}

1 Ответ

0 голосов
/ 06 августа 2020

Проблема была решена этим фрагментом кода:

memcpy(&dm, (DEVMODE *)(psd.hDevMode), sizeof(DEVMODE));
        lstrcpy(DriverName, ((TCHAR *)((BYTE *)psd.hDevNames + ((DEVNAMES *)psd.hDevNames)->wDriverOffset)));
        lstrcpy(DeviceName, ((TCHAR *)((BYTE *)psd.hDevNames + ((DEVNAMES *)psd.hDevNames)->wDeviceOffset)));
        lstrcpy(OutputName, ((TCHAR *)((BYTE *)psd.hDevNames + ((DEVNAMES *)psd.hDevNames)->wOutputOffset)));
        HDC hDC;
        hDC = CreateDC(DriverName, DeviceName, OutputName, &dm);
...