Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
SSW_8_11.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
5.22 Mб
Скачать

On resizing, the message wm_size is sent and the standard handler OnSize() is called.

afx_msg void CWnd::OnSize( UINT nType, int cx, int cy );

nType   Specifies the type of resizing requested. This parameter can be one of the following values:

SIZE_MAXIMIZED   Window has been maximized.

SIZE_MINIMIZED   Window has been minimized.

SIZE_RESTORED   Window has been resized, but neither SIZE_MINIMIZED nor SIZE_MAXIMIZED applies.

SIZE_MAXHIDE   Message is sent to all pop-up windows when some other window is maximized.

SIZE_MAXSHOW   Message is sent to all pop-up windows when some other window has been restored to its former size.

cx   Specifies the new width of the client area.

cy   Specifies the new height of the client area.

The button state can be set by PressButton() function:

BOOL CToolBarCtrl::PressButton( int nID, BOOL bPress = TRUE );

Return Value Nonzero if successful; otherwise zero.

Parameters: nID   Command identifier of the button to press or release. bPress   TRUE to press the specified button; FALSE to release the specified button.

The button check can be provided by CheckButton() function

BOOL CheckButton( int nID, BOOL bCheck = TRUE );

Return Value: Nonzero if successful; otherwise zero.

Parameters: nID   Command identifier of the button to check or clear. bCheck   TRUE to check the button, FALSE to clear it.

To hide the button you can use HideButton() function:

BOOL CToolBarCtrl::HideButton( int nID, BOOL bHide = TRUE );

Return Value: Nonzero if successful; otherwise zero.

Parameters: nID   Command identifier of the button to hide or show. bHide   TRUE to hide the button, FALSE to show it.

The activation and inactivation of a buttons are enabled by EnableButton():

BOOL CToolBarCtrl::EnableButton( int nID, BOOL bEnable = TRUE );

Return Value: Nonzero if successful; otherwise zero.

Parameters: nID   Command identifier of the button to enable or disable.

bEnable   TRUE to enable the button; FALSE to disable the button.

The elements of program to work with toolbar

Below we shall discuss the main components of program to work with toolbar.

        1. First of all, the toolbar resource would be included to the project under some name. Let it be IDR_TOOLBAR1 (the first standard name, assigned to the toolbars).

        2. Include to the main window class such elements:

Class CMainWin :: public CFrameWnd

{ ……………..

CtoolBarCtrl m_TB;

public:

OnSize(UINT How, int Width, int Height);

…………

void InitToolBar();

};

        1. Add the such preprocessor directive:

#include <afxcmn.h>

        1. Re-write the main window constructor:

CMainWin::CMainWin()

{……..

InitCommonControls();

InitToolBar(); // the toolbar initiation

}

        1. Add the following macro command to the message map:

ON_WM_PAINT()

ON_WM_SIZE()

ON_COMMAND(ID_SHOWTB,OnShow)

ON_COMMAND(ID_HIDETB,OnHide)

  1. Describe the handler, displaying the virtual window content:

afx_msg void CMainWin::OnPaint()

{CPaintDC DC(this);

DC.PatBlt(maxX, maxY, &m_memDC, 0, 0, SRCCOPY);

}

  1. Describe the handler of toolbar size changing:

void CMainWin::OnSize(UINT How, int Width, int Height)

{m_TB.AutoSize();}

8. Describe the handler to display the toolbar:

void CMainWin::OnShow()

{m_TB.ShowWindow(SW_RESTORE);}

9. Describe the handler to hide the toolbar:

void CMainWin::OnShow()

{m_TB.ShowWindow(SW_HIDE);}

10. Write the function to initiate the toolbar as in Listing 6.1.:

Listing 6.1 The function to initiate the toolbar:

void CMainWin::InitToolBar()

{RECT r;

r.left=r.top=r.right=r.bottom=0;

m_TB.Create(WS_VISIBLE | WS_CHILD | WS_BORDER,r,this,IDR_TOOLBAR1);

tbButton[0].iBitmap=0;

tbButton[0].idCommand=ID_FIRST;

tbButton[0].fsState=TBSTATE_ENABLED;

tbButton[0].fsStyle=TBSTYLE_BUTTON;

tbButton[0].dwData=0;

tbButton[0].iString=0;

tbButton[1].iBitmap=1;

tbButton[1].idCommand=ID_SECOND;

tbButton[1].fsState=TBSTATE_ENABLED;

tbButton[1].fsStyle=TBSTYLE_CHECK;

tbButton[1].dwData=0;

tbButton[1].iString=0;

tbButton[2].iBitmap=2;

tbButton[2].idCommand=ID_CHANGE;

tbButton[2].fsState=TBSTATE_ENABLED;

tbButton[2].fsStyle=TBSTYLE_BUTTON;

tbButton[2].dwData=0;

tbButton[2].iString=0;

m_TB.AddButtons(3,tbButton); // the button array addition to the toolbar

m_TB.AddBitmap(3,IDR_TOOLBAR1); // the addition of the corresponding images

}

The tooltips creation for toolbars

MFC toolbars can also be made to display "tool tips" — tiny popup windows containing a short text description of a toolbar button's purpose. As the user moves the mouse over a toolbar button, the tool tip window pops up to offer a hint.

To activate tool tips in your application, you must do two things:

  1. Add the CBRS_TOOLTIPS style to the other styles (such as WS_CHILD, WS_VISIBLE, and other CBRS_ styles) passed as the dwStyle parameter to the CToolBar::Create function or in SetBarStyle.

  2. As described in the procedure below, append the toolbar tip text, separated by a newline character ('\n'), to the string resource containing the command-line prompt for the toolbar command. The string resource shares the ID of the toolbar button.

To add the tool tip text you need the following:

  1. While you are editing the toolbar in the toolbar editor, open the Toolbar Button Properties window for a given button.

  2. In the Prompt box, specify the text you want to appear in the tool tip for that button.

  3. Setting the text as a button property in the toolbar editor replaces the former procedure, in which you had to open and edit the string resource.

If a control bar with tool tips enabled has child controls placed on it, the control bar will display a tool tip for every child control on the control bar as long as it meets the following criteria:

  1. The ID of the control is not – 1.

  2. The string-table entry with the same ID as the child control in the resource file has a tool tip string.

A feature related to tool tips is "flyby" status bar updating. By default, the message on the status bar describes only a particular toolbar button when the button is activated. By including CBRS_FLYBY in your list of styles passed to CToolBar::Create, you can have these messages updated when the mouse cursor passes over the toolbar without actually activating the button.

The handler to process the tooltips has the following view:

void CMainWin::OnTTip(UINT idNotUsed,NMHDR *hdr,LRESULT *ResultNotUsed)

{switch(hdr->idFrom)

{case ID_FIRST:

((TOOLTIPTEXT *)hdr)->lpszText="First";

break;

case ID_SECOND:

((TOOLTIPTEXT *)hdr)->lpszText="Second";

break;

case ID_CHANGE:

((TOOLTIPTEXT *)hdr)->lpszText="Change";

break;

}

}

Certainly, the prototype of handler would be added to the CMainWin class, also you need to add such macro command:

ON_NOTIFY_RANGE(TTN_NEED_TEXT, 0, IDR_TOOLBAR1, OnTTip);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]