[QCKLNCH]

-Added en-US.rc
-Localized Menu resource.
-Added a string table and localized some strings.
-Major fixes like removing IDeskBar.
-Minor suggestions fixed.

CR-122 (https://code.reactos.org/cru/CR-122#details)

PS: Thank you everyone for spending your time and giving a thorough review. :)

svn path=/branches/GSoC_2017/shellext/; revision=75276
This commit is contained in:
Shriraj Sawant 2017-07-04 18:37:00 +00:00
parent 180321d87a
commit c8c4bcfa52
8 changed files with 121 additions and 154 deletions

View file

@ -15,6 +15,13 @@
WINE_DEFAULT_DEBUG_CHANNEL(qcklnch);
// ***Extras***
BOOL WINAPI _ILIsDesktop(LPCITEMIDLIST pidl)
{
return (pidl == NULL || pidl->mkid.cb == 0);
}
//*****************************************************************************************
// *** CISFBand ***
@ -64,16 +71,18 @@ LRESULT CISFBand::OnRButtonUp(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHa
int index = SendMessage(m_hWnd, TB_HITTEST, 0, (LPARAM)&pt);
bool chk = SendMessage(m_hWnd, TB_GETBUTTON, abs(index), (LPARAM)&tb);
CComHeapPtr<ITEMIDLIST> pidl((LPITEMIDLIST)tb.dwData);
LPITEMIDLIST pidl = (LPITEMIDLIST)tb.dwData;
if (chk)
{
ClientToScreen(&pt);
hr = m_pISF->GetUIObjectOf(m_hWnd, 1, &pidl, IID_NULL_PPV_ARG(IContextMenu, &picm));
if (FAILED_UNEXPECTEDLY(hr)) return hr;
if (FAILED_UNEXPECTEDLY(hr))
return hr;
hr = picm->QueryContextMenu(fmenu, 0, 1, 0x7FFF, CMF_DEFAULTONLY);
if (FAILED_UNEXPECTEDLY(hr)) return hr;
if (FAILED_UNEXPECTEDLY(hr))
return hr;
int id = TrackPopupMenuEx(fmenu, TPM_LEFTALIGN | TPM_BOTTOMALIGN | TPM_RETURNCMD, pt.x, pt.y, m_hWnd, 0);
if (id > 0)
@ -111,9 +120,9 @@ HRESULT CISFBand::CreateSimpleToolbar(HWND hWndParent)
// Create the toolbar.
m_hWnd = CreateWindowEx(0, TOOLBARCLASSNAME, NULL,
WS_CHILD | TBSTYLE_FLAT | TBSTYLE_LIST | CCS_NORESIZE | CCS_NODIVIDER, CW_USEDEFAULT, CW_USEDEFAULT, 0, 0,
hWndParent, NULL, 0, NULL);
hWndParent, NULL, 0, NULL);
if (m_hWnd == NULL)
return E_FAIL;
return E_FAIL;
// Set the image list.
HIMAGELIST* piml;
@ -127,7 +136,7 @@ HRESULT CISFBand::CreateSimpleToolbar(HWND hWndParent)
// Enumerate objects
CComPtr<IEnumIDList> pEndl;
CComHeapPtr<ITEMIDLIST> pidl;
LPITEMIDLIST pidl;
STRRET stret;
ULONG count = 0;
hr = m_pISF->EnumObjects(0, SHCONTF_FOLDERS, &pEndl);
@ -149,8 +158,9 @@ HRESULT CISFBand::CreateSimpleToolbar(HWND hWndParent)
else
StrRetToBuf(&stret, pidl, sz, _countof(sz));
TBBUTTON tb = { MAKELONG(index, 0), i, TBSTATE_ENABLED, buttonStyles,{ 0 }, (DWORD_PTR)*&pidl, (INT_PTR)sz };
TBBUTTON tb = { MAKELONG(index, 0), i, TBSTATE_ENABLED, buttonStyles,{ 0 }, (DWORD_PTR)pidl, (INT_PTR)sz };
SendMessage(m_hWnd, TB_INSERTBUTTONW, 0, (LPARAM)&tb);
//CoTaskMemFree(pidl);
}
// Resize the toolbar, and then show it.
@ -315,29 +325,6 @@ HRESULT CISFBand::CreateSimpleToolbar(HWND hWndParent)
return E_FAIL;
}
/*****************************************************************************/
// *** IDeskBar ***
STDMETHODIMP CISFBand::SetClient(IN IUnknown *punkClient)
{
TRACE("IDeskBar::SetClient(0x%p)\n", punkClient);
return E_NOTIMPL;
}
STDMETHODIMP CISFBand::GetClient(OUT IUnknown **ppunkClient)
{
TRACE("IDeskBar::GetClient(0x%p)\n", ppunkClient);
return E_NOTIMPL;
}
STDMETHODIMP CISFBand::OnPosRectChangeDB(IN RECT *prc)
{
TRACE("IDeskBar::OnPosRectChangeDB(0x%p=(%d,%d,%d,%d))\n", prc, prc->left, prc->top, prc->right, prc->bottom);
return S_OK;
}
/*****************************************************************************/
// *** IPersistStream ***
STDMETHODIMP CISFBand::GetClassID(OUT CLSID *pClassID)
@ -400,9 +387,19 @@ HRESULT CISFBand::CreateSimpleToolbar(HWND hWndParent)
STDMETHODIMP CISFBand::OnWinEvent(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *theResult)
{
UNIMPLEMENTED;
return E_NOTIMPL;
/* switch (uMsg)
{
case WM_COMMAND:
{
MessageBox(L"Button Clicked", L"Test", MB_OKCANCEL | MB_ICONINFORMATION);
break;
}
}
return DefSubclassProc(hWnd, uMsg, wParam, lParam);*/
UNIMPLEMENTED;
return E_NOTIMPL;
}
STDMETHODIMP CISFBand::IsWindowOwner(HWND hWnd)
@ -445,10 +442,7 @@ HRESULT CISFBand::CreateSimpleToolbar(HWND hWndParent)
STDMETHODIMP CISFBand::InitializeSFB(IShellFolder *psf, PCIDLIST_ABSOLUTE pidl)
{
CComHeapPtr<ITEMIDLIST> pidlRoot;
SHGetSpecialFolderLocation(0, CSIDL_DESKTOP, &pidlRoot);
if (pidl == NULL || !psf->CompareIDs(0x80000000L, pidl, pidlRoot))
if (_ILIsDesktop(pidl))
{
m_pISF = psf;
m_pidl = ILClone(pidl);

View file

@ -13,8 +13,7 @@ class CISFBand :
public CComCoClass<CISFBand>,
public CComObjectRootEx<CComMultiThreadModelNoCS>,
public IObjectWithSite,
public IDeskBand,
public IDeskBar,
public IDeskBand,
public IPersistStream,
public IWinEventHandler,
public IOleCommandTarget,
@ -82,20 +81,6 @@ public:
IN DWORD dwBandID,
IN DWORD dwViewMode,
IN OUT DESKBANDINFO *pdbi
);
// IDeskBar
virtual STDMETHODIMP GetClient(
OUT IUnknown **ppunkClient
);
virtual STDMETHODIMP OnPosRectChangeDB(
IN LPRECT prc
);
virtual STDMETHODIMP SetClient(
IN OPTIONAL IUnknown *punkClient
);
// IPersistStream
@ -208,6 +193,7 @@ public:
BEGIN_COM_MAP(CISFBand)
COM_INTERFACE_ENTRY2_IID(IID_IOleWindow, IOleWindow, IDeskBand)
COM_INTERFACE_ENTRY2_IID(IID_IDockingWindow, IDockingWindow, IDeskBand)
COM_INTERFACE_ENTRY_IID(IID_IDeskBand, IDeskBand)
COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite, IObjectWithSite)
COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist)

View file

@ -50,7 +50,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
SHGetSpecialFolderLocation(hwnd, nCSIDL, &pidlRoot);
}
BROWSEINFO bi = { hwnd, pidlRoot, path, L"Choose a folder", 0, NULL, 0, 0 };
CString biTitle((LPCSTR)IDS_BROWSEINFO_TITLE);
BROWSEINFO bi = { hwnd, pidlRoot, path, biTitle, 0, NULL, 0, 0 };
LPITEMIDLIST pidlSelected = SHBrowseForFolder(&bi);
return pidlSelected;
@ -68,18 +69,22 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
HRESULT CQuickLaunchBand::FinalConstruct()
{
HRESULT hr = CISFBand_CreateInstance(IID_PPV_ARG(IUnknown, &m_punkISFB));
if (FAILED_UNEXPECTEDLY(hr)) return hr;
if (FAILED_UNEXPECTEDLY(hr))
return hr;
CComPtr<IShellFolderBand> pISFB;
hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IShellFolderBand, &pISFB));
if (FAILED_UNEXPECTEDLY(hr)) return hr;
if (FAILED_UNEXPECTEDLY(hr))
return hr;
CComPtr<IShellFolder> pISF;
hr = SHGetDesktopFolder(&pISF);
if (FAILED_UNEXPECTEDLY(hr)) return hr;
if (FAILED_UNEXPECTEDLY(hr))
return hr;
CComHeapPtr<ITEMIDLIST> pidl(PidlBrowse(m_hWndBro, CSIDL_DESKTOP));
if (pidl == NULL) return E_FAIL;
if (pidl == NULL)
return E_FAIL;
pISFB->InitializeSFB(pISF, pidl);
return hr;
@ -93,7 +98,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IObjectWithSite> pIOWS;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IObjectWithSite, &pIOWS));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pIOWS->SetSite(pUnkSite);
}
@ -105,7 +111,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IObjectWithSite> pIOWS;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IObjectWithSite, &pIOWS));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pIOWS->GetSite(riid, ppvSite);
}
@ -117,7 +124,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IDeskBand> pIDB;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IDeskBand, &pIDB));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pIDB->GetWindow(phwnd);
}
@ -127,7 +135,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IDeskBand> pIDB;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IDeskBand, &pIDB));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pIDB->ContextSensitiveHelp(fEnterMode);
}
@ -137,7 +146,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IDeskBand> pIDB;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IDeskBand, &pIDB));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pIDB->ShowDW(bShow);
}
@ -147,7 +157,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IDeskBand> pIDB;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IDeskBand, &pIDB));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pIDB->CloseDW(dwReserved);
}
@ -157,7 +168,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IDeskBand> pIDB;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IDeskBand, &pIDB));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pIDB->ResizeBorderDW(prcBorder, punkToolbarSite, fReserved);
}
@ -169,49 +181,12 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IDeskBand> pIDB;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IDeskBand, &pIDB));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pIDB->GetBandInfo(dwBandID, dwViewMode, pdbi);
}
/*****************************************************************************/
// IDeskBar
STDMETHODIMP CQuickLaunchBand::SetClient(IN IUnknown *punkClient)
{
TRACE("IDeskBar::SetClient(0x%p)\n", punkClient);
// Internal CISFBand Calls
CComPtr<IDeskBar> pIDB;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IDeskBar, &pIDB));
if (FAILED(hr)) return hr;
return pIDB->SetClient(punkClient);
}
STDMETHODIMP CQuickLaunchBand::GetClient(OUT IUnknown **ppunkClient)
{
TRACE("IDeskBar::GetClient(0x%p)\n", ppunkClient);
// Internal CISFBand Calls
CComPtr<IDeskBar> pIDB;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IDeskBar, &pIDB));
if (FAILED(hr)) return hr;
return pIDB->GetClient(ppunkClient);
}
STDMETHODIMP CQuickLaunchBand::OnPosRectChangeDB(IN RECT *prc)
{
TRACE("IDeskBar::OnPosRectChangeDB(0x%p=(%d,%d,%d,%d))\n", prc, prc->left, prc->top, prc->right, prc->bottom);
// Internal CISFBand Calls
CComPtr<IDeskBar> pIDB;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IDeskBar, &pIDB));
if (FAILED(hr)) return hr;
return pIDB->OnPosRectChangeDB(prc);
}
}
/*****************************************************************************/
// IPersistStream
STDMETHODIMP CQuickLaunchBand::GetClassID(OUT CLSID *pClassID)
@ -221,7 +196,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IPersistStream> pIPS;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IPersistStream, &pIPS));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pIPS->GetClassID(pClassID);
}
@ -231,7 +207,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IPersistStream> pIPS;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IPersistStream, &pIPS));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pIPS->IsDirty();
}
@ -243,7 +220,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IPersistStream> pIPS;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IPersistStream, &pIPS));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pIPS->Load(pStm);
}
@ -253,7 +231,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IPersistStream> pIPS;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IPersistStream, &pIPS));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pIPS->Save(pStm, fClearDirty);
}
@ -265,7 +244,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IPersistStream> pIPS;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IPersistStream, &pIPS));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pIPS->GetSizeMax(pcbSize);
}
@ -290,7 +270,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IWinEventHandler> pWEH;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IWinEventHandler, &pWEH));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pWEH->OnWinEvent(hWnd, uMsg, wParam, lParam, theResult);
}
@ -300,7 +281,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IWinEventHandler> pWEH;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IWinEventHandler, &pWEH));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pWEH->IsWindowOwner(hWnd);
}
@ -312,7 +294,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IOleCommandTarget> pOCT;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IOleCommandTarget, &pOCT));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pOCT->QueryStatus(pguidCmdGroup, cCmds, prgCmds, pCmdText);
}
@ -322,7 +305,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IOleCommandTarget> pOCT;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IOleCommandTarget, &pOCT));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pOCT->Exec(pguidCmdGroup, nCmdID, nCmdexecopt, pvaIn, pvaOut);
}
@ -334,7 +318,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IContextMenu> pICM;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IContextMenu, &pICM));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pICM->GetCommandString(idCmd, uFlags, pwReserved, pszName, cchMax);
}
@ -344,7 +329,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IContextMenu> pICM;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IContextMenu, &pICM));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pICM->InvokeCommand(pici);
}
@ -354,7 +340,8 @@ static const GUID CLSID_QuickLaunchBand = { 0x260cb95d, 0x4544, 0x44f6, { 0xa0,
// Internal CISFBand Calls
CComPtr<IContextMenu> pICM;
HRESULT hr = m_punkISFB->QueryInterface(IID_PPV_ARG(IContextMenu, &pICM));
if (FAILED(hr)) return hr;
if (FAILED(hr))
return hr;
return pICM->QueryContextMenu(hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags);
}

View file

@ -18,8 +18,7 @@ class CQuickLaunchBand :
public CComCoClass<CQuickLaunchBand, &CLSID_QuickLaunchBand>,
public CComObjectRootEx<CComMultiThreadModelNoCS>,
public IObjectWithSite,
public IDeskBand,
public IDeskBar,
public IDeskBand,
public IPersistStream,
public IWinEventHandler,
public IOleCommandTarget,
@ -76,21 +75,7 @@ class CQuickLaunchBand :
IN DWORD dwBandID,
IN DWORD dwViewMode,
IN OUT DESKBANDINFO *pdbi
);
// IDeskBar
virtual STDMETHODIMP GetClient(
OUT IUnknown **ppunkClient
);
virtual STDMETHODIMP OnPosRectChangeDB(
IN LPRECT prc
);
virtual STDMETHODIMP SetClient(
IN OPTIONAL IUnknown *punkClient
);
);
// IPersistStream
@ -185,6 +170,7 @@ class CQuickLaunchBand :
BEGIN_COM_MAP(CQuickLaunchBand)
COM_INTERFACE_ENTRY2_IID(IID_IOleWindow, IOleWindow, IDeskBand)
COM_INTERFACE_ENTRY2_IID(IID_IDockingWindow, IDockingWindow, IDeskBand)
COM_INTERFACE_ENTRY_IID(IID_IDeskBand, IDeskBand)
COM_INTERFACE_ENTRY_IID(IID_IObjectWithSite, IObjectWithSite)
COM_INTERFACE_ENTRY_IID(IID_IPersist, IPersist)

View file

@ -0,0 +1,19 @@
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
IDM_POPUPMENU MENUEX DISCARDABLE
BEGIN
POPUP ""
BEGIN
POPUP "&View", IDM_VIEW_MENU
BEGIN
MENUITEM "&Large Icons", IDM_LARGE_ICONS
MENUITEM "&Small Icons", IDM_SMALL_ICONS
END
MENUITEM "&Show Text", IDM_SHOW_TEXT
END
END
STRINGTABLE
BEGIN
IDS_BROWSEINFO_TITLE "Choose a folder"
END

View file

@ -27,6 +27,7 @@
#include <atlbase.h>
#include <atlcom.h>
#include <atlwin.h>
#include <atlstr.h>
#include <undocshell.h>
#include <shellutils.h>

View file

@ -7,18 +7,9 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
IDR_QCKLNCH REGISTRY "rgs/qcklnch.rgs"
IDM_POPUPMENU MENUEX DISCARDABLE
BEGIN
POPUP ""
BEGIN
POPUP "&View", IDM_VIEW_MENU
BEGIN
MENUITEM "&Large Icons", IDM_LARGE_ICONS
MENUITEM "&Small Icons", IDM_SMALL_ICONS
END
MENUITEM "&Show Text", IDM_SHOW_TEXT
END
END
#include <reactos/manifest_dll.rc>
#ifdef LANGUAGE_EN_US
#include "lang/en-US.rc"
#endif

View file

@ -1,8 +1,11 @@
#pragma once
#define IDR_QCKLNCH 1001
#define IDM_POPUPMENU 2000
#define IDM_LARGE_ICONS 1
#define IDM_SMALL_ICONS 2
#define IDM_SHOW_TEXT 3
#define IDM_VIEW_MENU 4
#define IDR_QCKLNCH 1001
#define IDM_POPUPMENU 2000
#define IDM_LARGE_ICONS 1
#define IDM_SMALL_ICONS 2
#define IDM_SHOW_TEXT 3
#define IDM_VIEW_MENU 4
#define IDS_BROWSEINFO_TITLE 100