From 2cac3f921d81db956745fdc36e591d10094dd467 Mon Sep 17 00:00:00 2001 From: Robert Dickenson Date: Sat, 17 Aug 2002 17:23:18 +0000 Subject: [PATCH] Rudimentiary drivebar support added. svn path=/trunk/; revision=3358 --- rosapps/winfile/drivebar.c | 109 +++++++++++++++++++--------------- rosapps/winfile/framewnd.c | 118 +++++++++++++++++++++++++++++-------- rosapps/winfile/main.c | 26 ++++++-- 3 files changed, 177 insertions(+), 76 deletions(-) diff --git a/rosapps/winfile/drivebar.c b/rosapps/winfile/drivebar.c index feeb090df45..695a78e5fb8 100644 --- a/rosapps/winfile/drivebar.c +++ b/rosapps/winfile/drivebar.c @@ -44,6 +44,7 @@ // Global Variables: // + void ConfigureDriveBar(HWND hDriveBar) { static DWORD dwLogicalDrivesSaved; @@ -53,6 +54,7 @@ void ConfigureDriveBar(HWND hDriveBar) if (dwLogicalDrives != dwLogicalDrivesSaved) { TBBUTTON drivebarBtn = {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP}; + COMBOBOXEXITEM cbei; int btn = 1; PTSTR p; int count = SendMessage(hDriveBar, TB_BUTTONCOUNT, 0, 0); @@ -71,8 +73,11 @@ void ConfigureDriveBar(HWND hDriveBar) drivebarBtn.idCommand = ID_DRIVE_FIRST; for (p = Globals.drives; *p;) { // insert drive letter - TCHAR b[3] = { tolower(*p) }; - SendMessage(hDriveBar, TB_ADDSTRING, 0, (LPARAM)b); +// TCHAR b[3] = { tolower(*p) }; +// SendMessage(hDriveBar, TB_ADDSTRING, 0, (LPARAM)b); + TCHAR szVolumeNameBuffer[MAX_PATH]; + TCHAR vol[MAX_PATH] = { tolower(*p) }; + SendMessage(hDriveBar, TB_ADDSTRING, 0, (LPARAM)vol); switch(GetDriveType(p)) { case DRIVE_REMOVABLE: drivebarBtn.iBitmap = 1; break; case DRIVE_CDROM: drivebarBtn.iBitmap = 3; break; @@ -81,70 +86,80 @@ void ConfigureDriveBar(HWND hDriveBar) default:/*DRIVE_FIXED*/ drivebarBtn.iBitmap = 2; } SendMessage(hDriveBar, TB_INSERTBUTTON, btn, (LPARAM)&drivebarBtn); + + vol[0] = toupper(vol[0]); + vol[1] = _T(':'); vol[2] = _T('\\'); vol[3] = _T('\0'); + if (drivebarBtn.iBitmap != 1 /*DRIVE_REMOVABLE*/ && + GetVolumeInformation(vol, szVolumeNameBuffer, + sizeof(szVolumeNameBuffer)/sizeof(TCHAR), + NULL, NULL, NULL, NULL, 0) && + szVolumeNameBuffer[0] != _T('\0')) { + vol[2] = _T(' '); vol[3] = _T('['); vol[4] = _T('\0'); + _tcscat(vol, szVolumeNameBuffer); + _tcscat(vol, _T("] ")); + } else { + vol[2] = _T(' '); + } +// cbei.mask = CBEIF_TEXT | CBEIF_INDENT | CBEIF_IMAGE| CBEIF_SELECTEDIMAGE; + cbei.mask = CBEIF_TEXT/* | CBEIF_IMAGE*/; + cbei.iItem = btn - 1; + cbei.pszText = vol; + cbei.cchTextMax = _tcslen(cbei.pszText); + cbei.iImage = drivebarBtn.iBitmap; +// cbei.iSelectedImage = IInf[iCnt].iSelectedImage; +// cbei.iIndent = IInf[iCnt].iIndent; + SendMessage(Globals.hDriveCombo, CBEM_INSERTITEM, 0, (LPARAM)&cbei); + drivebarBtn.idCommand++; drivebarBtn.iString++; while(*p++); -// -// SendMessage(Globals.hDriveCombo, CB_INSERTSTRING, btn, (LPARAM)b); -// SendMessage(Globals.hDriveCombo, CB_ADDSTRING, 0, (LPARAM)b); -// SendMessage(Globals.hDriveCombo, WM_SETTEXT, 0, (LPARAM)lpszWord); -// SendMessage(Globals.hDriveCombo, CB_ADDSTRING, 0, (LPARAM)&b); -// ++btn; } dwLogicalDrivesSaved = dwLogicalDrives; - // SendMessage(Globals.hDriveCombo, CB_SHOWDROPDOWN, (WPARAM)TRUE, (LPARAM)0); } +} +/* #ifndef __GNUC__ + { +#define MAX_ITEMS 7 - { - COMBOBOXEXITEM cbei; - int iCnt; +typedef struct { + int iImage; + int iSelectedImage; + int iIndent; + LPTSTR pszText; +} ITEMINFO, *PITEMINFO; - typedef struct { - int iImage; - int iSelectedImage; - int iIndent; - LPTSTR pszText; - } ITEMINFO, *PITEMINFO; - -#define MAX_ITEMS 15 - - ITEMINFO IInf[] = { - { 0, 3, 0, _T("first")}, - { 1, 4, 1, _T("second")}, - { 2, 5, 2, _T("third")}, - { 0, 3, 0, _T("fourth")}, - { 1, 4, 1, _T("fifth")}, +ITEMINFO IInf[] = { + { 0, 3, 0, _T("A:")}, + { 1, 4, 1, _T("C: [SYSTEM]")}, + { 2, 5, 2, _T("D:")}, + { 0, 3, 0, _T("E: [SOFT_RAID_1]")}, + { 1, 4, 1, _T("F: [DATAVOL]")}, { 2, 5, 2, _T("sixth")}, { 0, 3, 0, _T("seventh")}, - { 1, 4, 1, _T("eighth")}, - { 2, 5, 2, _T("ninth")}, - { 0, 3, 0, _T("tenth")}, - { 1, 4, 1, _T("eleventh")}, - { 2, 5, 2, _T("twelfth")}, - { 0, 3, 0, _T("thirteenth")}, - { 1, 4, 1, _T("fourteenth")}, - { 2, 5, 2, _T("fifteenth")} - }; +}; - for (iCnt = 0; iCnt < MAX_ITEMS; iCnt++) { + COMBOBOXEXITEM cbei; + int iCnt; - cbei.mask = CBEIF_TEXT | CBEIF_INDENT | CBEIF_IMAGE| CBEIF_SELECTEDIMAGE; + for (iCnt = 0; iCnt < MAX_ITEMS; iCnt++) { +// cbei.mask = CBEIF_TEXT | CBEIF_INDENT | CBEIF_IMAGE| CBEIF_SELECTEDIMAGE; + cbei.mask = CBEIF_TEXT; cbei.iItem = iCnt; cbei.pszText = IInf[iCnt].pszText; - cbei.cchTextMax = sizeof(IInf[iCnt].pszText); - cbei.iImage = IInf[iCnt].iImage; - cbei.iSelectedImage = IInf[iCnt].iSelectedImage; - cbei.iIndent = IInf[iCnt].iIndent; - } - - +// cbei.cchTextMax = sizeof(IInf[iCnt].pszText); + cbei.cchTextMax = _tcslen(IInf[iCnt].pszText); +// cbei.iImage = IInf[iCnt].iImage; +// cbei.iSelectedImage = IInf[iCnt].iSelectedImage; +// cbei.iIndent = IInf[iCnt].iIndent; SendMessage(Globals.hDriveCombo, CBEM_INSERTITEM, 0, (LPARAM)&cbei); - } -#endif + } + } } +#endif + */ void _GetFreeSpaceEx(void) { diff --git a/rosapps/winfile/framewnd.c b/rosapps/winfile/framewnd.c index f91ea135b9e..68f12622d9e 100644 --- a/rosapps/winfile/framewnd.c +++ b/rosapps/winfile/framewnd.c @@ -371,6 +371,48 @@ static void toggle_child(HWND hWnd, UINT cmd, HWND hchild) resize_frame_client(hWnd); } +static BOOL cmd_drive_select(HWND hWnd, UINT cmd) +{ + TCHAR drv[_MAX_DRIVE]; + //TCHAR path[MAX_PATH]; + //ChildWnd* pChildWnd; + LPCTSTR root = Globals.drives; + int i; + for (i = cmd - ID_DRIVE_FIRST; i--; root++) + while (*root) + root++; + if (activate_drive_window(root)) { + return TRUE; + } + _tsplitpath(root, drv, 0, 0, 0); + if (!SetCurrentDirectory(drv)) { + display_error(hWnd, GetLastError()); + return TRUE; + } + //GetCurrentDirectory(MAX_PATH, path); //@@ letztes Verzeichnis pro Laufwerk speichern + //CreateChildWindow(path); + CreateChildWindow(cmd - ID_DRIVE_FIRST); +// pChildWnd = alloc_child_window(path); +// if (!create_child_window(pChildWnd)) +// free(pChildWnd); + return FALSE; +} + +static BOOL OnComboBoxCmd(HWND hWnd, WPARAM wParam) +{ + int index; + + switch (HIWORD(wParam)) { + case CBN_SELCHANGE: + index = SendMessage(Globals.hDriveCombo, CB_GETCURSEL, 0, 0); + cmd_drive_select(hWnd, index + ID_DRIVE_FIRST); + break; + default: + return FALSE; + } + return TRUE; +} + //////////////////////////////////////////////////////////////////////////////// // // FUNCTION: _CmdWndProc(HWND, unsigned, WORD, LONG) @@ -388,30 +430,11 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) // if (SendMessage(hwndClient, WM_DISPATCH_COMMAND, wParam, lParam)) // return 0; + if ((HWND)lParam == Globals.hDriveCombo) { + return OnComboBoxCmd(hWnd, wParam); + } if (cmd >= ID_DRIVE_FIRST && cmd <= (ID_DRIVE_FIRST + 0xFF)) { - TCHAR drv[_MAX_DRIVE]; - //TCHAR path[MAX_PATH]; - //ChildWnd* pChildWnd; - LPCTSTR root = Globals.drives; - int i; - for (i = cmd - ID_DRIVE_FIRST; i--; root++) - while (*root) - root++; - if (activate_drive_window(root)) { - return TRUE; - } - _tsplitpath(root, drv, 0, 0, 0); - if (!SetCurrentDirectory(drv)) { - display_error(hWnd, GetLastError()); - return TRUE; - } - //GetCurrentDirectory(MAX_PATH, path); //@@ letztes Verzeichnis pro Laufwerk speichern - //CreateChildWindow(path); - CreateChildWindow(cmd - ID_DRIVE_FIRST); - -// pChildWnd = alloc_child_window(path); -// if (!create_child_window(pChildWnd)) -// free(pChildWnd); + cmd_drive_select(hWnd, cmd); } else { switch (cmd) { case ID_WINDOW_CLOSEALL: @@ -422,7 +445,6 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) if (!SendMessage(hChildWnd, WM_QUERYENDSESSION, 0, 0)) SendMessage(Globals.hMDIClient, WM_MDIDESTROY, (WPARAM)hChildWnd, 0); break; - case ID_DISK_COPY_DISK: CopyDisk(hWnd); break; @@ -699,6 +721,44 @@ typedef struct _TBBUTTON { return 0; } +static LRESULT OnDriveBoxNotify(HWND hWnd, WPARAM wParam, LPARAM lParam) +{ + LPNMHDR nmhdr = (LPNMHDR)lParam; + +// if (nmhdr->code == NM_HOVER || nmhdr->code == NM_NCHITTEST) return 0; + +// switch (((LPNMHDR)lParam)->code) { + switch (nmhdr->code) { + case NM_OUTOFMEMORY: + case NM_CLICK: + case NM_DBLCLK: + case NM_RETURN: + case NM_RCLICK: + case NM_RDBLCLK: + case NM_SETFOCUS: + case NM_KILLFOCUS: + break; + +#if (_WIN32_IE >= 0x0300) + case NM_CUSTOMDRAW: + case NM_HOVER: + break; +#endif + +#if (_WIN32_IE >= 0x0400) + case NM_NCHITTEST: + case NM_KEYDOWN: + case NM_RELEASEDCAPTURE: + case NM_SETCURSOR: + case NM_CHAR: + break; +#endif + default: + break; + } + return 0; +} + //////////////////////////////////////////////////////////////////////////////// // // FUNCTION: FrameWndProc(HWND, unsigned, WORD, LONG) @@ -731,7 +791,15 @@ LRESULT CALLBACK FrameWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa case WM_NOTIFY: - if (MsgNotify(hWnd, message, wParam, lParam)) return TRUE; + if (((LPNMHDR)lParam)->idFrom == IDW_DRIVEBOX) { +// return OnDriveBoxNotify(hWnd, wParam, lParam); + return OnDriveBoxNotify(hWnd, wParam, lParam); + //return TRUE; + } + + if (((LPNMHDR)lParam)->idFrom == IDW_TOOLBAR) { + if (MsgNotify(hWnd, message, wParam, lParam)) return TRUE; + } // return MsgNotify(hWnd, message, wParam, lParam); switch (((LPNMHDR)lParam)->code) { #ifdef _MSC_VER diff --git a/rosapps/winfile/main.c b/rosapps/winfile/main.c index 873c7008a3d..ddc6c0c8858 100644 --- a/rosapps/winfile/main.c +++ b/rosapps/winfile/main.c @@ -139,9 +139,13 @@ BOOL InitInstance(HINSTANCE hInstance, int nCmdShow) INITCOMMONCONTROLSEX icc = { sizeof(INITCOMMONCONTROLSEX), - ICC_BAR_CLASSES + ICC_BAR_CLASSES | ICC_USEREX_CLASSES }; +// icex.dwSize = sizeof(INITCOMMONCONTROLSEX); +// icex.dwICC = ICC_USEREX_CLASSES; + + // TCHAR path[MAX_PATH]; HDC hdc = GetDC(0); @@ -267,13 +271,27 @@ typedef struct _TBBUTTON { // Create the edit control. Notice that the parent of // the toolbar, is used as the parent of the edit control. //hWndEdit = CreateWindowEx(0L, WC_COMBOBOXEX, NULL, WS_CHILD | WS_BORDER | WS_VISIBLE - Globals.hDriveCombo = CreateWindowEx(0L, _T("ComboBox"), NULL, WS_CHILD | WS_BORDER | WS_VISIBLE - | CBS_DROPDOWNLIST | ES_LEFT | ES_AUTOVSCROLL | ES_MULTILINE, +#if 0 + Globals.hDriveCombo = CreateWindowEx(0L, _T("ComboBox"), NULL, + WS_CHILD | WS_BORDER | WS_VISIBLE | CBS_DROPDOWNLIST | ES_LEFT | ES_AUTOVSCROLL | ES_MULTILINE, 10, 0, DRIVEBOX_WIDTH, DRIVEBOX_HEIGHT, Globals.hMainWnd, (HMENU)IDW_DRIVEBOX, hInstance, 0); +#else + Globals.hDriveCombo = CreateWindowEx(0, WC_COMBOBOXEX, NULL, + WS_CHILD | WS_BORDER | WS_VISIBLE | CBS_DROPDOWN, + // No size yet--resize after setting image list. + 10, // Vertical position of Combobox + 0, // Horizontal position of Combobox + 200, // Sets the width of Combobox + 100, // Sets the height of Combobox + Globals.hMainWnd, + (HMENU)IDW_DRIVEBOX, + hInstance, + NULL); +#endif // Set the toolbar window as the parent of the edit control // window. You must set the toolbar as the parent of the edit // control for it to appear embedded in the toolbar. - SetParent (Globals.hDriveCombo, Globals.hToolBar); + SetParent(Globals.hDriveCombo, Globals.hToolBar); } }