windows-nt/Source/XPSP1/NT/shell/shell32/shcombox.h
2020-09-26 16:20:57 +08:00

78 lines
2.7 KiB
C

// shcombox.h : Shared shell comboboxEx methods
#ifndef __SHCOMBOX_H__
#define __SHCOMBOX_H__
// COMBOITEMEX wrap with string storage.
typedef struct
{
UINT mask;
INT_PTR iItem;
TCHAR szText[MAX_PATH] ;
int cchTextMax;
int iImage;
int iSelectedImage;
int iOverlay;
int iIndent;
int iID; // application-specific item identifier.
ULONG Reserved;
LPARAM lParam;
} CBXITEM, *PCBXITEM;
typedef CBXITEM CONST *PCCBXITEM;
// ADDCBXITEMCALLBACK fAction flags
#define CBXCB_ADDING 0x00000001 // if callback returns E_ABORT, combo population aborts
#define CBXCB_ADDED 0x00000002 // callback's return value is ignored.
// SendMessageTimeout constants
#define CBX_SNDMSG_TIMEOUT_FLAGS SMTO_BLOCK
#define CBX_SNDMSG_TIMEOUT 15000 // milliseconds
#define CBX_SNDMSG_TIMEOUT_HRESULT HRESULT_FROM_WIN32(ERROR_TIMEOUT)
// Misc constants
#define NO_ITEM_NOICON_INDENT -2 // -1 to make up for the icon indent.
#define NO_ITEM_INDENT 0
#define ITEM_INDENT 1
#define LISTINSERT_FIRST 0
#define LISTINSERT_LAST -1
#ifdef __cplusplus
extern "C"
{
#endif
// General shell comboboxex methods
typedef HRESULT (WINAPI *LPFNPIDLENUM_CB)(LPCITEMIDLIST, void *);
typedef HRESULT (WINAPI *ADDCBXITEMCALLBACK)(ULONG fAction, PCBXITEM pItem, LPARAM lParam);
STDAPI AddCbxItemToComboBox(IN HWND hwndComboEx, IN PCCBXITEM pItem, IN INT_PTR *pnPosAdded);
STDAPI AddCbxItemToComboBoxCallback(IN HWND hwndComboEx, IN OUT PCBXITEM pItem, IN ADDCBXITEMCALLBACK pfn, IN LPARAM lParam);
STDAPI_(void) MakeCbxItem(OUT PCBXITEM pcbi, IN LPCTSTR pszDisplayName, IN void *pvData, IN LPCITEMIDLIST pidlIcon, IN INT_PTR nPos, IN int iIndent);
STDAPI EnumSpecialItemIDs(int csidl, DWORD dwSHCONTF, LPFNPIDLENUM_CB pfn, void *pvData);
STDAPI_(HIMAGELIST) GetSystemImageListSmallIcons();
// local drive picker combo methods
STDAPI PopulateLocalDrivesCombo(IN HWND hwndComboEx, IN ADDCBXITEMCALLBACK pfn, IN LPARAM lParam);
// helpers (note: once all dependents are brought into line using the above methods, we can eliminate
// decl of the following:
typedef HRESULT (*LPFNRECENTENUM_CB)(IN LPCTSTR pszPath, IN BOOL fAddEntries, IN void *pvParam);
// File Associations picker combo methods.
STDAPI PopulateFileAssocCombo(IN HWND, IN ADDCBXITEMCALLBACK, IN LPARAM);
STDAPI_(LONG) GetFileAssocComboSelItemText(IN HWND, OUT LPTSTR *ppszText);
STDAPI_(LRESULT) DeleteFileAssocComboItem(IN LPNMHDR pnmh);
#define FILEASSOCIATIONSID_ALLFILETYPES 20
#define FILEASSOCIATIONSID_FILE_PATH 1 // Go parse it.
#define FILEASSOCIATIONSID_MAX FILEASSOCIATIONSID_ALLFILETYPES
#ifdef __cplusplus
}
#endif
#endif __SHCOMBOX_H__