//////////////////////////////////////////////////////////////////////////////// // // 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; }
//////////////////////////////////////////////////////////////////////////////// // // Creates and Initializes OptItems. // static POPTITEM CreateOptItems(HANDLE hHeap, DWORD dwOptItems) { POPTITEM pOptItems = NULL; // Allocate memory for OptItems; pOptItems = (POPTITEM) HeapAlloc(hHeap, HEAP_ZERO_MEMORY, sizeof(OPTITEM) * dwOptItems); if(NULL != pOptItems) { InitOptItems(pOptItems, dwOptItems); } else { ERR("CreateOptItems() failed to allocate memory for OPTITEMs!\r\n"); } return pOptItems; }
//////////////////////////////////////////////////////////////////////////////// // // Creates and Initializes OptItems. // static POPTITEM CreateOptItems(HANDLE hHeap, DWORD dwOptItems) { POPTITEM pOptItems = NULL; DWORD cbMemAllocSize; // Allocate memory for OptItems; // Call intsafe.h function to ensure there's no integer overflow or underflow if (SUCCEEDED(DWordMult(sizeof(OPTITEM), dwOptItems, &cbMemAllocSize)) && (NULL != (pOptItems = (POPTITEM) HeapAlloc(hHeap, HEAP_ZERO_MEMORY, cbMemAllocSize)))) { InitOptItems(pOptItems, dwOptItems); } else { ERR("CreateOptItems() failed to allocate memory for OPTITEMs!\r\n"); } return pOptItems; }
//////////////////////////////////////////////////////////////////////////////// // // 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; }
//////////////////////////////////////////////////////////////////////////////// // // 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; }