#include "main.h" #include "resource.h" #include "../nu/DialogSkinner.h" #include "../nu/ChildSizer.h" #include "config.h" #include ".\driveListBox.h" #include ".\infoBox.h" #include ".\primosdk_helper.h" #include static ChildWndResizeItem ripburn_rlist[]= { {IDC_LBL_DRIVES, 0x0000}, {IDC_LIST_DRIVES, 0x0001}, {IDC_LBL_INFO_DRIVE, 0x0010}, {IDC_LBL_INFO_MEDIUM, 0x0011}, {IDC_LBL_DRIVE_LETTER_VAL, 0x0010}, {IDC_LBL_DRIVE_DESCRIPTION_VAL,0x0010}, {IDC_LBL_DRIVE_BUS_VAL, 0x0010}, {IDC_LBL_DRIVE_TYPES_VAL, 0x0010}, {IDC_LBL_MEDIUM_UPDATE, 0x0010}, {IDC_LBL_MEDIUM_CAPACITY_VAL, 0x0010}, {IDC_LBL_MEDIUM_TRACKN_VAL, 0x0010}, {IDC_LBL_MEDIUM_ERASEABLE_VAL, 0x0010}, {IDC_LBL_MEDIUM_RECORDABLE_VAL,0x0010}, {IDC_LBL_MEDIUM_FORMAT_VAL, 0x0010}, {IDC_LBL_MEDIUM_ADDINFO_VAL, 0x0010}, {IDC_LBL_MEDIUM_DISC_VAL, 0x0010}, {IDC_BTN_REFRESH, 0x0101}, }; static DriveListBox *driveListBox = NULL; static MLInfoBox *driveInfo = NULL; static MLInfoBox *mediumInfo = NULL; static HBRUSH lblHeaderBrush = NULL; static HBRUSH lblValueBrush = NULL; static UINT msgNotify = 0; static CHAR activeDrive = 0x00; static void CALLBACK FreeAsyncParam(DM_NOTIFY_PARAM *phdr) { DM_UNITINFO_PARAM *pui = NULL; DM_UNITINFO2_PARAM *pui2 = NULL; if(!phdr) return; switch(phdr->opCode) { case DMOP_UNITINFO: pui = (DM_UNITINFO_PARAM*)phdr; if (pui->pszDesc) free(pui->pszDesc); break; case DMOP_UNITINFO2: pui2 = (DM_UNITINFO2_PARAM*)phdr; if (pui2->pdwTypes) free(pui2->pdwTypes); break; } free(phdr); } static void UpdateDriveInfo(HWND hwndDlg, CHAR cLetter) { DM_NOTIFY_PARAM header = {0}; DM_UNITINFO_PARAM *pui = NULL; DM_UNITINFO2_PARAM *pui2 = NULL; DM_DISCINFOEX_PARAM *pdi = NULL; DM_DISCINFO2_PARAM *pdi2 = NULL; wchar_t message[128] = {0}; activeDrive = cLetter; if(!PrimoSDKHelper_IsLoaded()) { WASABI_API_LNGSTRINGW_BUF(IDS_NO_INFO_AVAILABLE,message,128); } SetDlgItemTextA(hwndDlg, IDC_LBL_DRIVE_LETTER_VAL, &cLetter); SetDlgItemText(hwndDlg, IDC_LBL_DRIVE_DESCRIPTION_VAL, message); SetDlgItemText(hwndDlg, IDC_LBL_DRIVE_BUS_VAL, message); SetDlgItemText(hwndDlg, IDC_LBL_DRIVE_TYPES_VAL, message); SetDlgItemTextA(hwndDlg, IDC_LBL_MEDIUM_DISC_VAL, NULL); SetDlgItemTextA(hwndDlg, IDC_LBL_MEDIUM_CAPACITY_VAL, NULL); SetDlgItemTextA(hwndDlg, IDC_LBL_MEDIUM_FORMAT_VAL, NULL); SetDlgItemTextA(hwndDlg, IDC_LBL_MEDIUM_ERASEABLE_VAL, NULL); SetDlgItemTextA(hwndDlg, IDC_LBL_MEDIUM_RECORDABLE_VAL, NULL); SetDlgItemTextA(hwndDlg, IDC_LBL_MEDIUM_TRACKN_VAL, NULL); SetDlgItemTextA(hwndDlg, IDC_LBL_MEDIUM_ADDINFO_VAL, NULL); if (0 == activeDrive) return; ZeroMemory(&header, sizeof(DM_NOTIFY_PARAM)); header.callback = (INT_PTR)hwndDlg; header.uMsg = msgNotify; header.cLetter = cLetter; header.fnFree = FreeAsyncParam; // request unitinfo pui = (DM_UNITINFO_PARAM*)calloc(1, sizeof(DM_UNITINFO_PARAM)); if (pui) { CopyMemory(&pui->header, &header, sizeof(DM_NOTIFY_PARAM)); pui->header.fFlags = DMF_DESCRIPTION; pui->cchDesc = 128; pui->pszDesc = (CHAR*)calloc(pui->cchDesc, sizeof(CHAR)); DriveManager_GetUnitInfo(pui); } // request unitinfo2 pui2 = (DM_UNITINFO2_PARAM*)calloc(1, sizeof(DM_UNITINFO2_PARAM)); if (pui2) { CopyMemory(&pui2->header, &header, sizeof(DM_NOTIFY_PARAM)); pui2->header.fFlags = DMF_TYPES; pui2->nTypes = 32; pui2->pdwTypes = (DWORD*)calloc(pui2->nTypes, sizeof(DWORD)); DriveManager_GetUnitInfo2(pui2); } // request discinfoex pdi = (DM_DISCINFOEX_PARAM*)calloc(1, sizeof(DM_DISCINFOEX_PARAM)); if (pdi) { CopyMemory(&pdi->header, &header, sizeof(DM_NOTIFY_PARAM)); pdi->header.fFlags = DMF_DRIVEMODE_DAO | DMF_MEDIUMTYPE | DMF_MEDIUMFORMAT | DMF_TRACKS | DMF_USED | DMF_FREE; DriveManager_GetDiscInfoEx(pdi); } // request discinfo2 pdi2 = (DM_DISCINFO2_PARAM*)calloc(1, sizeof(DM_DISCINFO2_PARAM)); if (pdi2) { CopyMemory(&pdi2->header, &header, sizeof(DM_NOTIFY_PARAM)); pdi2->header.fFlags = DMF_MEDIUM | DMF_MEDIUMEX; DriveManager_GetDiscInfo2(pdi2); } } static BOOL CALLBACK EnumerateNavItemsCB(HNAVITEM hItem, DRIVE *pDrive, LPARAM param) { if (!param) return FALSE; if (pDrive) PostMessageW((HWND)param, msgNotify, (WPARAM)DMW_DRIVEADDED, (LPARAM)pDrive->cLetter); return TRUE; } static void SwitchControlVisible(HWND hwndDlg, INT ctrlId, RECT *prcParent, BOOL hide, BOOL bInvalidate = FALSE) { HWND hwndCtrl = GetDlgItem(hwndDlg, ctrlId); if (hwndCtrl) { if (hide) ShowWindow(hwndCtrl, SW_HIDE); else { RECT rc; GetWindowRect(hwndCtrl, &rc); BOOL bVisible = ((prcParent->right > rc.right) && (prcParent->bottom > rc.bottom)); if (bVisible != IsWindowVisible(hwndCtrl)) ShowWindow(hwndCtrl, (bVisible) ? SW_SHOWNORMAL : SW_HIDE); if (bVisible && bInvalidate) InvalidateRect(hwndCtrl, NULL, TRUE); } } } static void ripburn_OnDisplayChanges(HWND hwndDlg) { driveListBox->SetColors(dialogSkinner.Color(WADLG_ITEMBG), dialogSkinner.Color(WADLG_ITEMBG), dialogSkinner.Color(WADLG_ITEMFG), dialogSkinner.Color(WADLG_ITEMFG), dialogSkinner.Color(WADLG_WNDFG)); driveInfo->SetColors( dialogSkinner.Color(WADLG_ITEMBG), dialogSkinner.Color(WADLG_LISTHEADER_FONTCOLOR), dialogSkinner.Color(WADLG_LISTHEADER_BGCOLOR)); mediumInfo->SetColors( dialogSkinner.Color(WADLG_ITEMBG), dialogSkinner.Color(WADLG_LISTHEADER_FONTCOLOR), dialogSkinner.Color(WADLG_LISTHEADER_BGCOLOR)); if (lblHeaderBrush) DeleteObject(lblHeaderBrush); lblHeaderBrush = NULL; if (lblValueBrush) DeleteObject(lblValueBrush); lblValueBrush = NULL; // fixes the view not updating correctly on colour theme changes, etc // NOTE: ideal would be using a LayoutWindows(..) method which would // help to resolve this as things can be offloaded to gen_ml... RECT rc; GetClientRect(hwndDlg, &rc); RedrawWindow(hwndDlg, &rc, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_ALLCHILDREN | RDW_ERASENOW | RDW_UPDATENOW); } static void ripburn_OnInitDialog(HWND hwndDlg) { HWND hwndList = GetDlgItem(hwndDlg, IDC_LIST_DRIVES); driveListBox = new DriveListBox(IDC_LIST_DRIVES); driveListBox->SetImages(plugin.hDllInstance, IDB_LISTBOX_BACK, IDB_LISTITEM_CDDRIVE); driveListBox->Init(hwndList); driveInfo = new MLInfoBox(); driveInfo->Init(GetDlgItem(hwndDlg, IDC_LBL_INFO_DRIVE)); mediumInfo = new MLInfoBox(); mediumInfo->Init(GetDlgItem(hwndDlg, IDC_LBL_INFO_MEDIUM)); UpdateDriveInfo(hwndDlg, 0); childSizer.Init(hwndDlg,ripburn_rlist,sizeof(ripburn_rlist)/sizeof(ripburn_rlist[0])); ripburn_OnDisplayChanges(hwndDlg); if (!msgNotify) msgNotify = RegisterWindowMessageW(L"ripburn_notify_msg"); Plugin_EnumerateNavItems(EnumerateNavItemsCB, (LPARAM)hwndDlg); Plugin_RegisterListener(hwndDlg, msgNotify, 0); } static void ripburn_OnDestroy(HWND hwndDlg) { Plugin_UnregisterListener(hwndDlg); HWND hwndLB = GetDlgItem(hwndDlg, IDC_LIST_DRIVES); if (hwndLB) { INT index = (int)(INT_PTR)SendMessageW(hwndLB, LB_GETCURSEL, 0,0); DWORD data = (LB_ERR != index) ? (DWORD)SendMessageW(hwndLB, LB_GETITEMDATA, index, 0) : 0; if (data) g_config->WriteInt(L"last_drive", (CHAR)(0xFF & data)); } if (lblHeaderBrush) DeleteObject(lblHeaderBrush); lblHeaderBrush = NULL; if (lblValueBrush) DeleteObject(lblValueBrush); lblValueBrush = NULL; if (driveListBox) delete(driveListBox); driveListBox = NULL; if (driveInfo) delete(driveInfo); driveInfo = NULL; if (mediumInfo) delete(mediumInfo); mediumInfo = NULL; } static void ripburn_OnSize(HWND hwndDlg, int cx, int cy) { RECT box; GetWindowRect(GetDlgItem(hwndDlg, IDC_LBL_INFO_DRIVE), &box); BOOL hide = FALSE; SwitchControlVisible(hwndDlg, IDC_LBL_DRIVE_LETTER, &box, FALSE); SwitchControlVisible(hwndDlg, IDC_LBL_DRIVE_DESCRIPTION, &box, FALSE); SwitchControlVisible(hwndDlg, IDC_LBL_DRIVE_BUS, &box, FALSE); SwitchControlVisible(hwndDlg, IDC_LBL_DRIVE_TYPES,&box, FALSE); SwitchControlVisible(hwndDlg, IDC_LBL_DRIVE_LETTER_VAL, &box, hide, TRUE); SwitchControlVisible(hwndDlg, IDC_LBL_DRIVE_DESCRIPTION_VAL, &box, hide, TRUE); SwitchControlVisible(hwndDlg, IDC_LBL_DRIVE_BUS_VAL, &box, hide, TRUE); SwitchControlVisible(hwndDlg, IDC_LBL_DRIVE_TYPES_VAL, &box, hide, TRUE); GetWindowRect(GetDlgItem(hwndDlg, IDC_LBL_INFO_MEDIUM), &box); hide = IsWindowVisible(GetDlgItem(hwndDlg, IDC_LBL_MEDIUM_UPDATE)); if (hide) InvalidateRect(GetDlgItem(hwndDlg, IDC_LBL_MEDIUM_UPDATE), NULL, TRUE); if(PrimoSDKHelper_IsLoaded()) /*{ ShowWindow(GetDlgItem(hwndDlg, IDC_LBL_MEDIUM_UPDATE), SW_SHOW); } else*/ { ShowWindow(GetDlgItem(hwndDlg, IDC_LBL_MEDIUM_UPDATE), SW_HIDE); SwitchControlVisible(hwndDlg, IDC_LBL_MEDIUM_CAPACITY_VAL, &box, hide, TRUE); SwitchControlVisible(hwndDlg, IDC_LBL_MEDIUM_FORMAT_VAL, &box, hide, TRUE); SwitchControlVisible(hwndDlg, IDC_LBL_MEDIUM_ERASEABLE_VAL, &box, hide, TRUE); SwitchControlVisible(hwndDlg, IDC_LBL_MEDIUM_RECORDABLE_VAL,&box, hide, TRUE); SwitchControlVisible(hwndDlg, IDC_LBL_MEDIUM_TRACKN_VAL, &box, hide, TRUE); SwitchControlVisible(hwndDlg, IDC_LBL_MEDIUM_DISC_VAL, &box, hide, TRUE); SwitchControlVisible(hwndDlg, IDC_LBL_MEDIUM_ADDINFO_VAL, &box, hide, TRUE); SwitchControlVisible(hwndDlg, IDC_LBL_MEDIUM_TYPE, &box, hide); SwitchControlVisible(hwndDlg, IDC_LBL_MEDIUM_CAPACITY, &box, hide); SwitchControlVisible(hwndDlg, IDC_LBL_MEDIUM_FORMAT, &box, hide); SwitchControlVisible(hwndDlg, IDC_LBL_MEDIUM_ERASEABLE, &box, hide); SwitchControlVisible(hwndDlg, IDC_LBL_MEDIUM_RECORDABLE, &box, hide); SwitchControlVisible(hwndDlg, IDC_LBL_MEDIUM_TRACKN, &box, hide); SwitchControlVisible(hwndDlg, IDC_LBL_MEDIUM_ADDINFO, &box, hide); } } static int LabelColoring(HDC hdc, HWND hwndCtrl) { switch(GetDlgCtrlID(hwndCtrl)) { case IDC_LBL_DRIVES: if(!lblHeaderBrush) lblHeaderBrush = CreateSolidBrush(dialogSkinner.Color(WADLG_LISTHEADER_BGCOLOR)); SetBkMode(hdc, TRANSPARENT); SetTextColor(hdc, dialogSkinner.Color(WADLG_LISTHEADER_FONTCOLOR)); return (BOOL)(INT_PTR)lblHeaderBrush; case IDC_LBL_MEDIUM_NOINFO: case IDC_LBL_MEDIUM_CAPACITY_VAL: case IDC_LBL_MEDIUM_TRACKN_VAL: case IDC_LBL_MEDIUM_ERASEABLE_VAL: case IDC_LBL_MEDIUM_RECORDABLE_VAL: case IDC_LBL_MEDIUM_FORMAT_VAL: case IDC_LBL_MEDIUM_DISC_VAL: case IDC_LBL_MEDIUM_ADDINFO_VAL: case IDC_LBL_DRIVE_LETTER_VAL: case IDC_LBL_DRIVE_DESCRIPTION_VAL: case IDC_LBL_DRIVE_BUS_VAL: case IDC_LBL_DRIVE_TYPES_VAL: case IDC_LBL_MEDIUM_UPDATE: if(!lblValueBrush) lblValueBrush = CreateSolidBrush(dialogSkinner.Color(WADLG_ITEMBG)); SetBkColor(hdc, dialogSkinner.Color(WADLG_ITEMBG)); SetTextColor(hdc, dialogSkinner.Color(WADLG_ITEMFG)); return (BOOL)(INT_PTR)lblValueBrush; case IDC_LBL_MEDIUM_CAPACITY: case IDC_LBL_MEDIUM_TRACKN: case IDC_LBL_MEDIUM_ERASEABLE: case IDC_LBL_MEDIUM_RECORDABLE: case IDC_LBL_MEDIUM_FORMAT: case IDC_LBL_MEDIUM_ADDINFO: case IDC_LBL_DRIVE_LETTER: case IDC_LBL_DRIVE_DESCRIPTION: case IDC_LBL_DRIVE_BUS: case IDC_LBL_DRIVE_TYPES: case IDC_LBL_MEDIUM_TYPE: if(!lblValueBrush) lblValueBrush = CreateSolidBrush(dialogSkinner.Color(WADLG_ITEMBG)); SetBkMode(hdc, TRANSPARENT); // SetBkColor(hdc, dialogSkinner.Color(WADLG_ITEMBG)); SetTextColor(hdc, dialogSkinner.Color(WADLG_ITEMFG)); return (BOOL)(INT_PTR)lblValueBrush; } return FALSE; } static void Drive_OnAdded(HWND hwndDlg, CHAR cLetter) { HWND hwndLB = GetDlgItem(hwndDlg, IDC_LIST_DRIVES); if (IsWindow(hwndLB)) { wchar_t str[] = {cLetter, 0x00}; INT index = (INT)SendMessageW(hwndLB, LB_ADDSTRING, 0, (LPARAM)str); if (LB_ERR != index) { SendMessageW(hwndLB, LB_SETITEMDATA, index, (LPARAM)cLetter); INT idxSelection = (int)(INT_PTR)SendMessageW(hwndLB, LB_GETCURSEL, 0,0); if (LB_ERR == idxSelection && cLetter == g_config->ReadInt(L"last_drive", cLetter)) { if (LB_ERR != SendMessageW(hwndLB, LB_SETCURSEL, index, 0L)) { UpdateDriveInfo(hwndDlg, cLetter); } } // request unitinfo DM_UNITINFO_PARAM *pui = (DM_UNITINFO_PARAM*)calloc(1, sizeof(DM_UNITINFO_PARAM)); if (pui) { pui->header.callback = (INT_PTR)hwndDlg; pui->header.uMsg = msgNotify; pui->header.cLetter = cLetter; pui->header.fnFree = FreeAsyncParam; DriveManager_GetUnitInfo(pui); } } } } static INT GetListBoxIndex(HWND hwndLB, CHAR cLetter) { wchar_t str[] = {cLetter, 0x00}; return (cLetter && hwndLB) ? (INT)SendMessageW(hwndLB, LB_FINDSTRINGEXACT, (WPARAM)-1, (LPARAM)str) : LB_ERR; } static void Drive_OnRemoved(HWND hwndDlg, CHAR cLetter) { HWND hwndLB = GetDlgItem(hwndDlg, IDC_LIST_DRIVES); if (IsWindow(hwndLB)) { INT index = GetListBoxIndex(hwndLB, cLetter); if (LB_ERR != index) SendMessageW(hwndLB, LB_DELETESTRING, (WPARAM)index, 0L); } } static void GetInfo_Completed(HWND hwndDlg, DM_NOTIFY_PARAM *phdr) { wchar_t szBuffer[256] = {0}; DM_UNITINFO_PARAM *pui = NULL; DM_UNITINFO2_PARAM *pui2 = NULL; DM_DISCINFOEX_PARAM *pdi = NULL; DM_DISCINFO2_PARAM *pdi2 = NULL; switch(phdr->opCode) { case DMOP_UNITINFO: pui = (DM_UNITINFO_PARAM*)phdr; if (0 == phdr->result) { HWND hwndLB = GetDlgItem(hwndDlg, IDC_LIST_DRIVES); if (hwndLB) { INT idxLB = GetListBoxIndex(hwndLB, phdr->cLetter); if (LB_ERR != idxLB) { DWORD data = MAKELONG(phdr->cLetter, pui->dwType); if (data != (DWORD)SendMessage(hwndLB ,LB_GETITEMDATA, idxLB, 0)) { if (LB_ERR != SendMessageW(hwndLB, LB_SETITEMDATA, idxLB, (LPARAM)data)) { RECT rc; SendMessageW(hwndLB, LB_GETITEMRECT, idxLB, (LPARAM)&rc); InvalidateRect(hwndLB, &rc, FALSE); UpdateWindow(hwndLB); } } } } if (activeDrive == phdr->cLetter && pui->pszDesc) SetDlgItemTextA(hwndDlg, IDC_LBL_DRIVE_DESCRIPTION_VAL, (pui->cchDesc > 0) ? pui->pszDesc : ""); } break; case DMOP_UNITINFO2: pui2 = (DM_UNITINFO2_PARAM*)phdr; if (0 == phdr->result && activeDrive == phdr->cLetter) { SetDlgItemTextW(hwndDlg, IDC_LBL_DRIVE_BUS_VAL, Drive_GetBusTypeString(pui2->dwBusType)); szBuffer[0] = 0x00; for (int i = 0; i < pui2->nTypes; i++) { if (0 != i) StringCchCatW(szBuffer, sizeof(szBuffer)/sizeof(wchar_t), L", "); StringCchCatW(szBuffer, sizeof(szBuffer)/sizeof(wchar_t), Drive_GetTypeString(pui2->pdwTypes[i])); } SetDlgItemTextW(hwndDlg, IDC_LBL_DRIVE_TYPES_VAL, szBuffer); } break; case DMOP_DISCINFO: pdi = (DM_DISCINFOEX_PARAM*)phdr; if (0 == phdr->result && activeDrive == phdr->cLetter) { StringCchPrintfW(szBuffer, sizeof(szBuffer)/sizeof(wchar_t), WASABI_API_LNGSTRINGW(IDS_X_OF_X_SECTORS_FREE), pdi->dwFree, pdi->dwUsed + pdi->dwFree); SetDlgItemTextW(hwndDlg, IDC_LBL_MEDIUM_CAPACITY_VAL, szBuffer); SetDlgItemInt(hwndDlg, IDC_LBL_MEDIUM_TRACKN_VAL, pdi->dwTracks, FALSE); SetDlgItemText(hwndDlg, IDC_LBL_MEDIUM_ERASEABLE_VAL, WASABI_API_LNGSTRINGW((pdi->bErasable) ? IDS_YES : IDS_NO)); SetDlgItemText(hwndDlg, IDC_LBL_MEDIUM_RECORDABLE_VAL, WASABI_API_LNGSTRINGW((Medium_IsRecordableType(pdi->dwMediumType)) ? IDS_YES : IDS_NO)); SetDlgItemText(hwndDlg, IDC_LBL_MEDIUM_ADDINFO_VAL, Medium_GetTypeString(pdi->dwMediumType)); SetDlgItemText(hwndDlg, IDC_LBL_MEDIUM_FORMAT_VAL, Medium_GetFormatString(pdi->dwMediumFormat)); } break; case DMOP_DISCINFO2: pdi2 = (DM_DISCINFO2_PARAM*)phdr; if (0 == phdr->result && activeDrive == phdr->cLetter) { SetDlgItemTextW(hwndDlg, IDC_LBL_MEDIUM_DISC_VAL, Medium_GetPhysicalTypeString(pdi2->dwMediumEx)); } break; } } static void View_OnPluginNotify(HWND hwndDlg, WORD wCode, INT_PTR param) { switch(wCode) { case DMW_DRIVEADDED: Drive_OnAdded(hwndDlg, (CHAR)param); break; case DMW_DRIVEREMOVED: Drive_OnRemoved(hwndDlg, (CHAR)param); break; case DMW_MEDIUMARRIVED: case DMW_MEDIUMREMOVED: if ((CHAR)param == activeDrive) UpdateDriveInfo(hwndDlg, activeDrive); break; case DMW_OPCOMPLETED: SendMessage(hwndDlg, WM_SIZE, 0, 0); GetInfo_Completed(hwndDlg, (DM_NOTIFY_PARAM*)param); break; } } static INT_PTR ListBox_OnKeyPressed(HWND hwndDlg, HWND hwndLB, WORD wKey, INT iCurret) { switch(wKey) { case VK_F5: DriveManager_Update(TRUE); return -2; case VK_SPACE: PostMessageW(hwndDlg, WM_COMMAND, MAKEWPARAM(IDC_LIST_DRIVES,LBN_DBLCLK), (LPARAM)hwndLB); return -2; } if (wKey >= 'A' && wKey <= 'Z') { INT index = GetListBoxIndex(hwndLB, (CHAR)wKey); return (LB_ERR != index) ? index : -2; } return -1; // do default } INT_PTR CALLBACK view_ripburnDialogProc(HWND hwndDlg, UINT uMsg, WPARAM wParam,LPARAM lParam) { INT_PTR a; if (uMsg == WM_CTLCOLORSTATIC ) { a = LabelColoring((HDC)wParam, (HWND) lParam); if (a) return a; } a = driveListBox->HandleMsgProc(uMsg,wParam,lParam); if (a) return a; a = dialogSkinner.Handle(hwndDlg,uMsg,wParam,lParam); if (a) return a; switch(uMsg) { case WM_INITDIALOG: ripburn_OnInitDialog(hwndDlg); break; case WM_DISPLAYCHANGE: ripburn_OnDisplayChanges(hwndDlg); break; case WM_SIZE: if (wParam != SIZE_MINIMIZED) { childSizer.Resize(hwndDlg,ripburn_rlist,sizeof(ripburn_rlist)/sizeof(ripburn_rlist[0])); ripburn_OnSize(hwndDlg, LOWORD(lParam), HIWORD(lParam)); } break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_LIST_DRIVES: if (HIWORD(wParam) == LBN_SELCHANGE) { INT index = (int)(INT_PTR)SendMessage((HWND)lParam, LB_GETCURSEL, 0,0); DWORD data = (LB_ERR != index) ? (DWORD)SendMessage((HWND)lParam ,LB_GETITEMDATA, index, 0) : 0; if (data) UpdateDriveInfo(hwndDlg, (CHAR)(0xFF & data)); } else if (HIWORD(wParam) == LBN_DBLCLK) { INT index = (int)(INT_PTR)SendMessage((HWND)lParam, LB_GETCURSEL, 0,0); DWORD data = (LB_ERR != index) ? (DWORD)SendMessage((HWND)lParam ,LB_GETITEMDATA, index, 0) : 0; HNAVITEM hItem = (data) ? Plugin_GetNavItemFromLetter((CHAR)(0xFF & data)) : NULL; if (hItem) MLNavItem_Select(plugin.hwndLibraryParent, hItem); } break; case IDC_BTN_REFRESH: if (HIWORD(wParam) == BN_CLICKED) DriveManager_Update(TRUE); break; } break; case WM_PAINT: { int tab[] = { IDC_LIST_DRIVES | DCW_SUNKENBORDER, IDC_LBL_DRIVES | DCW_SUNKENBORDER, IDC_LBL_INFO_DRIVE | DCW_SUNKENBORDER, IDC_LBL_INFO_MEDIUM | DCW_SUNKENBORDER}; dialogSkinner.Draw(hwndDlg, tab, 4); } return 0; case WM_DESTROY: ripburn_OnDestroy(hwndDlg); break; case WM_ERASEBKGND: return 0; case WM_VKEYTOITEM: return ListBox_OnKeyPressed(hwndDlg, (HWND)lParam, LOWORD(wParam), HIWORD(wParam)); } if (msgNotify == uMsg) View_OnPluginNotify(hwndDlg, (WORD)wParam, (INT_PTR)lParam); return FALSE; }