Bir ActiveX denetimi (CToolBar sınıfı) bir araç çubuğu, bir alt pencere adı olabilir. Bu makalede, bu tür bir araç çubuğu oluşturmak için bir yol gösterir ve araç ipuçları için nasıl, araç çubuğunu pencerede ayrıca düğmeleri.
Visual C++, bir araç çubuğu oluşturmak için kullanabileceğiniz iki yöntem sağlar. Makale desribes kaynak düzenleyici kullanarak bir araç çubuğu kaynak oluşturma. Bir bit eşlem kaynak zaten varsa, lütfen bit eşlem kaynağınız bir araç çubuğu kaynağına dönüştürmek için "araç dönüştürme bit eşlemler için çubukları" çevrimiçi belgelerine bakın.
Adımları aşağıda gösterilmektedir:
Bir MFC ActiveX denetimi oluşturmak için MFC ActiveX Denetim Sihirbazı'nı kullanın.
Bir araç çubuğu kaynak denetim projesi oluşturun.
Bir araç ipucu dize kaynağı her düğmenin araç ekleyin. Bu araç ipucu dize kaynakları TTN_NEEDTEXT bildirim kodu işleyicisinde yüklenmeyecektir.
WH_GETMESSAGE kanca geri arama işlevi, ActiveX denetimi-türetilmiş sınıf ekleyin. Kanca işlemi uygulamanın PreTranslateMessage() çağrılıyor sorumlu; Bu, araç ipuçları'nı etkinleştirir ve FilterToolTipMessage() çağrısına neden olur. ActiveX denetimi bulunan hiçbir ileti pump yalnızca bir inproc sunucu gibi [ASCII 151] olduğundan BIR kanca işlemi gerekiyor:
HHOOK hHook = NULL;
// Hook procedure for WH_GETMESSAGE hook type.
LRESULT CALLBACK GetMessageProc(int nCode, WPARAM wParam, LPARAM
lParam)
{
// Switch the module state for the correct handle to be used.
AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
// If this is a keystrokes message, translate it in controls'
// PreTranslateMessage().
LPMSG lpMsg = (LPMSG) lParam;
if( (nCode >= 0) &&
PM_REMOVE == wParam &&
AfxGetApp()->PreTranslateMessage(lpMsg))
{
lpMsg->message = WM_NULL;
lpMsg->lParam = 0L;
lpMsg->wParam = 0;
}
// Passes the hook information to the next hook procedure in
// the current hook chain.
return ::CallNextHookEx(hHook, nCode, wParam, lParam);
}
ActiveX denetiminin bir alt pencere araç çubuğu penceresi (bir CToolBar sınıfı) oluşturun. Bu düzeltme eki WM_CREATE iletiye yanıt olarak yapılır. Buna ek olarak, ileti işleyicisi WM_CREATE de WH_GETMESSAGE kanca işlemi'ni yüklemek için uygun bir yerdir.
int CCToolBarCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
// Create a CToolBar window which is a child of ActiveX control.
if (!m_ToolBar.Create(this,
WS_CHILD | WS_VISIBLE | CBRS_TOP | CBRS_TOOLTIPS) ||
!m_ToolBar.LoadToolBar(IDR_TOOLBAR))
{
TRACE0("Failed to create toolbar\n");
return -1; // fail to create
}
// Toolbar has to have TBSTYLE_TOOLTIPS style. Otherwise,
// notification handler for TTN_NEXTTEXT won't be called.
m_ToolBar.ModifyStyle (0, TBSTYLE_TOOLTIPS);
// Move the toolbar so it is VISIBLE on the screen.
CRect rc;
GetClientRect(&rc);
rc.bottom = rc.top + 34;
m_ToolBar.MoveWindow(&rc);
// Because ActiveX control is an inproc server, it does not have a
// message pump. So, messages to child windows created by the
// ActiveX control are not going to be received by the control.
// Thus, we set up a message hook to call PreTranslateMessage().
// This results in the call to FilterToolTipMessage(), which
// activates tooltips.
hHook = ::SetWindowsHookEx(
WH_GETMESSAGE,
GetMessageProc,
AfxGetInstanceHandle(),
GetCurrentThreadId());
ASSERT (hHook);
return 0;
}
Iletinin kanca işlev WM_DESTROY iletiye yanıt olarak kaldırın:
Bir Unicode bildirim kodu) (için TTN_NEEDTEXTW TTN_NEEDTEXTA (ANSI bildirim kodu için) bildirim işleyicisi için ActiveX denetimi türetilmiş sınıf ekleme. Bu bildirim kodu işleyicisinde görüntülenecek araç ipucu dize yüklenemedi:
BEGIN_MESSAGE_MAP(CCToolBarCtrl, COleControl)
//{{AFX_MSG_MAP(CCToolBarCtrl)
ON_WM_CREATE()
ON_COMMAND(ID_BUTTON1, OnButton1) // first button on toolbar
ON_COMMAND(ID_BUTTON2, OnButton2) // second button on toolbar
ON_COMMAND(ID_BUTTON3, OnButton3) // third button on toolbar
ON_WM_DESTROY()
//}}AFX_MSG_MAP
ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
// ANSI notification code (for Windows 95)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTA, 0, 0xFFFF, OnToolTipNotify)
// Unicode notification code (for NT)
ON_NOTIFY_EX_RANGE(TTN_NEEDTEXTW, 0, 0xFFFF, OnToolTipNotify)
END_MESSAGE_MAP()
// Notification handler for tooltips - determine which tooltip
// string resource to be displayed.
BOOL CCToolBarCtrl::OnToolTipNotify(
UINT id, NMHDR * pNMHDR, LRESULT * pResult)
{
TOOLTIPTEXTA* pTTTA = (TOOLTIPTEXTA*) pNMHDR;
TOOLTIPTEXTW* pTTTW = (TOOLTIPTEXTW*) pNMHDR;
int strid = 0;
switch (pNMHDR->idFrom)
{
case ID_BUTTON1:
strid = IDS_BUTTON1;
break;
case ID_BUTTON2:
strid = IDS_BUTTON2;
break;
case ID_BUTTON3:
strid = IDS_BUTTON3;
break;
}
if (strid)
{
*pResult = 0;
CString str;
str.LoadString(strid);
#define _countof(array) (sizeof(array)/sizeof(array[0]))
#ifndef _UNICODE
if (pNMHDR->code == TTN_NEEDTEXTA)
lstrcpyn(pTTTA->szText, str, _countof(pTTTA->szText));
else
_mbstowcsz(pTTTW->szText, str, _countof(pTTTW->szText));
#else
if (pNMHDR->code == TTN_NEEDTEXTA)
_wcstombsz(pTTTA->szText, str, _countof(pTTTA->szText));
else
lstrcpyn(pTTTW->szText, str, _countof(pTTTW->szText));
#endif
return TRUE;
}
return FALSE;
}
(c) Microsoft Corporation 1998, tüm hakları saklıdır. Katkıyı Yeong Kah Tam, Microsoft Corporation.
Bu makaledeki bilginin uygulandığı durum:
Microsoft Foundation Class Library 4.2, Ne zaman ne ile kullanilir:
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:194294
(http://support.microsoft.com/kb/194294/en-us/
)
Bu makale, Microsoft'un artık destek sağlamadığı ürünler ile ilgili olarak yazılmıştır. Bu nedenle, bu makale "olduğu gibi" sağlanmıştır ve bundan sonra güncelleştirilmeyecektir.
Bu makaleyi kullanabilmek için kişisel olarak ne kadar çaba harcadınız?
Çok az
Az
Ne Az, Ne Fazla
Fazla
Çok fazla
Bu bilgiyi geliştirmek için ne yapabiliriz?
Gizliliğinizi korumak için, irtibat bilgilerinizi görüşlerinize eklemeyin.
Teşekkür ederiz! Görüşleriniz, destek içeriğimizi geliştirmek amacıyla kullanılacaktır. Daha fazla yardım seçeneği için lütfen, Yardım ve Destek Ana Sayfası’nı ziyaret edin.