//////////////////////////////////////////////////////////////////////////////// // // Initializes OptItems to display OEM printer property UI. // static HRESULT hrPrinterPropertyPage(DWORD dwMode, POEMCUIPPARAM pOEMUIParam) { UNREFERENCED_PARAMETER(dwMode); if(NULL == pOEMUIParam->pOEMOptItems) { // Fill in the number of OptItems to create for OEM printer property UI. pOEMUIParam->cOEMOptItems = 1; VERBOSE("hrPrinterPropertyPage() requesting items.\r\n"); } else { DWORD dwError; DWORD dwDeviceValue; DWORD dwType; DWORD dwNeeded; VERBOSE("hrPrinterPropertyPage() fill out items.\r\n"); // Get device settings value from printer. dwError = GetPrinterData(pOEMUIParam->hPrinter, OEMUI_VALUE, &dwType, (PBYTE) &dwDeviceValue, sizeof(dwDeviceValue), &dwNeeded); if( (ERROR_SUCCESS != dwError) || (dwDeviceValue > 100) ) { // Failed to get the device value or value is invalid, just use the default. dwDeviceValue = 0; } // Init UI Callback reference. pOEMUIParam->OEMCUIPCallback = OEMPrinterUICallBack; // Init OEMOptItmes. InitOptItems(pOEMUIParam->pOEMOptItems, pOEMUIParam->cOEMOptItems); // Fill out tree view items. // New section. pOEMUIParam->pOEMOptItems[0].Level = 1; pOEMUIParam->pOEMOptItems[0].Flags = OPTIF_COLLAPSE; pOEMUIParam->pOEMOptItems[0].pName = GetStringResource(pOEMUIParam->hOEMHeap, pOEMUIParam->hModule, IDS_DEV_SECTION); pOEMUIParam->pOEMOptItems[0].Sel = dwDeviceValue; pOEMUIParam->pOEMOptItems[0].pOptType = CreateOptType(pOEMUIParam->hOEMHeap, 2); pOEMUIParam->pOEMOptItems[0].pOptType->Type = TVOT_UDARROW; pOEMUIParam->pOEMOptItems[0].pOptType->pOptParam[1].IconID = 0; pOEMUIParam->pOEMOptItems[0].pOptType->pOptParam[1].lParam = 100; } return S_OK; }
//////////////////////////////////////////////////////////////////////////////// // // Initializes OptItems to display OEM document property UI. // static HRESULT hrDocumentPropertyPage(DWORD dwMode, POEMCUIPPARAM pOEMUIParam) { UNREFERENCED_PARAMETER(dwMode); if(NULL == pOEMUIParam->pOEMOptItems) { // Fill in the number of OptItems to create for OEM document property UI. pOEMUIParam->cOEMOptItems = 1; } else { POEMDEV pOEMDev = (POEMDEV) pOEMUIParam->pOEMDM; // Init UI Callback reference. pOEMUIParam->OEMCUIPCallback = OEMDocUICallBack; // Init OEMOptItmes. InitOptItems(pOEMUIParam->pOEMOptItems, pOEMUIParam->cOEMOptItems); // Fill out tree view items. // New section. pOEMUIParam->pOEMOptItems[0].Level = 1; pOEMUIParam->pOEMOptItems[0].Flags = OPTIF_COLLAPSE; pOEMUIParam->pOEMOptItems[0].pName = GetStringResource(pOEMUIParam->hOEMHeap, pOEMUIParam->hModule, IDS_ADV_SECTION); pOEMUIParam->pOEMOptItems[0].Sel = pOEMDev->dwAdvancedData; pOEMUIParam->pOEMOptItems[0].pOptType= CreateOptType(pOEMUIParam->hOEMHeap, 2); // //Setup the Optional Item // pOEMUIParam->pOEMOptItems[0].pOptType->Type = TVOT_UDARROW; pOEMUIParam->pOEMOptItems[0].pOptType->pOptParam[1].IconID = 0; pOEMUIParam->pOEMOptItems[0].pOptType->pOptParam[1].lParam = 100; // //Allows You to apply Customised help to this Control. // //Notes: // You must use a fully qualified path for pHelpFile // OPTITEM Flags member must have OPTIF_HAS_POIEXT flag set. This indicates that the data in OIEXT is valid. // OPTITEM is allocated on the Heap see (AddCustomUIHelp, GetHelpFile, CreateOIExt) // AddCustomUIHelp (pOEMUIParam->hPrinter, pOEMUIParam->hOEMHeap, pOEMUIParam->hModule, &(pOEMUIParam->pOEMOptItems[0]), CUSDRV_HELPTOPIC_2, IDS_HELPFILE); } return S_OK; }
//////////////////////////////////////////////////////////////////////////////// // // Initializes OptItems to display OEM document property UI. // static HRESULT hrDocumentPropertyPage(DWORD dwMode, POEMCUIPPARAM pOEMUIParam) { UNREFERENCED_PARAMETER(dwMode); if(NULL == pOEMUIParam->pOEMOptItems) { // Fill in the number of OptItems to create for OEM document property UI. pOEMUIParam->cOEMOptItems = 1; VERBOSE("hrDocumentPropertyPage() requesting items.\r\n"); } else { POEMDEV pOEMDev = (POEMDEV) pOEMUIParam->pOEMDM; VERBOSE("hrDocumentPropertyPage() fill out items.\r\n"); // Init UI Callback reference. pOEMUIParam->OEMCUIPCallback = OEMDocUICallBack; // Init OEMOptItmes. InitOptItems(pOEMUIParam->pOEMOptItems, pOEMUIParam->cOEMOptItems); // Fill out tree view items. // New section. pOEMUIParam->pOEMOptItems[0].Level = 1; pOEMUIParam->pOEMOptItems[0].Flags = OPTIF_COLLAPSE; pOEMUIParam->pOEMOptItems[0].pName = GetStringResource(pOEMUIParam->hOEMHeap, pOEMUIParam->hModule, IDS_ADV_SECTION); pOEMUIParam->pOEMOptItems[0].Sel = pOEMDev->dwAdvancedData; pOEMUIParam->pOEMOptItems[0].pOptType = CreateOptType(pOEMUIParam->hOEMHeap, 2); pOEMUIParam->pOEMOptItems[0].pOptType->Type = TVOT_UDARROW; pOEMUIParam->pOEMOptItems[0].pOptType->pOptParam[1].IconID = 0; pOEMUIParam->pOEMOptItems[0].pOptType->pOptParam[1].lParam = 100; } return S_OK; }
//////////////////////////////////////////////////////////////////////////////// // // Initializes OptItems to display OEM document property UI. // static HRESULT hrDocumentPropertyPage(DWORD dwMode, POEMCUIPPARAM pOEMUIParam) { if(NULL == pOEMUIParam->pOEMOptItems) { // Fill in the number of OptItems to create for OEM document property UI. pOEMUIParam->cOEMOptItems = 5; VERBOSE(DLLTEXT("hrDocumentPropertyPage() requesting items.\r\n")); } else if(dwMode == OEMCUIP_DOCPROP) { POEMDEV pOEMDev = (POEMDEV) pOEMUIParam->pOEMDM; VERBOSE(DLLTEXT("hrDocumentPropertyPage() fill out items.\r\n")); // Init UI Callback reference. pOEMUIParam->OEMCUIPCallback = OEMUICallBack; // Init OEMOptItmes. InitOptItems(pOEMUIParam->pOEMOptItems, pOEMUIParam->cOEMOptItems); // Fill out tree view items. // Water Mark Section Name. pOEMUIParam->pOEMOptItems[0].Level = 1; pOEMUIParam->pOEMOptItems[0].Flags = OPTIF_COLLAPSE; pOEMUIParam->pOEMOptItems[0].pName = GetStringResource(pOEMUIParam->hOEMHeap, ghInstance, IDS_WATERMARK); pOEMUIParam->pOEMOptItems[0].Sel = pOEMDev->bEnabled ? 0 : 1; pOEMUIParam->pOEMOptItems[0].pOptType = CreateOptType(pOEMUIParam->hOEMHeap, 2); pOEMUIParam->pOEMOptItems[0].pOptType->Type = TVOT_COMBOBOX; pOEMUIParam->pOEMOptItems[0].pOptType->pOptParam[0].pData = L"Enabled"; pOEMUIParam->pOEMOptItems[0].pOptType->pOptParam[0].IconID = IDI_CPSUI_ON; pOEMUIParam->pOEMOptItems[0].pOptType->pOptParam[1].pData = L"Disabled"; pOEMUIParam->pOEMOptItems[0].pOptType->pOptParam[1].IconID = IDI_CPSUI_OFF; // WaterMark Text. pOEMUIParam->pOEMOptItems[1].Level = 2; pOEMUIParam->pOEMOptItems[1].Flags = 0; pOEMUIParam->pOEMOptItems[1].pName = GetStringResource(pOEMUIParam->hOEMHeap, ghInstance, IDS_TEXT); pOEMUIParam->pOEMOptItems[1].pSel = (LPTSTR) HeapAlloc(pOEMUIParam->hOEMHeap, HEAP_ZERO_MEMORY, MAX_PATH * sizeof(WCHAR)); if (pOEMUIParam->pOEMOptItems[1].pSel == NULL) { ERR(DLLTEXT("hrDocumentPropertyPage() failed to copy water mark text\r\n")); return E_OUTOFMEMORY; } if(FAILED(StringCbCopyW((LPWSTR)pOEMUIParam->pOEMOptItems[1].pSel, MAX_PATH * sizeof(WCHAR), pOEMDev->szWaterMark))) { ERR(DLLTEXT("hrDocumentPropertyPage() failed to copy water mark text\r\n")); } pOEMUIParam->pOEMOptItems[1].pOptType = CreateOptType(pOEMUIParam->hOEMHeap, 2); pOEMUIParam->pOEMOptItems[1].pOptType->Type = TVOT_EDITBOX; pOEMUIParam->pOEMOptItems[1].pOptType->pOptParam[1].IconID = sizeof(((POEMDEV)NULL)->szWaterMark)/sizeof(WCHAR); // WaterMark Font Size. pOEMUIParam->pOEMOptItems[2].Level = 2; pOEMUIParam->pOEMOptItems[2].Flags = 0; pOEMUIParam->pOEMOptItems[2].pName = GetStringResource(pOEMUIParam->hOEMHeap, ghInstance, IDS_FONTSIZE); pOEMUIParam->pOEMOptItems[2].Sel = FontSizeToIndex(pOEMDev->dwFontSize); pOEMUIParam->pOEMOptItems[2].pOptType = CreateOptType(pOEMUIParam->hOEMHeap, 16); pOEMUIParam->pOEMOptItems[2].pOptType->Type = TVOT_COMBOBOX; pOEMUIParam->pOEMOptItems[2].pOptType->pOptParam[0].pData = L"8"; pOEMUIParam->pOEMOptItems[2].pOptType->pOptParam[1].pData = L"9"; pOEMUIParam->pOEMOptItems[2].pOptType->pOptParam[2].pData = L"10"; pOEMUIParam->pOEMOptItems[2].pOptType->pOptParam[3].pData = L"11"; pOEMUIParam->pOEMOptItems[2].pOptType->pOptParam[4].pData = L"12"; pOEMUIParam->pOEMOptItems[2].pOptType->pOptParam[5].pData = L"14"; pOEMUIParam->pOEMOptItems[2].pOptType->pOptParam[6].pData = L"16"; pOEMUIParam->pOEMOptItems[2].pOptType->pOptParam[7].pData = L"18"; pOEMUIParam->pOEMOptItems[2].pOptType->pOptParam[8].pData = L"20"; pOEMUIParam->pOEMOptItems[2].pOptType->pOptParam[9].pData = L"22"; pOEMUIParam->pOEMOptItems[2].pOptType->pOptParam[10].pData = L"24"; pOEMUIParam->pOEMOptItems[2].pOptType->pOptParam[11].pData = L"26"; pOEMUIParam->pOEMOptItems[2].pOptType->pOptParam[12].pData = L"28"; pOEMUIParam->pOEMOptItems[2].pOptType->pOptParam[13].pData = L"36"; pOEMUIParam->pOEMOptItems[2].pOptType->pOptParam[14].pData = L"48"; pOEMUIParam->pOEMOptItems[2].pOptType->pOptParam[15].pData = L"72"; // WaterMark Angle. pOEMUIParam->pOEMOptItems[3].Level = 2; pOEMUIParam->pOEMOptItems[3].Flags = 0; pOEMUIParam->pOEMOptItems[3].pName = GetStringResource(pOEMUIParam->hOEMHeap, ghInstance, IDS_ANGLE); pOEMUIParam->pOEMOptItems[3].Sel = (LONG) pOEMDev->dfRotate; pOEMUIParam->pOEMOptItems[3].pOptType = CreateOptType(pOEMUIParam->hOEMHeap, 2); pOEMUIParam->pOEMOptItems[3].pOptType->Type = TVOT_UDARROW; pOEMUIParam->pOEMOptItems[3].pOptType->pOptParam[1].IconID = 0; pOEMUIParam->pOEMOptItems[3].pOptType->pOptParam[1].lParam = 360; // WaterMark Color. pOEMUIParam->pOEMOptItems[4].Level = 2; pOEMUIParam->pOEMOptItems[4].Flags = 0; pOEMUIParam->pOEMOptItems[4].pName = GetStringResource(pOEMUIParam->hOEMHeap, ghInstance, IDS_COLOR); pOEMUIParam->pOEMOptItems[4].Sel = TextColorToIndex(pOEMDev->crTextColor); pOEMUIParam->pOEMOptItems[4].pOptType = CreateOptType(pOEMUIParam->hOEMHeap, 4); pOEMUIParam->pOEMOptItems[4].pOptType->Type = TVOT_COMBOBOX; pOEMUIParam->pOEMOptItems[4].pOptType->pOptParam[0].pData = GetStringResource(pOEMUIParam->hOEMHeap, ghInstance, IDS_GRAY); pOEMUIParam->pOEMOptItems[4].pOptType->pOptParam[1].pData = GetStringResource(pOEMUIParam->hOEMHeap, ghInstance, IDS_RED); pOEMUIParam->pOEMOptItems[4].pOptType->pOptParam[2].pData = GetStringResource(pOEMUIParam->hOEMHeap, ghInstance, IDS_GREEN); pOEMUIParam->pOEMOptItems[4].pOptType->pOptParam[3].pData = GetStringResource(pOEMUIParam->hOEMHeap, ghInstance, IDS_BLUE); } return S_OK; }
//////////////////////////////////////////////////////////////////////////////// // // Adds property page to Document property sheet. // HRESULT hrOEMDocumentPropertySheets(PPROPSHEETUI_INFO pPSUIInfo, LPARAM lParam, IPrintOemDriverUI* pOEMHelp) { LONG_PTR lResult = 0; HRESULT hrResult = S_OK; VERBOSE("hrOEMDocumentPropertySheets() entry.\r\n"); UNREFERENCED_PARAMETER(pOEMHelp); // Validate parameters. if( (NULL == pPSUIInfo) || (PROPSHEETUI_INFO_VERSION != pPSUIInfo->Version) ) { ERR("hrOEMDocumentPropertySheets() ERROR_INVALID_PARAMETER.\r\n"); // Return invalid parameter error. SetLastError(ERROR_INVALID_PARAMETER); return E_FAIL; } // Do action. switch(pPSUIInfo->Reason) { case PROPSHEETUI_REASON_INIT: { DWORD dwSheets = 0; PCBUSERDATA pUserData = NULL; POEMUIPSPARAM pOEMUIParam = (POEMUIPSPARAM) pPSUIInfo->lParamInit; HANDLE hHeap = pOEMUIParam->hOEMHeap; POEMDEV pOEMDev = (POEMDEV) pOEMUIParam->pOEMDM; COMPROPSHEETUI Sheet; // Init property page. memset(&Sheet, 0, sizeof(COMPROPSHEETUI)); Sheet.cbSize = sizeof(COMPROPSHEETUI); Sheet.Flags = CPSUIF_UPDATE_PERMISSION; Sheet.hInstCaller = ghInstance; Sheet.pCallerName = GetStringResource(hHeap, ghInstance, IDS_NAME); Sheet.pHelpFile = NULL; Sheet.pfnCallBack = OEMDocUICallBack2; Sheet.pDlgPage = CPSUI_PDLGPAGE_TREEVIEWONLY; Sheet.cOptItem = 1; Sheet.IconID = IDI_CPSUI_PRINTER; Sheet.pOptItemName = GetStringResource(hHeap, ghInstance, IDS_SECTION); Sheet.CallerVersion = 0x100; Sheet.OptItemVersion = 0x100; // Init user data. pUserData = (PCBUSERDATA) HeapAlloc(hHeap, HEAP_ZERO_MEMORY, sizeof(CBUSERDATA)); if (NULL == pUserData) { ERR("hrOEMDocumentPropertySheets() failed to allocate user data.\r\n"); hrResult = E_OUTOFMEMORY; goto Exit; } pUserData->hComPropSheet = pPSUIInfo->hComPropSheet; pUserData->pfnComPropSheet = pPSUIInfo->pfnComPropSheet; pUserData->pOEMUIParam = pOEMUIParam; Sheet.UserData = (ULONG_PTR) pUserData; // Create OptItems for page. Sheet.pOptItem = CreateOptItems(hHeap, Sheet.cOptItem); if (NULL == Sheet.pOptItem) { ERR("hrOEMDocumentPropertySheets() failed to allocate OPTITEMs.\r\n"); hrResult = E_OUTOFMEMORY; goto Exit; } // Initialize OptItems Sheet.pOptItem[0].Level = 1; Sheet.pOptItem[0].Flags = OPTIF_COLLAPSE; Sheet.pOptItem[0].pName = GetStringResource(hHeap, ghInstance, IDS_SECTION); Sheet.pOptItem[0].Sel = pOEMDev->dwDriverData; Sheet.pOptItem[0].pOptType = CreateOptType(hHeap, 2); if (NULL == Sheet.pOptItem[0].pOptType) { ERR("hrOEMDocumentPropertySheets() failed to allocate OPTTYPE.\r\n"); hrResult = E_OUTOFMEMORY; goto Exit; } Sheet.pOptItem[0].pOptType->Type = TVOT_UDARROW; Sheet.pOptItem[0].pOptType->pOptParam[1].IconID = 0; Sheet.pOptItem[0].pOptType->pOptParam[1].lParam = 100; // Add property sheets. lResult = pPSUIInfo->pfnComPropSheet(pPSUIInfo->hComPropSheet, CPSFUNC_ADD_PCOMPROPSHEETUI, (LPARAM)&Sheet, (LPARAM)&dwSheets); } break; case PROPSHEETUI_REASON_GET_INFO_HEADER: { PPROPSHEETUI_INFO_HEADER pHeader = (PPROPSHEETUI_INFO_HEADER) lParam; pHeader->pTitle = (LPTSTR)PROP_TITLE; lResult = TRUE; } break; case PROPSHEETUI_REASON_GET_ICON: // No icon lResult = 0; break; case PROPSHEETUI_REASON_SET_RESULT: { PSETRESULT_INFO pInfo = (PSETRESULT_INFO) lParam; lResult = pInfo->Result; } break; case PROPSHEETUI_REASON_DESTROY: lResult = TRUE; break; } Exit: pPSUIInfo->Result = lResult; return hrResult; }
//////////////////////////////////////////////////////////////////////////////// // // Initializes OptItems to display OEM printer property UI. // static HRESULT hrPrinterPropertyPage(DWORD dwMode, POEMCUIPPARAM pOEMUIParam) { UNREFERENCED_PARAMETER(dwMode); if(NULL == pOEMUIParam->pOEMOptItems) { // Fill in the number of OptItems to create for OEM printer property UI. pOEMUIParam->cOEMOptItems = 1; } else { // //This is the second time we are called Now setup the optional items. // DWORD dwError; DWORD dwDeviceValue; DWORD dwType; DWORD dwNeeded; // Get device settings value from printer. dwError = GetPrinterData(pOEMUIParam->hPrinter, OEMUI_VALUE, &dwType, (PBYTE) &dwDeviceValue, sizeof(dwDeviceValue), &dwNeeded); if( (ERROR_SUCCESS != dwError) || (dwDeviceValue > 100) ) { // Failed to get the device value or value is invalid, just use the default. dwDeviceValue = 0; } // Init UI Callback reference. pOEMUIParam->OEMCUIPCallback = OEMPrinterUICallBack; // Init OEMOptItmes. InitOptItems(pOEMUIParam->pOEMOptItems, pOEMUIParam->cOEMOptItems); // Fill out tree view items. // New section. pOEMUIParam->pOEMOptItems[0].Level = 1; pOEMUIParam->pOEMOptItems[0].Flags = OPTIF_COLLAPSE; pOEMUIParam->pOEMOptItems[0].pName = GetStringResource(pOEMUIParam->hOEMHeap, pOEMUIParam->hModule, IDS_DEV_SECTION); pOEMUIParam->pOEMOptItems[0].Sel = dwDeviceValue; pOEMUIParam->pOEMOptItems[0].pOptType = CreateOptType(pOEMUIParam->hOEMHeap, 2); // //Setup the Optional Item // pOEMUIParam->pOEMOptItems[0].pOptType->Type = TVOT_UDARROW; pOEMUIParam->pOEMOptItems[0].pOptType->pOptParam[1].IconID = 0; pOEMUIParam->pOEMOptItems[0].pOptType->pOptParam[1].lParam = 100; // //Allows You to apply Customised help to this Control // AddCustomUIHelp (pOEMUIParam->hPrinter, pOEMUIParam->hOEMHeap, pOEMUIParam->hModule, &(pOEMUIParam->pOEMOptItems[0]), CUSDRV_HELPTOPIC_1, IDS_HELPFILE); } return S_OK; }