void CAddressBand::CreateGoButton() { const TBBUTTON buttonInfo [] = { { 0, 1, TBSTATE_ENABLED, 0 } }; HINSTANCE shellInstance; shellInstance = _AtlBaseModule.GetResourceInstance(); m_himlNormal = ImageList_LoadImageW(shellInstance, MAKEINTRESOURCE(IDB_GOBUTTON_NORMAL), 20, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_CREATEDIBSECTION); m_himlHot = ImageList_LoadImageW(shellInstance, MAKEINTRESOURCE(IDB_GOBUTTON_HOT), 20, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_CREATEDIBSECTION); fGoButton = CreateWindowEx(WS_EX_TOOLWINDOW, TOOLBARCLASSNAMEW, 0, WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | TBSTYLE_LIST | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS | CCS_NODIVIDER | CCS_NOPARENTALIGN | CCS_NORESIZE, 0, 0, 0, 0, m_hWnd, NULL, _AtlBaseModule.GetModuleInstance(), NULL); SendMessage(fGoButton, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0); SendMessage(fGoButton, TB_SETMAXTEXTROWS, 1, 0); if (m_himlNormal) SendMessage(fGoButton, TB_SETIMAGELIST, 0, reinterpret_cast<LPARAM>(m_himlNormal)); if (m_himlHot) SendMessage(fGoButton, TB_SETHOTIMAGELIST, 0, reinterpret_cast<LPARAM>(m_himlHot)); SendMessage(fGoButton, TB_ADDSTRINGW, reinterpret_cast<WPARAM>(_AtlBaseModule.GetResourceInstance()), IDS_GOBUTTONLABEL); SendMessage(fGoButton, TB_ADDBUTTONSW, 1, (LPARAM) &buttonInfo); }
HRESULT STDMETHODCALLTYPE CAddressBand::SetSite(IUnknown *pUnkSite) { CComPtr<IShellService> shellService; CComPtr<IUnknown> offset34; HWND parentWindow; IOleWindow *oleWindow; HWND toolbar; static const TBBUTTON buttonInfo[] = { {0, 1, TBSTATE_ENABLED, 0} }; HIMAGELIST normalImagelist; HIMAGELIST hotImageList; HINSTANCE shellInstance; HRESULT hResult; fSite.Release(); if (pUnkSite == NULL) return S_OK; hResult = pUnkSite->QueryInterface(IID_IDockingWindowSite, (void **)&fSite); if (FAILED(hResult)) return hResult; parentWindow = NULL; hResult = pUnkSite->QueryInterface(IID_IOleWindow, (void **)&oleWindow); if (SUCCEEDED(hResult)) { oleWindow->GetWindow(&parentWindow); oleWindow->Release(); } if (!::IsWindow(parentWindow)) return E_FAIL; toolbar = CreateWindowEx(WS_EX_TOOLWINDOW, WC_COMBOBOXEXW, NULL, WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_TABSTOP | CCS_NODIVIDER | CCS_NOMOVEY, 0, 0, 500, 250, parentWindow, (HMENU)0xa205, _AtlBaseModule.GetModuleInstance(), 0); if (toolbar == NULL) return E_FAIL; SubclassWindow(toolbar); SendMessage(CBEM_SETEXTENDEDSTYLE, CBES_EX_CASESENSITIVE | CBES_EX_NOSIZELIMIT, CBES_EX_CASESENSITIVE | CBES_EX_NOSIZELIMIT); fEditControl = (HWND)SendMessage(CBEM_GETEDITCONTROL, 0, 0); fComboBox = (HWND)SendMessage(CBEM_GETCOMBOCONTROL, 0, 0); #if 1 hResult = CoCreateInstance(CLSID_AddressEditBox, NULL, CLSCTX_INPROC_SERVER, IID_IAddressEditBox, (void **)&fAddressEditBox); if (FAILED(hResult)) return hResult; #else // instantiate new version #endif hResult = fAddressEditBox->QueryInterface(IID_IShellService, (void **)&shellService); if (FAILED(hResult)) return hResult; hResult = fAddressEditBox->Init(toolbar, fEditControl, 8, pUnkSite /*(IAddressBand *)this*/ ); if (FAILED(hResult)) return hResult; hResult = shellService->SetOwner(pUnkSite); if (FAILED(hResult)) return hResult; // TODO: properly initialize this from registry fGoButtonShown = true; shellInstance = GetModuleHandle(_T("shell32.dll")); normalImagelist = ImageList_LoadImageW(shellInstance, MAKEINTRESOURCE(IDB_GOBUTTON_NORMAL), 20, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_CREATEDIBSECTION); hotImageList = ImageList_LoadImageW(shellInstance, MAKEINTRESOURCE(IDB_GOBUTTON_HOT), 20, 0, RGB(255, 0, 255), IMAGE_BITMAP, LR_CREATEDIBSECTION); fGoButton = CreateWindowEx(WS_EX_TOOLWINDOW, TOOLBARCLASSNAMEW, 0, WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | TBSTYLE_LIST | TBSTYLE_FLAT | TBSTYLE_TOOLTIPS | CCS_NODIVIDER | CCS_NOPARENTALIGN | CCS_NORESIZE, 0, 0, 0, 0, m_hWnd, NULL, _AtlBaseModule.GetModuleInstance(), NULL); SendMessage(fGoButton, TB_BUTTONSTRUCTSIZE, sizeof(TBBUTTON), 0); SendMessage(fGoButton, TB_SETMAXTEXTROWS, 1, 0); SendMessage(fGoButton, TB_SETIMAGELIST, 0, (LPARAM)normalImagelist); SendMessage(fGoButton, TB_SETHOTIMAGELIST, 0, (LPARAM)hotImageList); SendMessage(fGoButton, TB_ADDSTRINGW, (WPARAM)_AtlBaseModule.GetResourceInstance(), IDS_GOBUTTONLABEL); SendMessage(fGoButton, TB_ADDBUTTONSW, 1, (LPARAM)&buttonInfo); return hResult; }