mCtrl  0.8.4
Data Structures | Functions
mditab.h File Reference

MDI tab control (MC_WC_MDITAB). More...

Go to the source code of this file.

Data Structures

struct  MC_MTITEMW
 Structure for manipulating with the tab item (unicode variant). More...
 
struct  MC_MTITEMA
 Structure for manipulating with the tab item (ANSI variant). More...
 
struct  MC_MTITEMWIDTH
 Structure for messages MC_MTM_SETITEMWIDTH and MC_MTM_GETITEMWIDTH. More...
 
struct  MC_MTHITTESTINFO
 Structure for message MC_MTM_HITTEST. More...
 
struct  MC_NMMTSELCHANGE
 Structure for notification MC_MTN_SELCHANGE. More...
 
struct  MC_NMMTDELETEITEM
 Structure for notification MC_MTN_DELETEITEM. More...
 
struct  MC_NMMTCLOSEITEM
 Structure for notification MC_MTN_CLOSEITEM. More...
 

Macros

Window Class
#define MC_WC_MDITABW   L"mCtrl.mditab"
 Window class name (unicode variant).
 
#define MC_WC_MDITABA   "mCtrl.mditab"
 Window class name (ANSI variant).
 
Control Styles
#define MC_MTS_CBONTOOLBAR   0x0000
 Show close button on right side of the control. This is default.
 
#define MC_MTS_CBONEACHTAB   0x0001
 Not supported, reserved for future use.
 
#define MC_MTS_CBONACTIVETAB   0x0002
 Not supported, reserved for future use.
 
#define MC_MTS_CBNONE   0x0003
 Don't show close button.
 
#define MC_MTS_CBMASK   0x0003
 This is not valid style, its bitmask of MC_MTS_CBxxx styles.
 
#define MC_MTS_TLBALWAYS   0x0000
 Popup tab list button is shown always. This is default.
 
#define MC_MTS_TLBONSCROLL   0x0004
 Popup tab list button is shown if scrolling is triggered on.
 
#define MC_MTS_TLBNEVER   0x0008
 Popup tab list button is never displayed.
 
#define MC_MTS_TLBMASK   0x000C
 This is not valid style, but bitmask of MC_NTS_TLBxxx styles.
 
#define MC_MTS_SCROLLALWAYS   0x0010
 Always shows scrolling buttons.
 
#define MC_MTS_CLOSEONMCLICK   0x0020
 Middle click closes a tab.
 
#define MC_MTS_FOCUSONBUTTONDOWN   0x0040
 Mouse button down gains focus.
 
#define MC_MTS_FOCUSNEVER   0x0080
 Never gains focus.
 
#define MC_MTS_FOCUSMASK   0x00C0
 This is not valid style, but bitmask of MC_NTS_FOCUSxxx styles.
 
MC_MTITEM::dwMask Bits

#define MC_MTIF_TEXT   (1 << 0)
 MC_MTITEMW::pszText or MC_MTITEMA::pszText is valid.
 
#define MC_MTIF_IMAGE   (1 << 1)
 MC_MTITEMW::iImage or MC_MTITEMA::iImage is valid.
 
#define MC_MTIF_PARAM   (1 << 2)
 MC_MTITEMW::lParam or MC_MTITEMA::lParam is valid.
 
MC_MTHITTESTINFO::flags bits

Control Messages
#define MC_MTM_GETITEMCOUNT   (WM_USER + 100)
 Gets count of tabs.
 
#define MC_MTM_GETIMAGELIST   (WM_USER + 101)
 Gets imagelist.
 
#define MC_MTM_SETIMAGELIST   (WM_USER + 102)
 Sets imagelist.
 
#define MC_MTM_DELETEALLITEMS   (WM_USER + 103)
 Delete all tab items.
 
#define MC_MTM_INSERTITEMW   (WM_USER + 105)
 Inserts new tab into the tab control (unicode variant).
 
#define MC_MTM_INSERTITEMA   (WM_USER + 106)
 Inserts new tab into the tab control (ANSI variant).
 
#define MC_MTM_SETITEMW   (WM_USER + 107)
 Sets tab in the tab control (unicode variant).
 
#define MC_MTM_SETITEMA   (WM_USER + 108)
 Sets tab in the tab control (ANSI variant).
 
#define MC_MTM_GETITEMW   (WM_USER + 109)
 Gets tab data from the tab control (unicode variant).
 
#define MC_MTM_GETITEMA   (WM_USER + 110)
 Gets tab data from the tab control (ANSI variant).
 
#define MC_MTM_DELETEITEM   (WM_USER + 111)
 Deletes the item.
 
#define MC_MTM_HITTEST   (WM_USER + 112)
 Tests which tab (and its part) is placed on specified position.
 
#define MC_MTM_SETCURSEL   (WM_USER + 113)
 Selects a tab.
 
#define MC_MTM_GETCURSEL   (WM_USER + 114)
 Gets indes of selected tab.
 
#define MC_MTM_CLOSEITEM   (WM_USER + 115)
 Asks to close item.
 
#define MC_MTM_SETITEMWIDTH   (WM_USER + 116)
 Sets default and minimal width for each tab.
 
#define MC_MTM_GETITEMWIDTH   (WM_USER + 117)
 Gets default and minimal width for each tab.
 
#define MC_MTM_INITSTORAGE   (WM_USER + 118)
 Preallocate anough memory for requested number of items.
 
Control Notifications
#define MC_MTN_SELCHANGE   (0xfffffddb)
 Fired when other tab has been selected.
 
#define MC_MTN_DELETEITEM   (0xfffffdd0)
 Fired when a tab is being deleted.
 
#define MC_MTN_DELETEALLITEMS   (0xfffffdcf)
 Fired when control processes MC_MTM_DELETEALLITEMS message or when it is being destroyed.
 
#define MC_MTN_CLOSEITEM   (0xfffffdce)
 Fired when user requests closing a tab item.
 
Unicode Resolution
#define MC_WC_MDITAB   MCTRL_NAME_AW(MC_WC_MDITAB)
 Unicode-resolution alias.
 
#define MC_MTITEM   MCTRL_NAME_AW(MC_MTITEM)
 Unicode-resolution alias.
 
#define MC_MTM_INSERTITEM   MCTRL_NAME_AW(MC_MTM_INSERTITEM)
 Unicode-resolution alias.
 
#define MC_MTM_SETITEM   MCTRL_NAME_AW(MC_MTM_SETITEM)
 Unicode-resolution alias.
 
#define MC_MTM_GETITEM   MCTRL_NAME_AW(MC_MTM_GETITEM)
 Unicode-resolution alias.
 

Functions

BOOL MCTRL_API mcMditab_Initialize (void)
 Registers window class of the control.
 
void MCTRL_API mcMditab_Terminate (void)
 Unregisters window class of the control.
 

Detailed Description

MDI tab control (MC_WC_MDITAB).

This control is a replacement for standard multiple document interface (MDI), as that interface seems to be outdated, and does not reflect modern GUI requirements.

Instead this control provides user experience similar to the web browsers with tabbing support.

The control is very similar to the standard tab control from COMCTL32.DLL, both visually and from developer's point of view. There two main differences:

Styles, messages and notifications the control supports mostly correspond to subset of messages and styles of the standard tab control. The counterparts have generally also the same names (differing only in prefix of the identifiers). If you are familiar with the standard tab control, you should be able to adopt MC_WC_MDITAB very quickly. However please note that the messages and styles are not interchangeable: The constants of styles and messages generally differ in their values.

Although the purpose of the control is to provide a replacement for the MDI, the programmatic interfaces very differs. If you want to replace MDI with this control in an existing application, expect it will take some time.

These standard messages are handled by the control:

These standards notifications are sent by the control:


Data Structure Documentation

struct MC_MTITEMW

Structure for manipulating with the tab item (unicode variant).

See Also
MC_MTM_INSERTITEM MC_MTM_SETITEM MC_MTM_GETITEM
Data Fields
DWORD dwMask Bit mask indicating which members of the structure are valid.
LPWSTR pszText Text label of the tab.
int cchTextMax Number of characters in pszText. Used only on output.
int iImage Index into control image list.
LPARAM lParam User data.
struct MC_MTITEMA

Structure for manipulating with the tab item (ANSI variant).

See Also
MC_MTM_INSERTITEM MC_MTM_SETITEM MC_MTM_GETITEM
Data Fields
DWORD dwMask Bit mask indicating which members of the structure are valid.
LPSTR pszText Text label of the tab.
int cchTextMax Number of characters in psxText. Used only on output.
int iImage Index into control image list.
LPARAM lParam User data.
struct MC_MTITEMWIDTH

Structure for messages MC_MTM_SETITEMWIDTH and MC_MTM_GETITEMWIDTH.

The control sizes all tabs to the same width. Normally they all have the default width. But if the control contains to many tab items and not all of them can be visible at once, the control is allowed to resize them as much as the minimal width specifies, so more of them can be visible without using the scrolling buttons.

Data Fields
DWORD dwDefWidth Default width for tabs, in pixels.
DWORD dwMinWidth Minimal width for tabs, in pixels.
struct MC_NMMTSELCHANGE

Structure for notification MC_MTN_SELCHANGE.

Data Fields
NMHDR hdr Common notification structure header.
int iItemOld Index of previously selected tab.
LPARAM lParamOld Data of previously selected tab, or zero.
int iItemNew Index of newly selected tab.
LPARAM lParamNew Data of newly selected tab, or zero.
struct MC_NMMTDELETEITEM

Structure for notification MC_MTN_DELETEITEM.

Data Fields
NMHDR hdr Common notification structure header.
int iItem Index of the item being deleted.
LPARAM lParam User data of the item being deleted.
struct MC_NMMTCLOSEITEM

Structure for notification MC_MTN_CLOSEITEM.

Data Fields
NMHDR hdr Common notification structure header.
int iItem Index of the item being closed.
LPARAM lParam User data of the control being closed.

Macro Definition Documentation

#define MC_MTM_GETITEMCOUNT   (WM_USER + 100)

Gets count of tabs.

Parameters
wParamReserved, set to zero.
lParamReserved, set to zero.
Returns
(int) Count of tabs.
#define MC_MTM_GETIMAGELIST   (WM_USER + 101)

Gets imagelist.

Parameters
wParamReserved, set to zero.
lParamReserved, set to zero.
Returns
(HIMAGELIST) The image list, or NULL.
See Also
MC_MTM_SETIMAGELIST
#define MC_MTM_SETIMAGELIST   (WM_USER + 102)

Sets imagelist.

The tab items can refer to the images in the list with MC_MTITEM::iImage.

Parameters
wParamReserved, set to zero.
[in]lParam(HIMAGELIST) The imagelist.
Returns
(HIMAGELIST) Old image list, or NULL.
See Also
MC_MTM_GETIMAGELIST
#define MC_MTM_DELETEALLITEMS   (WM_USER + 103)

Delete all tab items.

The control sends MC_MTN_DELETEALLITEMS notification. Depending on the return value from the notifications, it may also send notification MC_MTN_DELETEITEM for each tab being deleted.

Parameters
wParamReserved, set to zero.
lParamReserved, set to zero.
Returns
(BOOL) TRUE on success, FALSE otherwise.
See Also
MC_MTM_DELETEITEM
#define MC_MTM_INSERTITEMW   (WM_USER + 105)

Inserts new tab into the tab control (unicode variant).

Parameters
[in]wParam(int) Index of the new item.
[in]lParam(MC_MTITEM*) Pointer to detailed data of the new tab.
Returns
(int) index of the new tab, or -1 on failure.
#define MC_MTM_INSERTITEMA   (WM_USER + 106)

Inserts new tab into the tab control (ANSI variant).

Parameters
[in]wParam(int) Index of the new item.
[in]lParam(MC_MTITEM*) Pointer to detailed data of the new tab.
Returns
(int) index of the new tab, or -1 on failure.
#define MC_MTM_SETITEMW   (WM_USER + 107)

Sets tab in the tab control (unicode variant).

Parameters
[in]wParam(int) Index of the item.
[in]lParam(MC_MTITEMW*) Pointer to detailed data of the tab.
Returns
TRUE on success, FALSE otherwise.
#define MC_MTM_SETITEMA   (WM_USER + 108)

Sets tab in the tab control (ANSI variant).

Parameters
[in]wParam(int) Index of the item.
[in]lParam(MC_MTITEMA*) Pointer to detailed data of the tab.
Returns
TRUE on success, FALSE otherwise.
#define MC_MTM_GETITEMW   (WM_USER + 109)

Gets tab data from the tab control (unicode variant).

Parameters
[in]wParam(int) Index of the item.
[in,out]lParam(MC_MTITEMW*) Pointer to detailed data of the tab, receiving the data according to MC_MTITEM::dwMask.
Returns
TRUE on success, FALSE otherwise.
#define MC_MTM_GETITEMA   (WM_USER + 110)

Gets tab data from the tab control (ANSI variant).

Parameters
[in]wParam(int) Index of the item.
[in,out]lParam(MC_MTITEMA*) Pointer to detailed data of the tab, receiving the data according to MC_MTITEM::dwMask.
Returns
TRUE on success, FALSE otherwise.
#define MC_MTM_DELETEITEM   (WM_USER + 111)

Deletes the item.

Sends MC_MTN_DELETEITEM notification to parent window.

Parameters
[in]wParam(int) Index of tab to be deleted.
lParamReserved, set to zero.
Returns
TRUE on success, FALSE otherwise.
#define MC_MTM_HITTEST   (WM_USER + 112)

Tests which tab (and its part) is placed on specified position.

Parameters
wParamReserved, set to zero.
[in,out]lParam(MC_MTHITTESTINFO*) Pointer to a hit test structure. Set MC_MTHITTESTINFO::pt on input.
Returns
(int) Index of the hit tab, or -1.
#define MC_MTM_SETCURSEL   (WM_USER + 113)

Selects a tab.

Parameters
[in]wParam(int) Index of the tab to select.
lParamReserved, set to zero.
Returns
(int) Index of previously selected tab, or -1.
#define MC_MTM_GETCURSEL   (WM_USER + 114)

Gets indes of selected tab.

Parameters
wParamReserved, set to zero.
lParamReserved, set to zero.
Returns
(int) Index of selected tab, or -1.
#define MC_MTM_CLOSEITEM   (WM_USER + 115)

Asks to close item.

It causes to send MC_MTN_CLOSEITEM notification and depening on its return value it then can cause deleteing the item.

Parameters
[in]wParam(int) Index of the item to be closed.
lParamReserved, set to zero.
Returns
TRUE on success, FALSE otherwise.
#define MC_MTM_SETITEMWIDTH   (WM_USER + 116)

Sets default and minimal width for each tab.

If there is enough space, all tabs have the default width. When there are too many widths, they are made narrower so more tabs fit into the visible space area, but never narrower then the minimal width.

Parameters
wParamReserved, set to zero.
[in]lParam(MC_MTITEMWIDTH*) Pointer to a structure specifying the default and minimal widths. When NULL is passed, the values are reset to built-in defaults.
Returns
TRUE on success, FALSE otherwise.
See Also
MC_MTM_GETITEMWIDTH
#define MC_MTM_GETITEMWIDTH   (WM_USER + 117)

Gets default and minimal width for each tab.

Parameters
wParamReserved, set to zero.
[out]lParam(MC_MTITEMWIDTH*) Pointer to a structure where the current widths will be set.
Returns
TRUE on success, FALSE otherwise.
See Also
MC_MTM_SETITEMWIDTH
#define MC_MTM_INITSTORAGE   (WM_USER + 118)

Preallocate anough memory for requested number of items.

You may want to use this message before adding higher number of items into the controls to speed it up by avoiding multiple reallocations.

Parameters
[in]wParam(UINT) The number of items to add.
lParamReserved, set to zero.
Returns
TRUE on success, FALSE otherwise.
#define MC_MTN_SELCHANGE   (0xfffffddb)

Fired when other tab has been selected.

Parameters
[in]wParam(int) Id of the control sending the notification.
[in]lParam(MC_NMMTSELCHANGE*) Pointer to a structure specifying details about the selection change.
Returns
Application should return zero, if it processes the message.
#define MC_MTN_DELETEITEM   (0xfffffdd0)

Fired when a tab is being deleted.

Parameters
[in]wParam(int) Id of the control sending the notification.
[in]lParam(MC_NMMTDELETEITEM*) Pointer to a structure specifying details about the item being deleted.
Returns
Application should return zero if it processes the notification.
#define MC_MTN_DELETEALLITEMS   (0xfffffdcf)

Fired when control processes MC_MTM_DELETEALLITEMS message or when it is being destroyed.

Depending on the value returned from the notification, calling MC_MTN_DELETEITEM notifications for all the items can be supressed.

Parameters
[in]wParam(int) Id of the control sending the notification.
[in]lParam(NMHDR*)
Returns
Application should return FALSE to receive subsequent MC_MTN_DELETEITEM for each item; or TRUE to supress sending them.
#define MC_MTN_CLOSEITEM   (0xfffffdce)

Fired when user requests closing a tab item.

Parameters
[in]wParam(int) Id of the control sending the notification.
[in]lParam(MC_NMMTCLOSEITEM*) Pointer to a structure specifying details about the item being closed.
Returns
Application should return FALSE to remove the tab (the tab is then deleted and MC_MTN_DELETEITEM notification is sent); or TRUE to cancel the tab closure.
#define MC_WC_MDITAB   MCTRL_NAME_AW(MC_WC_MDITAB)

Unicode-resolution alias.

See Also
MC_WC_MDITABW MC_WC_MDITABA
#define MC_MTITEM   MCTRL_NAME_AW(MC_MTITEM)

Unicode-resolution alias.

See Also
MC_MTITEMW MC_MTITEMA
#define MC_MTM_INSERTITEM   MCTRL_NAME_AW(MC_MTM_INSERTITEM)

Unicode-resolution alias.

See Also
MC_MTM_INSERTITEMW MC_MTM_INSERTITEMA
#define MC_MTM_SETITEM   MCTRL_NAME_AW(MC_MTM_SETITEM)

Unicode-resolution alias.

See Also
MC_MTM_SETITEMW MC_MTM_SETITEMA
#define MC_MTM_GETITEM   MCTRL_NAME_AW(MC_MTM_GETITEM)

Unicode-resolution alias.

See Also
MC_MTM_GETITEMW MC_MTM_GETITEMA

Function Documentation

BOOL MCTRL_API mcMditab_Initialize ( void  )

Registers window class of the control.

Returns
TRUE on success, FALSE on failure.
See Also
About Initialization and Termination
void MCTRL_API mcMditab_Terminate ( void  )

Unregisters window class of the control.

See Also
About Initialization and Termination