Most components that present a user interface, have an item in the navigation tree that presents a panel when the item is clicked.
When you are ready to create your user interface, the first thing that you typically do is add an item to the navigation tree.
NavItemHelpers in the sdk provides a much more convenient way of managing navigation items. The examples in this section however, use the full low level APIs. |
static NavigationItemUIInterface notificationInterface; NavHandle CreateTreeItem() { // Set up our notification interface so we can receive messages relating to the the navigation item we will insert into the tree memset(&gDataUI,0,sizeof(NavigationItemUIInterface)); notificationInterface.dwSize = sizeof(NavigationItemUIInterface); notificationInterface.NavItemCreateWindow = NavItemCreateWindow; notificationInterface.NavItemDrawItem = NULL; notificationInterface.NavItemNotify = NavItemNotify; notificationInterface.NavItemGetHelpContent = NavItemGetHelpContent; notificationInterface.NavItemFreeHelpContent = NavItemFreeHelpContent; notificationInterface.NavItemShowContextHelp = NavItemShowContextHelp; notificationInterface.NavItemKeyboardNavigate = NavItemKeyboardNavigate; // Get the correct location to insert our new item under. In this case it will be the "Control Panel" node. This has a well known alias that we can you. NAVSETITEM controlPanelItem; if ( !NavGetItem(_T("{ControlPanel}"), &controlPanelItem) ) { return NULL; // Couldn't find it, so we won't go any further } NAVSETITEM treeItem; memset(&treeItem, 0, treeItem); treeItem.size = sizeof(NAVSETITEM); treeItem.flags = NI_FLAG_CUSTOMCONTAINER; // This is a custom container where we control the main panel. treeItem.lParam = 0; // Set any special context data that you want to be sent with messages to the notificationInterface treeItem.strLabel = L"Ad Blocker"; treeItem.strDescription = L"This component adds an HTTP Filter that blocks advertising"; treeItem.hModule = AfxGetResourceHandle(); treeItem.nIconId = iconResourceId; // Some resource id of the icon to display in the navigation tree treeItem.EventMask = 0; // No special events. NI_EVENT_ACTIVATE, NI_EVENT_DEACTIVATE are always sent. See NavInsertItem for more information treeItem.pInterface = notificationInterface; // The interface we are wanting to use to handle events from this item treeItem.strAlias = L"{MyCompanyAdBlocker}"; // Adds an alias. Makes it easier to find and compare navigation items later. if ( !NavInsertItem(controlPanelItem, L"MyCompanyAddBlocker", &treeItem) ) // The path "MyCompanyAdBlocker" is an internal name the user never sees but must be unique under a particular root. { return NULL; } return treeItem.hItem; |