#include "precomp.h" #include "rsopsec.h" #include // MAXIMUM_SUB_KEY_LENGTH, MAXIMUM_VALUE_NAME_LENGTH, MAXIMUM_DATA_LENGTH int g_nKeys, g_nLock; // indexes of the images HIMAGELIST g_hImageList; int g_iAllowAlways, g_iAllowNever; enum TreeNodeEnum{tneGeneral, tneAccessList, tneRatingSystemRoot, tneRatingSystemInfo, tneRatingSystemNode, tneNone}; struct TreeNode{ TreeNodeEnum tne; void *pData; TreeNode(){} TreeNode(TreeNodeEnum tneInit, void* pDataInit){tne=tneInit;pData=pDataInit;} }; #define NUM_BITMAPS 2 #define CX_BITMAP 16 #define CY_BITMAP 16 /////////////////////////////////////////////////////////////////////////////// // InitTreeViewImageLists - creates an image list, adds three bitmaps to // it, and associates the image list with a tree-view control. // Returns TRUE if successful or FALSE otherwise. // hwndTV - handle of the tree-view control /////////////////////////////////////////////////////////////////////////////// BOOL InitTreeViewImageLists(HWND hwndTV) { BOOL bRet = FALSE; // Create the image list. HIMAGELIST himl = ImageList_Create(CX_BITMAP, CY_BITMAP, FALSE, NUM_BITMAPS, 0); if (himl != NULL) { // Add the open file, closed file, and document bitmaps. HBITMAP hbmp = (HBITMAP) LoadImage(g_hInstance, MAKEINTRESOURCE(IDB_KEYS), IMAGE_BITMAP, 0, 0, LR_LOADTRANSPARENT|LR_DEFAULTCOLOR|LR_CREATEDIBSECTION); g_nKeys = ImageList_Add(himl, hbmp, (HBITMAP) NULL); DeleteObject(hbmp); hbmp = (HBITMAP)LoadImage(g_hInstance, MAKEINTRESOURCE(IDB_LOCK), IMAGE_BITMAP, 0, 0, LR_LOADTRANSPARENT|LR_DEFAULTCOLOR|LR_CREATEDIBSECTION); g_nLock = ImageList_Add(himl, hbmp, (HBITMAP) NULL); DeleteObject(hbmp); // Fail if not all of the images were added. if (ImageList_GetImageCount(himl) >= NUM_BITMAPS) { // Associate the image list with the tree-view control. HIMAGELIST oldHiml = TreeView_SetImageList(hwndTV, himl, TVSIL_NORMAL); if(oldHiml != NULL) ImageList_Destroy(oldHiml); bRet = TRUE; } } return bRet; } /////////////////////////////////////////////////////////////////////////////// void ShowHideWindow(HWND hCtrl, BOOL fEnable) { EnableWindow(hCtrl, fEnable); ShowWindow(hCtrl, fEnable ? SW_SHOW : SW_HIDE); } /////////////////////////////////////////////////////////////////////////////// void DeleteBitmapWindow(HWND *phwnd) { if (*phwnd) { DeleteObject( (HGDIOBJ) SendMessage(*phwnd, STM_GETIMAGE, IMAGE_BITMAP, 0)); DestroyWindow(*phwnd); *phwnd = 0; } } /////////////////////////////////////////////////////////////////////////////// void ControlsShow(HWND hDlg, PRSD *pPRSD, TreeNodeEnum tne) { BOOL fEnable; /*Bitmap placeholders never need to be seen*/ ShowHideWindow(GetDlgItem(hDlg, IDC_PT_T_BITMAP_CATEGORY), FALSE); ShowHideWindow(GetDlgItem(hDlg, IDC_PT_T_BITMAP_LABEL), FALSE); /*Kill old graphic windows*/ DeleteBitmapWindow(&pPRSD->hwndBitmapCategory); DeleteBitmapWindow(&pPRSD->hwndBitmapLabel); /*RatingSystemNode Controls*/ fEnable = (tne == tneRatingSystemNode); ShowHideWindow(GetDlgItem(hDlg, IDC_PT_T_RSN_SDESC), fEnable); ShowHideWindow(GetDlgItem(hDlg, IDC_PT_TB_SELECT), fEnable); ShowHideWindow(GetDlgItem(hDlg, IDC_RATING_LABEL), fEnable); /*RatingSystemInfo Controls*/ fEnable = (tne==tneRatingSystemInfo || tne==tneRatingSystemNode); ShowHideWindow(GetDlgItem(hDlg, IDC_PT_T_RSN_LDESC), fEnable); // ShowHideWindow(GetDlgItem(hDlg, IDC_DETAILSBUTTON), fEnable); EnableDlgItem2(hDlg, IDC_DETAILSBUTTON, FALSE); } /////////////////////////////////////////////////////////////////////////////// HTREEITEM AddOneItem(HWND hwndTree, HTREEITEM hParent, LPTSTR szText, HTREEITEM hInsAfter, LPARAM lpData, int iImage) { HTREEITEM hItem; TV_ITEM tvI; TV_INSERTSTRUCT tvIns; // The .pszText is filled in. tvI.mask = TVIF_TEXT | TVIF_PARAM | TVIF_IMAGE | TVIF_SELECTEDIMAGE; tvI.iSelectedImage = iImage; tvI.iImage = iImage; tvI.pszText = szText; tvI.cchTextMax = StrLen(szText); tvI.lParam = lpData; tvIns.item = tvI; tvIns.hInsertAfter = hInsAfter; tvIns.hParent = hParent; // Insert the item into the tree. hItem = (HTREEITEM)SendMessage(hwndTree, TVM_INSERTITEM, 0, (LPARAM)(LPTV_INSERTSTRUCT)&tvIns); return (hItem); } /////////////////////////////////////////////////////////////////////////////// TreeNode* TreeView_GetSelectionLParam(HWND hwndTree) { TV_ITEM tv; tv.mask = TVIF_HANDLE | TVIF_PARAM; tv.hItem = TreeView_GetSelection(hwndTree); if (SendMessage(hwndTree, TVM_GETITEM, 0, (LPARAM) &tv)) return (TreeNode*) tv.lParam; else return 0; } /////////////////////////////////////////////////////////////////////////////// void PicsDlgInit(HWND hDlg, PRSD *pPRSD) { __try { HWND hwndTree = GetDlgItem(hDlg, IDC_PT_TREE); InitTreeViewImageLists(hwndTree); // get the zone settings for this zone if (NULL != pPRSD->pDRD->ConnectToNamespace()) { HRESULT hr = pPRSD->pDRD->LoadContentRatingsObject(); ComPtr pRatObj = pPRSD->pDRD->GetContentRatingsObject(); if (SUCCEEDED(hr) && NULL != pRatObj) { // ratingSystemFileNames field _variant_t vtValue; hr = pRatObj->Get(L"ratingSystemFileNames", 0, &vtValue, NULL, NULL); if (SUCCEEDED(hr) && !IsVariantNull(vtValue)) { SAFEARRAY *psa = vtValue.parray; LONG lLBound, lUBound, cElements = 0L; hr = SafeArrayGetLBound(psa, 1, &lLBound); if (SUCCEEDED(hr)) { hr = SafeArrayGetUBound(psa, 1, &lUBound); if (SUCCEEDED(hr)) cElements = lUBound - lLBound + 1; } TreeNode *pTN = NULL; BSTR HUGEP *pbstr = NULL; hr = SafeArrayAccessData(psa, (void HUGEP**)&pbstr); if (SUCCEEDED(hr)) { for (long nSys = 0; nSys < cElements; nSys++) { LPCTSTR szSystem = (LPCTSTR)pbstr[nSys]; pTN = new TreeNode(tneRatingSystemInfo, NULL); ASSERT(pTN); AddOneItem(hwndTree, NULL, (LPTSTR)szSystem, TVI_SORT, (LPARAM)pTN, g_nLock); } } SafeArrayUnaccessData(psa); if (cElements > 0) { HTREEITEM hTreeItem = TreeView_GetNextItem(hwndTree, TreeView_GetRoot(hwndTree), TVGN_CHILD); if(NULL != hTreeItem) { TreeView_SelectItem(hwndTree, hTreeItem); pTN = TreeView_GetSelectionLParam(GetDlgItem(hDlg, IDC_PT_TREE)); ControlsShow(hDlg, pPRSD, pTN->tne); } } } } } } __except(TRUE) { } } /////////////////////////////////////////////////////////////////////////////// void KillTree(HWND hwnd, HTREEITEM hTree) { while (hTree != NULL) { /* If this node has any items under it, delete them as well. */ HTREEITEM hChild = TreeView_GetChild(hwnd, hTree); if (hChild != NULL) KillTree(hwnd, hChild); HTREEITEM hNext = TreeView_GetNextSibling(hwnd, hTree); TreeView_SelectItem(hwnd, hTree); delete TreeView_GetSelectionLParam(hwnd); TreeView_DeleteItem(hwnd, hTree); hTree = hNext; } } /////////////////////////////////////////////////////////////////////////////// void PicsDlgUninit(HWND hDlg, PRSD *pPRSD) { HWND hwnd = GetDlgItem(hDlg, IDC_PT_TREE); KillTree(hwnd, TreeView_GetRoot(hwnd)); ControlsShow(hDlg, pPRSD, tneNone); } /////////////////////////////////////////////////////////////////////////////// INT_PTR CALLBACK PicsDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam) { PRSD *pPRSD = NULL; switch (uMsg) { case WM_INITDIALOG: SetWindowLongPtr(hDlg, DWLP_USER, lParam); pPRSD = (PRSD *) ((PROPSHEETPAGE*)lParam)->lParam; PicsDlgInit(hDlg, pPRSD); return TRUE; // Set the initial state case WM_SYSCOLORCHANGE: { InitTreeViewImageLists(GetDlgItem(hDlg, IDC_PT_TREE)); //force the trackbar to redraw its background with the new color pPRSD = (PRSD*) ((PROPSHEETPAGE*)GetWindowLongPtr(hDlg, DWLP_USER))->lParam; TV_ITEM tvm; ZeroMemory(&tvm,sizeof(tvm)); tvm.hItem = TreeView_GetSelection(GetDlgItem(hDlg,IDC_PT_TREE)); tvm.mask = TVIF_PARAM; TreeView_GetItem(GetDlgItem(hDlg,IDC_PT_TREE), &tvm); TreeNode *pTN = (TreeNode*)tvm.lParam; ControlsShow(hDlg, pPRSD, pTN->tne); break; } case WM_HSCROLL: case WM_VSCROLL: pPRSD = (PRSD *) ((PROPSHEETPAGE*)GetWindowLongPtr(hDlg, DWLP_USER))->lParam; switch (LOWORD(wParam)){ case TB_THUMBTRACK: case TB_BOTTOM: case TB_ENDTRACK: case TB_LINEDOWN: case TB_LINEUP: case TB_PAGEDOWN: case TB_PAGEUP: case TB_THUMBPOSITION: case TB_TOP: // NewTrackbarPosition(hDlg, pPRSD); break; } break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_DETAILSBUTTON: break; } return TRUE; case WM_NOTIFY: { NMHDR *lpnm = (NMHDR *) lParam; switch (lpnm->code) { /*save us*/ case PSN_SETACTIVE: break; case PSN_APPLY: case PSN_RESET: // Do this if hit OK or Cancel, not Apply pPRSD = (PRSD *) ((PROPSHEETPAGE*)GetWindowLongPtr(hDlg, DWLP_USER))->lParam; SendMessage(hDlg,WM_SETREDRAW, FALSE,0L); PicsDlgUninit(hDlg, pPRSD); SendMessage(hDlg,WM_SETREDRAW, TRUE,0L); return TRUE; case TVN_ITEMEXPANDING:{ NM_TREEVIEW *pNMT = (NM_TREEVIEW *) lParam; if (pNMT->action == TVE_COLLAPSE) { SetWindowLongPtr(hDlg, DWLP_MSGRESULT, TRUE); return TRUE; //Suppress expanding tree. } break; } case TVN_SELCHANGED: { NM_TREEVIEW *pNMT = (NM_TREEVIEW *) lParam; TreeNode *pTN = ((TreeNode*) pNMT->itemNew.lParam); pPRSD = (PRSD*) ((PROPSHEETPAGE*)GetWindowLongPtr (hDlg, DWLP_USER))->lParam; ControlsShow(hDlg, pPRSD, pTN->tne); return TRUE; } } } break; /* case WM_HELP: SHWinHelpOnDemandWrap((HWND)((LPHELPINFO)lParam)->hItemHandle, ::szHelpFile, HELP_WM_HELP, (DWORD_PTR)(LPSTR)aIds); break; case WM_CONTEXTMENU: SHWinHelpOnDemandWrap((HWND)wParam, ::szHelpFile, HELP_CONTEXTMENU, (DWORD_PTR)(LPVOID)aIds); break; */ } return FALSE; } #define PICSRULES_ALWAYS 1 #define PICSRULES_NEVER 0 /////////////////////////////////////////////////////////////////////////////// void LoadSitesIntoList(HWND hwndList, ComPtr pRatObj, BSTR bstrProp, BOOL fAcceptReject) { __try { _variant_t vtValue; HRESULT hr = pRatObj->Get(bstrProp, 0, &vtValue, NULL, NULL); if (SUCCEEDED(hr) && !IsVariantNull(vtValue)) { SAFEARRAY *psa = vtValue.parray; LONG lLBound, lUBound, cElements = 0L; hr = SafeArrayGetLBound(psa, 1, &lLBound); if (SUCCEEDED(hr)) { hr = SafeArrayGetUBound(psa, 1, &lUBound); if (SUCCEEDED(hr)) cElements = lUBound - lLBound + 1; } BSTR HUGEP *pbstr = NULL; hr = SafeArrayAccessData(psa, (void HUGEP**)&pbstr); if (SUCCEEDED(hr)) { //fill in the listview with known items for (long nSite = 0; nSite < cElements; nSite++) { LPCTSTR szSite = (LPCTSTR)pbstr[nSite]; LV_ITEM lvItem; ZeroMemory(&lvItem, sizeof(lvItem)); lvItem.mask = LVIF_TEXT|LVIF_IMAGE; lvItem.pszText = (LPTSTR)szSite; if (PICSRULES_NEVER == fAcceptReject) lvItem.iImage = g_iAllowNever; else lvItem.iImage = g_iAllowAlways; INT64 iIndex = SendMessage(hwndList, LVM_INSERTITEM, (WPARAM)0, (LPARAM)&lvItem); if (-1 == iIndex) break; } } SafeArrayUnaccessData(psa); } } __except(TRUE) { } } /////////////////////////////////////////////////////////////////////////////// void ApprovedSitesDlgInit(HWND hDlg, PRSD *pPRSD) { __try { HWND hwndList = GetDlgItem(hDlg,IDC_PICSRULESAPPROVEDLIST); // get the zone settings for this zone if (NULL != pPRSD->pDRD->ConnectToNamespace()) { HRESULT hr = pPRSD->pDRD->LoadContentRatingsObject(); ComPtr pRatObj = pPRSD->pDRD->GetContentRatingsObject(); if (SUCCEEDED(hr) && NULL != pRatObj) { // neverViewableSites field LoadSitesIntoList(hwndList, pRatObj, L"neverViewableSites", PICSRULES_NEVER); // alwaysViewableSites field LoadSitesIntoList(hwndList, pRatObj, L"alwaysViewableSites", PICSRULES_ALWAYS); } } // Set the column width to satisfy longest element ListView_SetColumnWidth(hwndList, 0, LVSCW_AUTOSIZE); // set focus to first item in list ListView_SetItemState(hwndList, 0, LVIS_FOCUSED, LVIS_FOCUSED); EnableDlgItem2(hDlg, IDC_PICSRULESAPPROVEDEDIT, FALSE); EnableDlgItem2(hDlg, IDC_PICSRULESAPPROVEDALWAYS, FALSE); EnableDlgItem2(hDlg, IDC_PICSRULESAPPROVEDNEVER, FALSE); EnableDlgItem2(hDlg, IDC_PICSRULESAPPROVEDREMOVE, FALSE); } __except(TRUE) { } } /////////////////////////////////////////////////////////////////////////////// INT_PTR CALLBACK ApprovedSitesDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { PRSD *pPRSD; switch (uMsg) { case WM_INITDIALOG: { SetWindowLongPtr (hDlg, DWLP_USER, lParam); pPRSD = (PRSD *) ((PROPSHEETPAGE*)lParam)->lParam; RECT Rect; GetWindowRect(GetDlgItem(hDlg,IDC_PICSRULESAPPROVEDLIST),&Rect); TEXTMETRIC tm; tm.tmAveCharWidth = 0; HDC hDC = GetDC(hDlg); if (hDC) { GetTextMetrics(hDC,&tm); ReleaseDC(hDlg,hDC); } LV_COLUMN lvColumn; lvColumn.mask = LVCF_FMT|LVCF_WIDTH; lvColumn.fmt = LVCFMT_LEFT; lvColumn.cx = Rect.right - Rect.left -GetSystemMetrics(SM_CXVSCROLL) - GetSystemMetrics(SM_CXSMICON) - tm.tmAveCharWidth; SendDlgItemMessage(hDlg, IDC_PICSRULESAPPROVEDLIST, LVM_INSERTCOLUMN, (WPARAM)0, (LPARAM)&lvColumn); UINT flags = 0; /* if(IS_WINDOW_RTL_MIRRORED(hDlg)) flags |= ILC_MIRROR; */ g_hImageList = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), flags, 2, 0); HICON hIcon = (HICON) LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_ACCEPTALWAYS), IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT|LR_DEFAULTCOLOR|LR_CREATEDIBSECTION); g_iAllowAlways=ImageList_AddIcon(g_hImageList,hIcon); DeleteObject(hIcon); hIcon = (HICON) LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_ACCEPTNEVER), IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT|LR_DEFAULTCOLOR|LR_CREATEDIBSECTION); g_iAllowNever = ImageList_AddIcon(g_hImageList, hIcon); DeleteObject(hIcon); ListView_SetImageList(GetDlgItem(hDlg,IDC_PICSRULESAPPROVEDLIST),g_hImageList,LVSIL_SMALL); //disable the remove button until someone selects something EnableWindow(GetDlgItem(hDlg,IDC_PICSRULESAPPROVEDREMOVE),FALSE); //disable the always and never buttons until someone types something EnableWindow(GetDlgItem(hDlg,IDC_PICSRULESAPPROVEDNEVER),FALSE); EnableWindow(GetDlgItem(hDlg,IDC_PICSRULESAPPROVEDALWAYS),FALSE); ApprovedSitesDlgInit(hDlg, pPRSD); break; } case WM_SYSCOLORCHANGE: { pPRSD=(PRSD *) ((PROPSHEETPAGE*)GetWindowLongPtr(hDlg,DWLP_USER))->lParam; HWND hwndList = GetDlgItem(hDlg,IDC_PICSRULESAPPROVEDLIST); ListView_SetBkColor(hwndList, GetSysColor(COLOR_WINDOW)); UINT flags = 0; /* if(IS_WINDOW_RTL_MIRRORED(hDlg)) flags |= ILC_MIRROR; */ g_hImageList = ImageList_Create(GetSystemMetrics(SM_CXSMICON), GetSystemMetrics(SM_CYSMICON), flags, 2, 0); HICON hIcon = (HICON) LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_ACCEPTALWAYS), IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT|LR_DEFAULTCOLOR|LR_CREATEDIBSECTION); g_iAllowAlways = ImageList_AddIcon(g_hImageList,hIcon); DeleteObject(hIcon); hIcon=(HICON) LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_ACCEPTNEVER), IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT|LR_DEFAULTCOLOR|LR_CREATEDIBSECTION); g_iAllowNever = ImageList_AddIcon(g_hImageList,hIcon); DeleteObject(hIcon); HIMAGELIST hOldImageList = ListView_SetImageList(hwndList, g_hImageList, LVSIL_SMALL); if(hOldImageList != NULL) ImageList_Destroy(hOldImageList); break; } case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_PICSRULESAPPROVEDEDIT: break; case IDC_PICSRULESAPPROVEDNEVER: break; case IDC_PICSRULESAPPROVEDALWAYS: break; case IDC_PICSRULESAPPROVEDREMOVE: break; } return TRUE; case WM_NOTIFY: { NMHDR *lpnm = (NMHDR *) lParam; switch (lpnm->code) { case LVN_ITEMCHANGED: break; /*save us*/ case PSN_APPLY: return TRUE; case PSN_RESET: return TRUE; } } break; /* case WM_HELP: SHWinHelpOnDemandWrap((HWND)((LPHELPINFO)lParam)->hItemHandle, ::szHelpFile, HELP_WM_HELP, (DWORD_PTR)(LPSTR)aIds); break; case WM_CONTEXTMENU: SHWinHelpOnDemandWrap((HWND)wParam, ::szHelpFile, HELP_CONTEXTMENU, (DWORD_PTR)(LPVOID)aIds); break; */ } return FALSE; } /////////////////////////////////////////////////////////////////////////////// void GeneralDlgInit(HWND hDlg, PRSD *pPRSD) { __try { // get the zone settings for this zone if (NULL != pPRSD->pDRD->ConnectToNamespace()) { HRESULT hr = pPRSD->pDRD->LoadContentRatingsObject(); ComPtr pRatObj = pPRSD->pDRD->GetContentRatingsObject(); if (SUCCEEDED(hr) && NULL != pRatObj) { // viewUnknownRatedSites field _variant_t vtValue; hr = pRatObj->Get(L"viewUnknownRatedSites", 0, &vtValue, NULL, NULL); if (SUCCEEDED(hr) && !IsVariantNull(vtValue)) CheckDlgButton(hDlg, IDC_UNRATED, (bool)vtValue ? BST_CHECKED : BST_UNCHECKED); // passwordOverrideEnabled field hr = pRatObj->Get(L"passwordOverrideEnabled", 0, &vtValue, NULL, NULL); if (SUCCEEDED(hr) && !IsVariantNull(vtValue)) CheckDlgButton(hDlg, IDC_PLEASE_MOMMY, (bool)vtValue ? BST_CHECKED : BST_UNCHECKED); } } EnableDlgItem2(hDlg, IDC_UNRATED, FALSE); EnableDlgItem2(hDlg, IDC_PLEASE_MOMMY, FALSE); EnableDlgItem2(hDlg, IDC_CHANGE_PASSWORD, FALSE); EnableDlgItem2(hDlg, IDC_FINDRATINGS, FALSE); EnableDlgItem2(hDlg, IDC_PROVIDER, FALSE); } __except(TRUE) { } } /////////////////////////////////////////////////////////////////////////////// INT_PTR CALLBACK GeneralDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { PRSD *pPRSD; switch (uMsg) { case WM_INITDIALOG: SetWindowLongPtr (hDlg, DWLP_USER, lParam); pPRSD = (PRSD *) ((PROPSHEETPAGE*)lParam)->lParam; GeneralDlgInit(hDlg, pPRSD); break; case WM_USER: break; case WM_COMMAND: switch (LOWORD(wParam)) { /*edit controls/check boxes. User updated these, highlight apply button*/ case IDC_PROVIDER: break; case IDC_FINDRATINGS: break; case IDC_PLEASE_MOMMY: case IDC_UNRATED: break; case IDC_CHANGE_PASSWORD: break; } return TRUE; case WM_NOTIFY: { NMHDR *lpnm = (NMHDR *) lParam; switch (lpnm->code) { /*save us*/ case PSN_APPLY: case PSN_RESET: return TRUE; } } break; /* case WM_HELP: SHWinHelpOnDemandWrap((HWND)((LPHELPINFO)lParam)->hItemHandle, ::szHelpFile, HELP_WM_HELP, (DWORD_PTR)(LPSTR)aIds); break; case WM_CONTEXTMENU: SHWinHelpOnDemandWrap((HWND)wParam, ::szHelpFile, HELP_CONTEXTMENU, (DWORD_PTR)(LPVOID)aIds); break; */ } return FALSE; } /////////////////////////////////////////////////////////////////////////////// void AdvancedDlgInit(HWND hDlg, PRSD *pPRSD) { __try { // get the zone settings for this zone if (NULL != pPRSD->pDRD->ConnectToNamespace()) { HRESULT hr = pPRSD->pDRD->LoadContentRatingsObject(); ComPtr pRatObj = pPRSD->pDRD->GetContentRatingsObject(); if (SUCCEEDED(hr) && NULL != pRatObj) { // selectedRatingsBureau field _variant_t vtValue; hr = pRatObj->Get(L"selectedRatingsBureau", 0, &vtValue, NULL, NULL); if (SUCCEEDED(hr) && !IsVariantNull(vtValue)) { _bstr_t bstrValue = vtValue; HWND hwndCombo = GetDlgItem(hDlg, IDC_3RD_COMBO); INT_PTR nIndex = SendMessage(hwndCombo, CB_ADDSTRING, 0, (LPARAM)(LPCTSTR)bstrValue); SendMessage(hwndCombo, CB_SETCURSEL, nIndex, nIndex); } } } EnableDlgItem2(hDlg, IDC_3RD_COMBO, FALSE); EnableDlgItem2(hDlg, IDC_PICSRULESOPEN, FALSE); EnableDlgItem2(hDlg, IDC_PICSRULESEDIT, FALSE); EnableDlgItem2(hDlg, IDC_PICSRULES_UP, FALSE); EnableDlgItem2(hDlg, IDC_PICSRULES_DOWN, FALSE); } __except(TRUE) { } } /////////////////////////////////////////////////////////////////////////////// INT_PTR CALLBACK AdvancedDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) { PRSD *pPRSD; switch (uMsg) { case WM_INITDIALOG: { SetWindowLongPtr (hDlg, DWLP_USER, lParam); pPRSD = (PRSD *) ((PROPSHEETPAGE*)lParam)->lParam; AdvancedDlgInit(hDlg, pPRSD); HICON hIcon = (HICON) LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_PICSRULES_UP), IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT|LR_DEFAULTCOLOR|LR_CREATEDIBSECTION); SendDlgItemMessage(hDlg,IDC_PICSRULES_UP,BM_SETIMAGE,(WPARAM) IMAGE_ICON,(LPARAM) hIcon); hIcon = (HICON) LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_PICSRULES_DOWN), IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT|LR_DEFAULTCOLOR|LR_CREATEDIBSECTION); SendDlgItemMessage(hDlg,IDC_PICSRULES_DOWN,BM_SETIMAGE,(WPARAM) IMAGE_ICON,(LPARAM) hIcon); break; } case WM_SYSCOLORCHANGE: { HICON hIcon = (HICON) LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_PICSRULES_UP), IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT|LR_DEFAULTCOLOR|LR_CREATEDIBSECTION); HICON hOldIcon = (HICON) SendDlgItemMessage(hDlg,IDC_PICSRULES_UP,BM_SETIMAGE,(WPARAM) IMAGE_ICON,(LPARAM) hIcon); if (NULL != hOldIcon) DeleteObject(hOldIcon); hIcon = (HICON) LoadImage(g_hInstance, MAKEINTRESOURCE(IDI_PICSRULES_DOWN), IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT|LR_DEFAULTCOLOR|LR_CREATEDIBSECTION); hOldIcon = (HICON) SendDlgItemMessage(hDlg,IDC_PICSRULES_DOWN,BM_SETIMAGE,(WPARAM) IMAGE_ICON,(LPARAM) hIcon); if (NULL != hOldIcon) DeleteObject(hOldIcon); break; } case WM_USER: break; case WM_COMMAND: switch (LOWORD(wParam)) { /*edit controls/check boxes. User updated these, highlight apply button*/ case IDC_3RD_COMBO: switch(HIWORD(wParam)) { case CBN_EDITCHANGE: case CBN_SELENDOK: break; } break; case IDC_PICSRULES_LIST: { switch(HIWORD(wParam)) { case LBN_SELCHANGE: break; } break; } case IDC_PICSRULES_UP: break; case IDC_PICSRULES_DOWN: break; case IDC_PICSRULESEDIT: break; case IDC_PICSRULESOPEN: break; } return TRUE; case WM_NOTIFY: { NMHDR *lpnm = (NMHDR *) lParam; switch (lpnm->code) { /*save us*/ case PSN_SETACTIVE: break; case PSN_APPLY: case PSN_RESET: return TRUE; } } break; /* case WM_HELP: SHWinHelpOnDemandWrap((HWND)((LPHELPINFO)lParam)->hItemHandle, ::szHelpFile, HELP_WM_HELP, (DWORD_PTR)(LPSTR)aIds); break; case WM_CONTEXTMENU: SHWinHelpOnDemandWrap((HWND)wParam, ::szHelpFile, HELP_CONTEXTMENU, (DWORD_PTR)(LPVOID)aIds); break; */ } return FALSE; }