...
The default link text is Go There but it can be customised by providing your own XAML message string with your link text surrounded by the <a></a> tags when inserting the element. To use a custom XAML message you need to set the flag NI_FLAG_MESSAGEBAR_USERXAML CUSTOMMESSAGE in the NAVSETITEM structure. strLabel then becomes the custom XAML and the Hyperlink node's Tag attribute in the XAML specifies the location to navigate to. e.g.
Code Block |
---|
void AddMessageBarItem(LPCWSTR text, LPCWSTR link) { // First get the root of the MESSAGEBAR domain NAVSETITEM messageBarRootData; memset(&messageBarRootData, 0, sizeof(NAVSETITEM)); if( !NavGetItem(_T("MESSAGEBAR"), &messageBarRootData) ) { return; // Failed to find MESSAGEBAR root } NavHandle messageBarRoot = messageBarRootData.hItem; NAVSETITEM newItem; memset(&newItem, 0, sizeof(newItem)); newItem.flags = NI_FLAG_MESSAGEBAR_USERXAMLCUSTOM_MESSAGE; newItem.EventMask = NI_EVENT_MOUSE_LCLICK; std::wstring strLabel; FormatString(strLabel,newItem.strLabel = L"<Image Source='2400'/><TextBlock Padding='3, 0, 20, 0' VerticalAlignment='Center'>This This is the message:text <Hyperlink Tag='MESSAGEBAR\\MyComponent'>%s</Hyperlink></TextBlock>", CResString(IDS_LABEL_THEREISANOTIFICATION).GetBuffer(0), CResString(IDS_LABEL_GOTONOTIFICATIONS).GetBuffer(0)); ItemNew.strLabel = strLabel.c_str(); ItemNew.strDescription<a>with an embedded link</a> to navigate to"; newItem.strDestination = _T("{Notifications}"); // where to go to ItemNewnewItem.lParam = (LPARAM)this; ItemNewnewItem.pInterface = &gTaskInterface; NavInsertItem(hMessageBar, _T("NotificationWarning"), &ItemNewnewItem); hWarningNavHandle messageBarItem = ItemNewnewItem.hItem; } |
Hyperlink tag is always the item to look up to check how the event is processed (NOTIFY or GOTO).
...