首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

哪位能帮忙 解释一下 以下例程中 DocumentProperties 各个用法的作用,多谢

2013-10-16 
哪位能帮忙 解释一下 以下例程中 DocumentProperties 各个用法的作用,谢谢。哪位能帮忙 解释一下 以下例程

哪位能帮忙 解释一下 以下例程中 DocumentProperties 各个用法的作用,谢谢。
哪位能帮忙 解释一下 以下例程中 DocumentProperties 各个用法的作用,谢谢。

Public Function SelectForm(FormName As String, ByVal MyhWnd As Long) As Integer
Dim nSize As Long           ' Size of DEVMODE
Dim pDevMode As DEVMODE
Dim PrinterHandle As Long   ' Handle to printer
Dim hPrtDC As Long          ' Handle to Printer DC
Dim PrinterName As String
Dim aDevMode() As Byte      ' Working DEVMODE
Dim FormSize As SIZEL

PrinterName = Printer.DeviceName  ' Current printer
hPrtDC = Printer.hdc              ' hDC for current Printer

' Get a handle to the printer.
If OpenPrinter(PrinterName, PrinterHandle, 0&) Then
    ' Retrieve the size of the DEVMODE.
    nSize = DocumentProperties(MyhWnd, PrinterHandle, PrinterName, 0&,0&, 0&)
    ' Reserve memory for the actual size of the DEVMODE.
    ReDim aDevMode(1 To nSize)

    ' Fill the DEVMODE from the printer.
    nSize = DocumentProperties(MyhWnd, PrinterHandle, PrinterName, aDevMode(1), 0&, DM_OUT_BUFFER)
    ' Copy the Public (predefined) portion of the DEVMODE.
    Call CopyMemory(pDevMode, aDevMode(1), Len(pDevMode))

    ' Change the appropriate member in the DevMode.
    ' In this case, you want to change the form name.
    pDevMode.dmFormName = FormName & Chr(0)  ' Must be NULL terminated!
    ' Set the dmFields bit flag to indicate what you are changing.
    pDevMode.dmFields = DM_FORMNAME

    ' Copy your changes back, then update DEVMODE.
    Call CopyMemory(aDevMode(1), pDevMode, Len(pDevMode))
    nSize = DocumentProperties(MyhWnd, PrinterHandle, PrinterName, aDevMode(1), aDevMode(1), DM_IN_BUFFER Or DM_OUT_BUFFER)

    nSize = ResetDC(hPrtDC, aDevMode(1))   ' Reset the DEVMODE for the DC.
End Function


[解决办法]
解释得很详细了。英文不好找个在线的词典查查不行么?
[解决办法]
DocumentProperties
The DocumentProperties function retrieves or modifies printer initialization information or displays a printer-configuration dialog box for the specified printer. 

LONG DocumentProperties(
  HWND hWnd,           // handle to window that displays dialog box
  HANDLE hPrinter,         // handle to printer object
  LPTSTR pDeviceName,      // pointer to device name
  PDEVMODE pDevModeOutput,
                       // pointer to modified device mode structure
  PDEVMODE pDevModeInput,  // pointer to original device mode 
                           // structure
  DWORD fMode              // mode flag
);
 
Parameters
hWnd 
Handle to the parent window of the printer-configuration dialog box. 
hPrinter 
Handle to a printer object. 
pDeviceName 
Pointer to a null-terminated string that specifies the name of the device for which the printer-configuration dialog box should be displayed. 


pDevModeOutput 
Pointer to a DEVMODE structure that receives the printer configuration data specified by the user. 
pDevModeInput 
Pointer to a DEVMODE structure that the operating system uses to initialize the dialog box controls. 
This parameter is only used if the DM_IN_BUFFER flag is set in the fMode parameter. If DM_IN_BUFFER is not set, the operating system uses the printer's default DEVMODE. 

fMode 
Specifies a mask of values that determines the operations the function performs. If this parameter is zero, the DocumentProperties function returns the number of bytes required by the printer driver's DEVMODE data structure. Otherwise, use one or more of the following constants to construct a value for this parameter; note, however, that in order to change the print settings, an application must specify at least one input value and one output value: Value Meaning 
DM_IN_BUFFER Input value. Before prompting, copying, or updating, the function merges the printer driver's current print settings with the settings in the DEVMODE structure specified by the pDevModeInput parameter. The function updates the structure only for those members specified by the DEVMODE structure's dmFields member. This value is also defined as DM_MODIFY. In cases of conflict during the merge, the settings in the DEVMODE structure specified by pDevModeInput override the printer driver's current print settings. 
DM_IN_PROMPT Input value. The function presents the printer driver's Print Setup dialog box and then changes the settings in the printer's DEVMODE data structure to those values specified by the user. This value is also defined as DM_PROMPT. 
DM_OUT_BUFFER Output value. The function writes the printer driver's current print settings, including private data, to the DEVMODE data structure specified by the pDevModeOutput parameter. The caller must allocate a buffer sufficiently large to contain the information. If the bit DM_OUT_BUFFER sets is clear, the pDevModeOutput parameter can be NULL. This value is also defined as DM_COPY. 


Return Values
If the fMode parameter is zero, the return value is the size of the buffer required to contain the printer driver initialization data. Note that this buffer can be larger than a DEVMODE structure if the printer driver appends private data to the structure. 

If the function displays the initialization dialog box, the return value is either IDOK or IDCANCEL, depending on which button the user selects. 

If the function does not display the dialog box and is successful, the return value is IDOK. 

If the function fails, the return value is less than zero. To get extended error information, callGetLastError.

Remarks
The printer object handle identified by the hPrinter parameter can be obtained by calling the OpenPrinter function. 

The string pointed to by the pDeviceName parameter can be obtained by calling the GetPrinter function. 

Note  The DEVMODE structure actually used by a printer driver contains the device-independent part (as defined above) followed by a driver-specific part that varies in size and content with each driver and driver version. Because of this driver dependence, it is very important for applications to query the driver for the correct size of the DEVMODE structure before allocating a buffer for it.

To make changes to print settings that are local to an application, an application should follow these steps: 



Get the number of bytes required for the full DEVMODE structure by calling DocumentProperties and specifying zero in the fMode parameter. 
Allocate memory for the full DEVMODE structure. 
Get the current printer settings by calling DocumentProperties. Pass a pointer to the DEVMODE structure allocated in Step 2 as the pDevModeOutput parameter and specify the DM_OUT_BUFFER value. 
Modify the appropriate members of the returned DEVMODE structure and indicate which members were changed by setting the corresponding bits in the dmFields member of the DEVMODE. 
Call DocumentProperties and pass the modified DEVMODE structure back as both the pDevModeInput and pDevModeOutput parameters and specify both the DM_IN_BUFFER and DM_OUT_BUFFER values (which are combined using the OR operator). 
The DEVMODE structure returned by the third call to DocumentProperties can be used as an argument in a call to the CreateDC function.

To create a handle to a printer-device context using the current printer settings, you only need to call DocumentProperties twice, as described above. The first call gets the size of the full DEVMODE and the second call initializes the DEVMODE with the current printer settings. Pass the initialized DEVMODE to CreateDC to obtain the handle to the printer device context.


[解决办法]
http://msdn.microsoft.com/en-us/library/windows/desktop/dd183576(v=vs.85).aspx

热点排行