Π MFC Π²Π΅ΡΡΠΈΠΉ Π½ΠΈΠΆΠ΅ 4.0 ΠΈΠ· CDialog::DoModal Π½Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ CDialog::PreTranslateMessage, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΡΠΈΠ΄Π΅ΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΌΡΡΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ToolTip. ΠΡΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ CWinApp::ProcessMessageFilter ΠΈ Π² Π½Π΅ΠΌ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ToolTip. CWinApp::ProcessMessageFilter Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ ΡΠΊΠΎΠ²ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ MFC Π΄Π»Ρ ΡΠ΅Π°ΠΊΡΠΈΠΈ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Windows. ΠΠ° Π΄Π΅ΡΠ°Π»ΡΠΌΠΈ, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠ°Π±ΠΎΡΠΈΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ, ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ΡΡ ΠΊ ΡΡΠ°ΡΡΠ΅ Π² Π±Π°Π·Π΅ Π·Π½Π°Π½ΠΈΠΉ.
ΠΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ ΠΊ Web-ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌ
ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΠΏΡΠΎΠ΅ΠΊΡ WebButton
ΠΠ°ΠΊ ΠΈ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ , ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ Π½Π° Web-ΡΡΡΠ°Π½ΠΈΡΠ°Ρ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΏΠΎΠ»Π΅Π·Π½Ρ. ΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ Π² Π΄Π²ΡΡ ΠΎΡΠ΅Π²ΠΈΠ΄Π½ΡΡ ΡΠ»ΡΡΠ°ΡΡ : Π΄Π»Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΎΠΊ ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ActiveX. Π― Π½Π°ΠΏΠΈΡΠ°Π» ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° "ΠΊΠ½ΠΎΠΏΠΊΠ°", ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°ΡΡ, ΠΊΠ°ΠΊ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ActiveX. ΠΠ° ΡΠΈΡ.3 ΠΏΠΎΠΊΠ°Π·Π°Π½Ρ ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ActiveX β ΠΊΠ½ΠΎΠΏΠΊΠ° Ρ ΡΠ»ΡΠ±Π°ΡΡΠ΅ΠΉΡΡ ΡΠΎΠΆΠΈΡΠ΅ΠΉ, ΠΈ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ° β Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ΅ "Ρ ΡΠ΄ΠΎΠΆΠ΅ΡΡΠ²ΠΎ" ΠΏΡΡΠΌΠΎ ΠΏΠΎΠ΄ ΠΊΠ½ΠΎΠΏΠΊΠΎΠΉ.
Π ΠΈΡ.3. ΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ Π½Π° Web-ΡΡΡΠ°Π½ΠΈΡΠ΅
ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΡ ΠΊ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅ ΠΏΡΠΎΡΠ΅ ΠΏΡΠΎΡΡΠΎΠ³ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΡΠ° ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎΡΡΡ Π²ΡΡΡΠΎΠ΅Π½Π° Π² ΡΠ·ΡΠΊ HTML (ΡΠΌ. ΡΠΈΡ.4). ΠΡΠ° ΡΡΡΠΎΠΊΠ°:
<img src="Image.gif" height=48 width=48 alt="Image ToolTip" >
Π·Π°Π΄Π°Π΅Ρ ΠΈΠΌΡ ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ. ΠΠΎΠ΄ΡΡΡΠΎΠΊΠ° "Image ToolTip" ΠΈ Π΅ΡΡΡ ΡΠ΅ΠΊΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΏΠΎΠ΄Π²Π΅Π΄Π΅Π½ΠΈΠΈ ΠΊΡΡΡΠΎΡΠ° ΠΌΡΡΠΈ ΠΊ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ΅. Π’Π°ΠΊΠΆΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡ Π΄Π»Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ "Π°ΠΊΡΠΈΠ²Π½ΡΡ Π·ΠΎΠ½" (HotSpots) ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ, Π½ΠΎ ΡΡΠΎ Π²ΡΡ ΠΎΠ΄ΠΈΡ Π·Π° ΡΠ°ΠΌΠΊΠΈ ΡΡΠ°ΡΡΠΈ. Π― ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΎΡΡ ΠΏΠΎΠΊΠ°Π·Π°ΡΡ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ Π½Π° ΡΠ·ΡΠΊΠ΅ HTML.
Π ΠΈΡ.4. HTML-ΠΊΠΎΠ΄ Π΄Π»Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ
<OBJECT ID="WebButton1" WIDTH=31 HEIGHT=28 CLASSID="CLSID:381C5023-2FDA-11D0-8BC1-444553540000">
<PARAM NAME="_Version" VALUE="65536">
<PARAM NAME="_ExtentX" VALUE="786">
<PARAM NAME="_ExtentY" VALUE="731">
<PARAM NAME="_StockProps" VALUE="0">
<PARAM NAME="ToolTipText" VALUE="WebButton ToolTip Test">
</OBJECT>
</P>
<br><img src="Image.gif" height=48 width=48 alt="Image ToolTip" >
<SCRIPT LANGUAGE="VBScript">
<!-β
Sub WebButton1_Click()
MsgBox "WebButton was clicked"
end sub
-->
</SCRIPT>
ΠΠ»Π΅ΠΌΠ΅Π½Ρ ActiveX ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΊΠ½ΠΎΠΏΠΊΡ Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΎΠΉ. ΠΠ»Ρ ΡΠ΅Π³ΠΎ ΠΌΠ½Π΅ Π²ΠΎΠ·ΠΈΡΡΡΡ Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½Π° Web-ΡΡΡΠ°Π½ΠΈΡΡ ΡΡΠ΅Ρ ΠΌΠ΅ΡΠ½ΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π±ΡΠ΄Π΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΠΊΠ°ΠΊ ΠΊΠ½ΠΎΠΏΠΊΠ°? ΠΠ° ΡΡΠΎ Π΅ΡΡΡ Π΄Π²Π΅ ΠΏΡΠΈΡΠΈΠ½Ρ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΊΠ½ΠΎΠΏΠΊΠ° Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ΅Π°Π»ΠΈΡΡΠΈΡΠ½Π΅Π΅ β ΠΎΠ½Π° Π½Π°ΠΆΠΈΠΌΠ°Π΅ΡΡΡ ΠΈ ΠΎΡΠΆΠΈΠΌΠ°Π΅ΡΡΡ ΠΏΠΎ ΡΠ΅Π»ΡΠΊΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΎ Π½Π°ΡΡΠΎΡΡΠ΅ΠΉ ΠΊΠ½ΠΎΠΏΠΊΠ΅. ΠΠΎ-Π²ΡΠΎΡΡΡ , Ρ Ρ ΠΎΡΠ΅Π» ΠΏΠΎΠΊΠ°Π·Π°ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ActiveX, Π° ΠΊΠ½ΠΎΠΏΠΊΠ° β ΡΡΠΎ ΠΏΡΠΎΡΡΠ΅ΠΉΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΡΠΉ Ρ ΠΌΠΎΠ³ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠ΅Π»ΡΡ .
ΠΠ»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ ΠΊΠΎΠ΄Π° Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» AppWizard. Π― ΡΡΡΠ°Π½ΠΎΠ²ΠΈΠ» ΡΠ»Π°ΠΆΠΎΠΊ "Activate when visible" ΠΈ ΠΎΡΠΊΠ»ΡΡΠΈΠ» Π²ΡΠ΅ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»Π°ΠΆΠΊΠΈ. Π ΠΎΠΏΡΠΈΠΈ "Which window class, if any, should this control subclass?" Ρ Π²ΡΠ±ΡΠ°Π» BUTTON. AppWizard Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΌΠ°ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, Π½Π΅ ΠΎΡΠ½ΠΎΡΡΡΠ΅Π³ΠΎΡΡ ΠΊ Π΄Π°Π½Π½ΠΎΠΉ ΡΡΠ°ΡΡΠ΅. Π ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ, Ρ ΠΎΡΡΠ°Π½ΠΎΠ²Π»ΡΡΡ Π½Π° ΠΊΠΎΠ΄Π΅, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½ΠΎΠΌ ΠΌΠ½ΠΎΠΉ Π² ΠΊΠ»Π°ΡΡ CWebButtonCtrl (ΡΠΌ. ΡΠΈΡ.5). ΠΠ°Π²Π°ΠΉΡΠ΅ Π΄Π»Ρ Π½Π°ΡΠ°Π»Π° Π²Π·Π³Π»ΡΠ½Π΅ΠΌ Π½Π° ΠΏΠ°ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΊΠ»Π°ΡΡΠ°. CWebButtonCtrl::m_bToolTipEnabled ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π² TRUE, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ. Π CWebButtonCtrl::m_strToolTipText Ρ ΡΠ°Π½ΠΈΡΡΡ ΡΠ΅ΠΊΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ. Π― Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΎΠ±Π΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΡΠ΅ΡΠ΅Π· ClassWizard ΠΈ ΠΎΠ½ΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ OLE-ΡΠ²ΠΎΠΉΡΡΠ²Π°, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΠ΅ΠΌΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ MFC ΠΏΡΠΈ ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ.
Π ΠΈΡ.5. CWebButtonCtrl
// WebButtonCtl.cpp : Implementation of the CWebButtonCtrl OLE control class.
/////////////////////////////////////////////////////////////////////////////
// CWebButtonCtrl::RelayToolTipEvent β Pass mouse messages to ToolTip
void CWebButtonCtrl::RelayToolTipEvent(const MSG* pMsg) {
MSG MsgCopy;
::memcpy(&MsgCopy, pMsg, sizeof(MSG));
FilterToolTipMessage(&MsgCopy);
}
int CWebButtonCtrl::OnToolHitTest(CPoint point, TOOLINFO* pTI) const {
if (m_bToolTipEnabled && pTI != NULL && pTI->cbSize >= sizeof(TOOLINFO)) {
// setup the TOOLINFO structure
pTI->hwnd = m_hWnd;
pTI->uId = 0;
pTI->uFlags = 0;
GetClientRect(&(pTI->rect));
pTI->lpszText = LPSTR_TEXTCALLBACK;
}
return (m_bToolTipEnabled ? 1 : β1);
}
/////////////////////////////////////////////////////////////////////////////
// CWebButtonCtrl message handlers
int CWebButtonCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) {
if (COleControl::OnCreate(lpCreateStruct) == β1) {
return β1;
}
if (m_Bitmap.LoadBitmap(IDB_WEBBUTTON)) {
SendMessage(BM_SETIMAGE, IMAGE_BITMAP, (LPARAM)m_Bitmap.GetSafeHandle());
} else {
TRACE("Unable to load bitmap for button.");
}
EnableToolTips(TRUE);
return 0;
}
void CWebButtonCtrl::OnMouseMove(UINT nFlags, CPoint point) {
RelayToolTipEvent(GetCurrentMessage());
COleControl::OnMouseMove(nFlags, point);
}
void CWebButtonCtrl::OnLButtonDown(UINT nFlags, CPoint point) {
RelayToolTipEvent(GetCurrentMessage());
COleControl::OnLButtonDown(nFlags, point);
}
void CWebButtonCtrl::OnLButtonUp(UINT nFlags, CPoint point) {
RelayToolTipEvent(GetCurrentMessage());
COleControl::OnLButtonUp(nFlags, point);
}
BOOL CWebButtonCtrl::OnToolNeedText(UINT id, NMHDR * pNMHDR, LRESULT * pResult) {
TOOLTIPTEXT *pTTT = (TOOLTIPTEXT *)pNMHDR;
::strcpy(pTTT->szText, m_strToolTipText);
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// Property changed handlers
void CWebButtonCtrl::OnToolTipEnabledChanged() {
SetModifiedFlag();
}
void CWebButtonCtrl::OnToolTipTextChanged() {
SetModifiedFlag();
}
CWebButtonCtrl::PreCreateWindow ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΠΎΠΉ Π΅ΠΌΡ ΡΡΡΡΠΊΡΡΡΠΎΠΉ CREATESTRUCT. Π― Π·Π°Π΄Π°Π» Π΄Π»Ρ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΡΡΠΈΠ»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠΉ ΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ (owner-draw) β BS_OWNERDRAW β Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΠΈΡΠΎΠ²Π°Π»Π°ΡΡ ΡΠ°ΠΌΠΊΠ° ΡΠΎΠΊΡΡΠ° (focus rect) ΠΏΡΠΈ Π°ΠΊΡΠΈΠ²ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ. Π ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΡΠ°ΠΌΠΊΠ° Π±ΡΠ»Π° Π±Ρ Π²ΡΠ΅ Π²ΡΠ΅ΠΌΡ Π²ΠΈΠ΄Π½Π°. ΠΠ°ΠΊ ΠΏΠΎΠ±ΠΎΡΠ½ΡΠΉ ΡΡΡΠ΅ΠΊΡ Π·Π°Π΄Π°Π½ΠΈΡ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΡΠΈΠ»Ρ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ CWebButtonCtrl::OnOcmDrawItem Π΄Π»Ρ ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ. CWebButtonCtrl::OnCreate Π·Π°Π³ΡΡΠΆΠ°Π΅Ρ ΠΈ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΊΠ°ΡΡΠΈΠ½ΠΊΡ Π΄Π»Ρ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΠΎΡΡΠ»ΠΊΠΎΠΉ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ BM_SETIMAGE. ΠΠ½Π° ΡΠ°ΠΊΠΆΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅Ρ CWebButton::EnableToolTips, ΡΡΠΎΠ±Ρ Π·Π°Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ ΠΊΠ»Π°ΡΡΠΎΠΌ CWnd.
Π€ΡΠ½ΠΊΡΠΈΠΈ CWebButtonCtrl::OnMouseMove, CWebButtonCtrl::OnLButtonDown, ΠΈ CWebButtonCtrl::OnLButtonUp Π΄Π΅Π»Π°ΡΡ ΠΎΠ΄Π½ΠΎ ΠΈ ΡΠΎ ΠΆΠ΅ β ΠΎΠ½ΠΈ Π²ΡΠ΅ Π²ΡΠ·ΡΠ²Π°ΡΡ CWnd::RelayToolTipEvent. ΠΠ΅ΡΠΎΠ΄ CWebButtonCtrl::RelayToolTipEvent Π΄Π΅Π»Π°Π΅Ρ Π½Π΅ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΡ ΠΊΠΎΠΏΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΅ΠΌΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ CWnd::FilterToolTipMessage. ΠΠΎΠΏΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ Π΄Π΅Π»Π°Π΅ΡΡΡ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ CWnd::FilterToolTipMessage ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π΅ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. Π― ΠΌΠΎΠ³ Π±Ρ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΠΊ Π½Π΅ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΠΎΠΌΡ, Π½ΠΎ ΡΡΠΎ Π½Π΅Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ CWnd::FilterToolTipMessage ΠΌΠΎΠ³Π»Π° Π±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅. ΠΠ±ΡΡΠ½ΠΎ CWnd Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π²ΡΠ·ΡΠ²Π°Π΅Ρ CWnd::FilterToolTipMessage Π² ΡΡΠ½ΠΊΡΠΈΠΈ CWnd::PreTranslateMessage. ΠΠ΄Π½Π°ΠΊΠΎ, Π² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ΅ ActiveX ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΌΡΡΠΈ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² CWnd::PreTranslateMessage, ΠΎΠ½Π° Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ½ΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π° (CWnd::PreTranslateMessage Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠ»Π°Π²ΠΈΠ°ΡΡΡΠ½ΡΠΌΠΈ Π°ΠΊΡΠ΅Π»Π΅ΡΠ°ΡΠΎΡΠ°ΠΌΠΈ). Π ΠΎΠ±ΡΡΠ½ΠΎΠΌ MFC-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ CWnd::PreTranslateMessage Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ°Π±ΠΎΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ CWinThread::PumpMessage.
CWebButtonCtrl::OnToolHitTest Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ CWnd::FilterToolTipMessage, ΠΈ Ρ ΠΏΠ΅ΡΠ΅ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ» Π΅Π΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π΅ΠΌΡΡ Π΅ΠΉ ΡΡΡΡΠΊΡΡΡΡ TOOLINFO. ΠΠ°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΡΡΠΊΡΡΡΡ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π΄Π»Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠ°Π·ΡΠ΅ΡΠ΅Π½Ρ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ. ΠΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠ° (ΡΠ»Π΅ΠΌΠ΅Π½Ρ ToolTip) Π±ΡΠ΄Π΅Ρ ΠΏΠΎΠΊΠ°Π·Π°Π½Π° Π½Π° ΡΠΊΡΠ°Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΡΡ ΠΏΠΎΠ»ΡΡ ΡΡΡΡΠΊΡΡΡΡ TOOLINFO. ΠΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π½Π° NULL ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ ΡΡΡΡΠΊΡΡΡΡ β ΠΈΠ·Π±ΡΡΠΎΡΠ½ΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ Π²Ρ ΠΎΠ΄Π½ΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π½Π° ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΡΡΡ. ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΡΡΠΊΡΡΡΡ TOOLINFO ΡΡΠ½ΠΊΡΠΈΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ ΠΏΠΎΠ»Π΅ rect ΡΠ°Π²Π½ΡΠΌ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠΉ ΡΠ°ΡΡΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ. ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, Π²ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠ° Π·Π°Π΄Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ. ΠΠΎΠ»Ρ lpszText ΠΏΡΠΈΡΠ²Π°ΠΈΠ²Π°Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ LPSTR_CALLBACK, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ΅Π³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ToolTip ΠΏΠΎΡΡΠ»Π°Π΅Ρ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ TTN_NEEDTEXT, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΊΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ. CWebButtonCtrl::OnToolNeedText ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΡΠΎ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ToolTip, ΠΊΠΎΠΏΠΈΡΡΡ ΡΡΡΠΎΠΊΡ ΠΈΠ· m_strToolTipText Π² ΠΏΠΎΠ»Π΅ szText ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠΉ ΡΡΡΡΠΊΡΡΡΡ TOOLTIPTEXT.
ΠΠ°ΠΊ Π²Ρ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ActiveX ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ΅ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ ΠΊΠ»Π°ΡΡΠΎΠΌ CWnd. Π‘ΡΠ°ΡΡΡ Q141871 Π±Π°Π·Ρ Π·Π½Π°Π½ΠΈΠΉ ΠΎΠΏΠΈΡΡΠ²Π°Π΅Ρ Π΅ΡΠ΅ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ ActiveX ΠΏΡΡΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΠ»Π°ΡΡΠ° CToolTipCtrl ΠΈ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ Π΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΉ AddTool ΠΈ UpdateTipText. ΠΠ΅ΡΡΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ActiveX, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ ΡΡΡ ΡΠ΅Ρ Π½ΠΈΠΊΡ, ΠΏΡΠΈΠ»Π°Π³Π°Π΅ΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΌ ΠΊΠΎΠ΄ΠΎΠΌ (ΡΠΌ. ΡΡΠ°ΡΡΡ Q165577). Π ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° Π΄Π»Ρ ΠΎΠ±ΠΎΠΈΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΎΠ² ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ². Π’Π°ΠΊ ΠΊΠ°ΠΊ Π΄Π°Π»Π΅Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΡΠΎΡΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ, Π·Π΄Π΅ΡΡ Ρ Ρ ΠΎΡΡ ΠΏΠΎΠ»Π½Π΅Π΅ ΡΠ°ΡΠΊΡΡΡΡ Π΄Π΅ΡΠ°Π»ΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΎΠΊ ΠΊΠ»Π°ΡΡΠΎΠΌ CWnd.
Π₯ΠΎΡΡ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅Π΄ΠΈΡΡ Π²Π°Ρ ΠΎΠ± ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΡΡΠΈ ΠΌΠΎΠ΅ΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠΎ-ΠΏΠ΅ΡΠ²ΡΡ , ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΠΎΡΠ²ΡΡΡΡ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ActiveX. Π Π°Π·ΠΌΠ΅Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ° Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ. ΠΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π½Π°Π΄ΡΠΌΠ°Π½Π°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π²Ρ Π²ΡΡΠ΄ Π»ΠΈ Π±ΡΠ΄Π΅ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΏΠΎΡΠ»Π΅ Π·Π°Π³ΡΡΠ·ΠΊΠΈ Web-ΡΡΡΠ°Π½ΠΈΡΡ. ΠΠΎ-Π²ΡΠΎΡΡΡ , ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ActiveX ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡ ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ, ΠΈΠ½Π°ΡΠ΅ Π»ΡΠ±ΠΎΠΉ ΠΏΠΎΡΠ΅ΡΠΈΡΠ΅Π»Ρ ΡΡΠΎΠΉ Web-ΡΡΡΠ°Π½ΠΈΡΡ ΡΠ²ΠΈΠ΄ΠΈΡ ΠΎΠΊΠ½ΠΎ Ρ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ. ΠΠ°Ρ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ActiveX Π½Π΅ΠΏΠΎΠ΄ΠΏΠΈΡΠ°Π½. Π ΡΡΠ΅ΡΡΠΈΡ , Π² ΠΊΠ½ΠΎΠΏΠΊΡ ΠΆΠ΅ΡΡΠΊΠΎ Π·Π°ΡΠΈΡΠ° ΠΎΠ΄Π½Π° ΠΊΠ°ΡΡΠΈΠ½ΠΊΠ°. ΠΠ°ΡΡΠΎΡΡΠΈΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ActiveX Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΌΠ΅ΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ ΠΌΠ΅Π½ΡΡΡ ΠΊΠ°ΡΡΠΈΠ½ΠΊΠΈ Π½Π° ΠΊΠ½ΠΎΠΏΠΊΠ΅.
ΠΠ»Ρ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ ActiveX-ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» ActiveX Control Pad, ΠΊΠΎΡΠΎΡΡΠΉ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π΄Π»Ρ Π±Π΅ΡΠΏΠ»Π°ΡΠ½ΠΎΠ³ΠΎ ΡΠΊΠ°ΡΠΈΠ²Π°Π½ΠΈΡ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ http://www.microsoft.com/workshop/author/cpad/cpad.htm. ΠΠ° ΡΠΈΡΡΠ½ΠΊΠ΅ 4 ΠΏΠΎΠΊΠ°Π·Π°Π½ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΡΠΎΠΉ ΡΡΠΈΠ»ΠΈΡΠΎΠΉ HTML-ΠΊΠΎΠ΄. Π ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ OBJECT ID, WIDTH, HEIGHT, ΠΈ CLASSID. Π’Π°ΠΊΠΆΠ΅ Ρ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ActiveX ΠΈΠΌΠ΅Π΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ², ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉΡΡΠ². ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ ToolTipText (ΠΈΠΌΠ΅ΡΡΠΈΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ "WebButton ToolTip Test") Π·Π°Π΄Π°Π΅Ρ ΡΠ΅ΠΊΡΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ Π΄Π»Ρ Π½Π°ΡΠ΅ΠΉ ΠΊΠ½ΠΎΠΏΠΊΠΈ. Π‘ΡΡΠΎΠΊΠ°