Files
wj32 edb2ce5ddb Implement mini info options menu
git-svn-id: svn://svn.code.sf.net/p/processhacker/code@6086 21ef857c-d57f-4fe0-8362-d861dc6d29cd
2015-06-17 06:07:26 +00:00

405 lines
8.6 KiB
C

#ifndef PH_MINIINFOP_H
#define PH_MINIINFOP_H
// Constants
#define MIP_CONTAINER_CLASSNAME L"ProcessHackerMiniInfo"
#define MIP_TIMER_PIN_FIRST 1
#define MIP_TIMER_PIN_LAST (MIP_TIMER_PIN_FIRST + MaxMiniInfoPinType - 1)
#define MIP_MSG_FIRST (WM_APP + 150)
#define MIP_MSG_UPDATE (WM_APP + 150)
#define MIP_MSG_LAST (WM_APP + 151)
#define MIP_UNPIN_CHILD_CONTROL_DELAY 1000
#define MIP_UNPIN_HOVER_DELAY 250
#define MIP_SEPARATOR_HEIGHT 2
#define MIP_PADDING_SIZE 3
#define MIP_REFRESH_AUTOMATICALLY_PINNED 0x1
#define MIP_REFRESH_AUTOMATICALLY_UNPINNED 0x2
#define MIP_REFRESH_AUTOMATICALLY_FLAG(Pinned) \
((Pinned) ? MIP_REFRESH_AUTOMATICALLY_PINNED : MIP_REFRESH_AUTOMATICALLY_UNPINNED)
// Misc.
#define SET_BUTTON_BITMAP(hwndDlg, Id, Bitmap) \
SendMessage(GetDlgItem(hwndDlg, (Id)), BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)(Bitmap))
// Dialog procedure
LRESULT CALLBACK PhMipContainerWndProc(
_In_ HWND hWnd,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
INT_PTR CALLBACK PhMipMiniInfoDialogProc(
_In_ HWND hwndDlg,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
// Container event handlers
VOID PhMipContainerOnShowWindow(
_In_ BOOLEAN Showing,
_In_ ULONG State
);
VOID PhMipContainerOnActivate(
_In_ ULONG Type,
_In_ BOOLEAN Minimized
);
VOID PhMipContainerOnSize(
VOID
);
VOID PhMipContainerOnSizing(
_In_ ULONG Edge,
_In_ PRECT DragRectangle
);
VOID PhMipContainerOnExitSizeMove(
VOID
);
BOOLEAN PhMipContainerOnEraseBkgnd(
_In_ HDC hdc
);
VOID PhMipContainerOnTimer(
_In_ ULONG Id
);
// Child dialog event handlers
VOID PhMipOnInitDialog(
VOID
);
VOID PhMipOnShowWindow(
_In_ BOOLEAN Showing,
_In_ ULONG State
);
VOID PhMipOnCommand(
_In_ ULONG Id,
_In_ ULONG Code
);
BOOLEAN PhMipOnNotify(
_In_ NMHDR *Header,
_Out_ LRESULT *Result
);
BOOLEAN PhMipOnCtlColorXxx(
_In_ ULONG Message,
_In_ HWND hwnd,
_In_ HDC hdc,
_Out_ HBRUSH *Brush
);
BOOLEAN PhMipOnDrawItem(
_In_ ULONG_PTR Id,
_In_ DRAWITEMSTRUCT *DrawItemStruct
);
VOID PhMipOnUserMessage(
_In_ ULONG Message,
_In_ ULONG_PTR WParam,
_In_ ULONG_PTR LParam
);
// Framework
typedef enum _PH_MIP_ADJUST_PIN_RESULT
{
NoAdjustPinResult,
ShowAdjustPinResult,
HideAdjustPinResult
} PH_MIP_ADJUST_PIN_RESULT;
BOOLEAN NTAPI PhMipMessageLoopFilter(
_In_ PMSG Message,
_In_ PVOID Context
);
VOID NTAPI PhMipUpdateHandler(
_In_opt_ PVOID Parameter,
_In_opt_ PVOID Context
);
PH_MIP_ADJUST_PIN_RESULT PhMipAdjustPin(
_In_ PH_MINIINFO_PIN_TYPE PinType,
_In_ LONG PinCount
);
VOID PhMipCalculateWindowRectangle(
_In_ PPOINT SourcePoint,
_Out_ PPH_RECTANGLE WindowRectangle
);
VOID PhMipInitializeParameters(
VOID
);
PPH_MINIINFO_SECTION PhMipCreateSection(
_In_ PPH_MINIINFO_SECTION Template
);
VOID PhMipDestroySection(
_In_ PPH_MINIINFO_SECTION Section
);
PPH_MINIINFO_SECTION PhMipFindSection(
_In_ PPH_STRINGREF Name
);
PPH_MINIINFO_SECTION PhMipCreateInternalSection(
_In_ PWSTR Name,
_In_ ULONG Flags,
_In_ PPH_MINIINFO_SECTION_CALLBACK Callback
);
VOID PhMipCreateSectionDialog(
_In_ PPH_MINIINFO_SECTION Section
);
VOID PhMipChangeSection(
_In_ PPH_MINIINFO_SECTION NewSection
);
VOID PhMipSetSectionText(
_In_ struct _PH_MINIINFO_SECTION *Section,
_In_opt_ PPH_STRING Text
);
VOID PhMipUpdateSectionText(
_In_ PPH_MINIINFO_SECTION Section
);
VOID PhMipLayout(
VOID
);
VOID PhMipBeginChildControlPin(
VOID
);
VOID PhMipEndChildControlPin(
VOID
);
VOID PhMipRefresh(
VOID
);
VOID PhMipToggleRefreshAutomatically(
VOID
);
VOID PhMipSetPinned(
_In_ BOOLEAN Pinned
);
VOID PhMipShowSectionMenu(
VOID
);
VOID PhMipShowOptionsMenu(
VOID
);
LRESULT CALLBACK PhMipSectionControlHookWndProc(
_In_ HWND hwnd,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
// List-based section
#define MIP_MAX_PROCESS_GROUPS 15
#define MIP_SINGLE_COLUMN_ID 0
#define MIP_CELL_PADDING 5
#define MIP_ICON_PADDING 3
#define MIP_INNER_PADDING 3
typedef struct _PH_MIP_GROUP_NODE
{
union
{
PH_TREENEW_NODE Node;
PH_MINIINFO_LIST_SECTION_SORT_DATA SortData;
};
PPH_PROCESS_GROUP ProcessGroup;
HANDLE RepresentativeProcessId;
LARGE_INTEGER RepresentativeCreateTime;
PPH_STRING TooltipText;
} PH_MIP_GROUP_NODE, *PPH_MIP_GROUP_NODE;
PPH_MINIINFO_LIST_SECTION PhMipCreateListSection(
_In_ PWSTR Name,
_In_ ULONG Flags,
_In_ PPH_MINIINFO_LIST_SECTION Template
);
PPH_MINIINFO_LIST_SECTION PhMipCreateInternalListSection(
_In_ PWSTR Name,
_In_ ULONG Flags,
_In_ PPH_MINIINFO_LIST_SECTION_CALLBACK Callback
);
BOOLEAN PhMipListSectionCallback(
_In_ PPH_MINIINFO_SECTION Section,
_In_ PH_MINIINFO_SECTION_MESSAGE Message,
_In_opt_ PVOID Parameter1,
_In_opt_ PVOID Parameter2
);
INT_PTR CALLBACK PhMipListSectionDialogProc(
_In_ HWND hwndDlg,
_In_ UINT uMsg,
_In_ WPARAM wParam,
_In_ LPARAM lParam
);
VOID PhMipListSectionSortFunction(
_In_ PPH_LIST List,
_In_opt_ PVOID Context
);
VOID PhMipTickListSection(
_In_ PPH_MINIINFO_LIST_SECTION ListSection
);
VOID PhMipClearListSection(
_In_ PPH_MINIINFO_LIST_SECTION ListSection
);
LONG PhMipCalculateRowHeight(
VOID
);
PPH_MIP_GROUP_NODE PhMipAddGroupNode(
_In_ PPH_MINIINFO_LIST_SECTION ListSection,
_In_ PPH_PROCESS_GROUP ProcessGroup
);
VOID PhMipDestroyGroupNode(
_In_ PPH_MIP_GROUP_NODE Node
);
BOOLEAN PhMipListSectionTreeNewCallback(
_In_ HWND hwnd,
_In_ PH_TREENEW_MESSAGE Message,
_In_opt_ PVOID Parameter1,
_In_opt_ PVOID Parameter2,
_In_opt_ PVOID Context
);
PPH_STRING PhMipGetGroupNodeTooltip(
_In_ PPH_MINIINFO_LIST_SECTION ListSection,
_In_ PPH_MIP_GROUP_NODE Node
);
PPH_MIP_GROUP_NODE PhMipGetSelectedGroupNode(
_In_ PPH_MINIINFO_LIST_SECTION ListSection
);
VOID PhMipShowListSectionContextMenu(
_In_ PPH_MINIINFO_LIST_SECTION ListSection,
_In_ PPH_TREENEW_CONTEXT_MENU ContextMenu
);
VOID PhMipHandleListSectionCommand(
_In_ PPH_MINIINFO_LIST_SECTION ListSection,
_In_ PPH_PROCESS_GROUP ProcessGroup,
_In_ ULONG Id
);
// CPU section
BOOLEAN PhMipCpuListSectionCallback(
_In_ struct _PH_MINIINFO_LIST_SECTION *ListSection,
_In_ PH_MINIINFO_LIST_SECTION_MESSAGE Message,
_In_opt_ PVOID Parameter1,
_In_opt_ PVOID Parameter2
);
int __cdecl PhMipCpuListSectionProcessCompareFunction(
_In_ const void *elem1,
_In_ const void *elem2
);
int __cdecl PhMipCpuListSectionNodeCompareFunction(
_In_ const void *elem1,
_In_ const void *elem2
);
// Commit Charge section
BOOLEAN PhMipCommitListSectionCallback(
_In_ struct _PH_MINIINFO_LIST_SECTION *ListSection,
_In_ PH_MINIINFO_LIST_SECTION_MESSAGE Message,
_In_opt_ PVOID Parameter1,
_In_opt_ PVOID Parameter2
);
int __cdecl PhMipCommitListSectionProcessCompareFunction(
_In_ const void *elem1,
_In_ const void *elem2
);
int __cdecl PhMipCommitListSectionNodeCompareFunction(
_In_ const void *elem1,
_In_ const void *elem2
);
// Physical Memory section
BOOLEAN PhMipPhysicalListSectionCallback(
_In_ struct _PH_MINIINFO_LIST_SECTION *ListSection,
_In_ PH_MINIINFO_LIST_SECTION_MESSAGE Message,
_In_opt_ PVOID Parameter1,
_In_opt_ PVOID Parameter2
);
int __cdecl PhMipPhysicalListSectionProcessCompareFunction(
_In_ const void *elem1,
_In_ const void *elem2
);
int __cdecl PhMipPhysicalListSectionNodeCompareFunction(
_In_ const void *elem1,
_In_ const void *elem2
);
// I/O section
BOOLEAN PhMipIoListSectionCallback(
_In_ struct _PH_MINIINFO_LIST_SECTION *ListSection,
_In_ PH_MINIINFO_LIST_SECTION_MESSAGE Message,
_In_opt_ PVOID Parameter1,
_In_opt_ PVOID Parameter2
);
int __cdecl PhMipIoListSectionProcessCompareFunction(
_In_ const void *elem1,
_In_ const void *elem2
);
int __cdecl PhMipIoListSectionNodeCompareFunction(
_In_ const void *elem1,
_In_ const void *elem2
);
#endif