End Google Ads 201810 - BS.net 01 --> I am developing a printing application under windowsXP, I have a problem with Custom the user papersize during printing. accordance to Microsoft, writing the change papersize function as follows.

LPDEVMODE CFileInfoView::ChangeDevMode(HWND hWnd, char *pDevice)
{
HANDLE hPrinter;
LPDEVMODE pDevMode;
DWORD dwNeeded, dwRet;
FORM_INFO_1 formInfo;

if (!OpenPrinter(pDevice, &hPrinter, NULL))
return NULL;

dwNeeded = DocumentProperties(hWnd,
hPrinter,
pDevice,
NULL,
NULL,
0);
pDevMode = (LPDEVMODE)malloc(dwNeeded);
//twice
dwRet = DocumentProperties(hWnd,
hPrinter,
pDevice,
pDevMode,
NULL,
DM_OUT_BUFFER);
if (dwRet != IDOK)
{
free(pDevMode);
ClosePrinter(hPrinter);
return NULL;
}

formInfo.Size.cx=176000;
formInfo.Size.cy=330000;
formInfo.Flags=FORM_USER;
formInfo.ImageableArea.left=0;
formInfo.ImageableArea.top=0;
formInfo.ImageableArea.right=176000;
formInfo.ImageableArea.bottom=330000;
formInfo.pName="Custom Paper(176*330)";
LPTSTR FormName=new char[32];
if(!GetForms(hPrinter,formInfo.Size,FormName))
{
if(!AddForm(hPrinter,1,(LPBYTE)&formInfo))
{
DWORD dd=GetLastError();
free(pDevMode);
ClosePrinter(hPrinter);
return NULL;
}
//make sure the form is added
if(!GetForms(hPrinter,formInfo.Size,FormName))
{
AfxMessageBox("");
return NULL;
}
}
memcpy(pDevMode->dmFormName,FormName,strlen(FormName));
pDevMode->dmFormName[strlen(FormName)]='\0';//must null-terminated
pDevMode->dmFields=DM_FORMNAME;

dwRet = DocumentProperties(hWnd,
hPrinter,
pDevice,
pDevMode,
pDevMode,
DM_IN_BUFFER |
DM_OUT_BUFFER);

ClosePrinter(hPrinter);

if (dwRet != IDOK)
{
free(pDevMode);
return NULL;
}
delete [] FormName;
return pDevMode;
}

void CFileInfoView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo )
{
CScrollView::OnPrepareDC(pDC, pInfo);
if(pDC->IsPrinting())
{
if(IsWindowNT())//make sure Windows Version is support
{
Char* PrinterName = NULL;
CString s=pInfo->m_pPD->GetDeviceName();
PrinterName=s.GetBuffer(s.GetLength());
lpDevMode = ChangeDevMode(m_hWnd,PrinterName);
pDC->ResetDC(lpDevMode);
}
else
{
.....
}
}
}
However, after running, and some printers can be changed for custom paper, but some of the default paper, has not changed.why? please help me. thank you!