Simple IE-like Menu and Toolbar

Environment: VS6/.NET, Windows 98/Me/2000/XP

1 Overview

This article was inspired by the Alpha WTL Sample application that I saw recently. I decided to do something similar, using the MFC library. Standard MFC applications are very out of date with their 16 colored toolbars and menus without images. There are some MFC extensions that implement Office- or Visual Studio-like control bars. They are pretty and very powerful, but just too complicated for most simple applications. Besides, they don't obey the standard Windows UI style. My idea was to create a simple interface based on Internet Explorer that implements features introduced in Windows XP and remains compatible with all OS versions since Windows 98.

The project consists of three classes:

CMenuBar: A toolbar that looks and acts exactly like a menu bar. It can be placed in a rebar control just like in Internet Explorer. It also draws icons next to menu items.

CAlphaImageList: A replacement for CImageList that supports images with an alpha channel introduced in Windows XP. It automatically generates hot and disabled images looking like those in Internet Explorer 6.

CAlphaToolBar: An extension of CToolBar that allows using alpha channel images.

Under Windows XP, this interface automatically uses either the 3D style or the new flat style (compared in the picture above). Under older OS versions it uses the traditional 3D style. Another feature introduced in Windows XP is images with alpha channel. The icons can have smoothed edges so that they look good on every background, dark or bright. This interface works correctly with images from 16 colors to 32-bit alpha channel bitmaps under all versions of Windows.

2 Using It in Your Applications

Note: The menu bar only works in SDI frame windows. It can't be used in dialog windows or in MDI frame windows.

Step 1: Add AlphaImageList.cpp, AlphaToolBar.cpp, and MenuBar.cpp with their corresponding headers to your project.

Step 2: Make sure that your application uses the Windows XP visual style. Copy the manifest.xml file to the res directory of your project and add the following line to YourApp.rc2:

CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST "res/manifest.xml"

Step 3: Ensure that Windows XP symbols will be included in your project. Add the following directive at the beginning of StdAfx.h or define it in your project settings:

#define _WIN32_WINNT 0x0501

You will need the new Platform SDK that includes Windows XP symbols.

Step 4: Put the following in your frame window header:

protected:  // control bar embedded members
    CStatusBar    m_wndStatusBar;
    CMenuBar      m_wndMenuBar;
    CAlphaToolBar m_wndToolBar;
    CReBar        m_wndReBar;

Of course you may add any number of toolbars and dialog bars to the rebar control.

Step 5: Modify your frame window's OnCreate handler like in the example:

int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)
        return -1;
    
    GetMenu()->DestroyMenu();
    SetMenu(NULL);

    if (!m_wndToolBar.Create(this, AFX_IDW_TOOLBAR) ||
        !m_wndToolBar.LoadToolBar(IDR_MAINFRAME, AILS_NEW))
    {
        TRACE0("Failed to create toolbar\n");
        return -1;      // fail to create
    }

    if (!m_wndMenuBar.Create(this) ||
        !m_wndMenuBar.LoadMenuBar(IDR_MAINFRAME, AILS_NEW))
    {
        TRACE0("Failed to create menubar\n");
        return -1;      // fail to create
    }

    m_wndMenuBar.LoadToolBar(IDR_MAINFRAME);

    if (!m_wndReBar.Create(this, RBS_BANDBORDERS,
        WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN | WS_CLIPSIBLINGS
                 | CBRS_ALIGN_TOP)
        || !m_wndReBar.AddBar(&m_wndMenuBar)
        || !m_wndReBar.AddBar(&m_wndToolBar, NULL,
                             (CBitmap*)NULL, RBBS_BREAK))
    {
        TRACE0("Failed to create rebar\n");
        return -1;      // fail to create
    }

    if (!m_wndStatusBar.Create(this) ||
        !m_wndStatusBar.SetIndicators(indicators,
          sizeof(indicators)/sizeof(UINT)))
    {
        TRACE0("Failed to create status bar\n");
        return -1;      // fail to create
    }

    return 0;
}

Step 6: Add the following message handlers to your frame window: PreTranslateMessage, WM_MENUCHAR, WM_SYSCOMMAND, WM_ACTIVATE, and WM_SETTINGCHANGE.

BOOL CMainFrame::PreTranslateMessage(MSG* pMsg)
{
    if (pMsg->message == WM_SYSKEYDOWN && pMsg->wParam
                      == VK_MENU)
        m_wndMenuBar.SetPrefix(TRUE);
    else if (pMsg->message == WM_KEYUP && pMsg->wParam
                           == VK_MENU)
        m_wndMenuBar.SetPrefix(FALSE);

    return CFrameWnd::PreTranslateMessage(pMsg);
}

LRESULT CMainFrame::OnMenuChar(UINT nChar, UINT nFlags,
                               CMenu* pMenu)
{
    if (m_wndMenuBar.OpenMenu(nChar))
        return -1;

    return CFrameWnd::OnMenuChar(nChar, nFlags, pMenu);
}

void CMainFrame::OnSysCommand(UINT nID, LPARAM lParam)
{
    if (nID == SC_KEYMENU && m_wndMenuBar.OnKeyMenu(lParam))
        return;

    CFrameWnd::OnSysCommand(nID, lParam);
}

void CMainFrame::OnActivate(UINT nState, CWnd* pWndOther,
                            BOOL bMinimized)
{
    m_wndMenuBar.Activate(nState != WA_INACTIVE);

    CFrameWnd::OnActivate(nState, pWndOther, bMinimized);
}

void CMainFrame::OnSettingChange(UINT uFlags, LPCTSTR lpszSection)
{
    m_wndMenuBar.UpdateSettings();

    CFrameWnd::OnSettingChange(uFlags, lpszSection);
}

2.1 Toolbar images

The CAlphaImageList class supports two styles of images:

AILS_OLD: The image list uses a 16-color bitmap and doesn't create the hot and disabled images. The toolbar looks like in old style applications. The default background color (RGB 192,192,192) is used as transparent. You can change it by modifying the following line in AlphaImageList.cpp:

#define AIL_TRANSPARENT   RGB(192,192,192)

To avoid some gray parts of buttons (like the disk label or the printer) being treated as transparent, I modified the original bitmap so that the magenta color is replaced by a slightly lighter gray (RGB 208,208,208), which is non-transparent. You can replace the Toolbar.bmp file with Toolbar4.bmp from the resources directory of the demo project. Before that, change the toolbar button size to 16x16 pixels.

AILD_NEW: The image list uses a 32-bit bitmap if comctl32.dll version 6 is detected or a 24-bit bitmap otherwise. You can use any number of colors in the toolbar bitmap. If the bitmap contains an alpha channel and the image list is 32-bit, the alpha channel is used as transparency information. Otherwise, the gray color (RGB 192,192,192) is transparent and all other colors are opaque.

You can create 32-bit bitmaps using Adobe Photoshop or a similar application. Even if the image has an alpha channel, you should use the gray color as the background so that the transparency is correct in previous OS versions—the only difference is that the icon edges won't be smooth in that case.

The resources directory of the demo project contains three versions of the new style toolbar bitmap: 8-bit, 24-bit, and 32-bit (with alpha channel). You can use whichever you want in your application. The bitmap was taken from the WTL sample application, with the background color changed to gray. The toolbar button size should be 16x16.

Note that Visual Studio will not let you edit the toolbar if the bitmap contains more than 256 colors. In that case, you will have to modify the resource file (YourApp.rc) by hand. The toolbar definition looks like this (16, 16 is the button size and IDR_MAINFRAME is the resource ID):

IDR_MAINFRAME TOOLBAR DISCARDABLE  16, 16
BEGIN
    BUTTON      ID_FILE_NEW
    BUTTON      ID_FILE_OPEN
    BUTTON      ID_FILE_SAVE
    SEPARATOR
    BUTTON      ID_EDIT_CUT
    ...
END

2.2 Menu resource

CMenuBar contains the following functions to load data from resources:

BOOL LoadMenuBar(UINT nID, int nStyle=AILS_OLD)

Load a menu resource. The nStyle parameter specifies the image list style (see above). You may call this function multiple times to replace the previous menu. The menu bar will automatically resize inside a rebar if needed. All images will be discarded.

BOOL LoadToolBar(UINT nID)

Load images from the bitmap resource and assign them to menu items with the same command IDs as in the toolbar resource. You may add multiple toolbars to a menu. You can create a separate toolbar resource that contains images for menu items, or use the default toolbar.

The menu bar assumes that the size of all images is 16x16 pixels. You can change this by editing the following lines in MenuBar.cpp:

#define MB_CX_ICON  16
#define MB_CY_ICON  16

2.3 Popup menus

CMenuBar also provides support for displaying context menus with the correct visual style and images. Put all popup menus in one resource and call the following function to load it:

BOOL LoadPopupMenu(UINT nID)

This menu will automatically use the same images as the window menu. There are two functions to display popup menus:

void TrackPopup(int nIndex, CPoint ptPos)
void TrackPopup(LPCSTR lpszName, CPoint ptPos)

The first one uses the menu index; the second one uses the name of the menu, which may be more comfortable if your application uses many context menus. The ptPos is the menu position in screen coordinates.

Note: If you don't load a separate popup menu, the window menu will be used by default.

3 Final Notes

I found a bug in MFC 6 that caused the edit view to be incorrectly placed in the window, so that it covers a part of the rebar. The CEditView::CalcWindowRect should be replaced with CView::CalcWindowRect to fix this. Also, the edit view doesn't load and save the text correctly if comctl32.dll version 6 is used.

Implementing support for MDI applications is possible, but quite difficult. Anyway, the MDI architecture is not comfortable and out of date; check out my last article (Multithreaded SDI Applications) for a different solution. There are a lot of things that could be done, such as support for chevrons, popup buttons, and so forth. However, I tried to keep this code small, simple, and yet useful for most purposes.

Visit the author's home page at http://www.mimec.w.pl.

Downloads

Download demo project - 49 Kb
Download source - 15 Kb


Comments

  • La más completa destacados ghd

    Posted by rumikp125 on 07/17/2013 01:49am

    La ciudad industrial del siglo XIX y la construcción de puertos, el rápido desarrollo económico, la convierten en la segunda mayor ciudad del país, Aarhus es una ciudad comercial Jutlandia, Noruega y Dinamarca también se conectan otros medios de transporte de la ciudad hub.Clean y hermosa ciudad de Aarhus, el paisaje rural de Europa, El edificio formado número de único e innovador bygninger.fordi diseño de su ubicación geográfica y los residentes locales entusiastas culture.Aarhus amor siempre ha sido el centro cultural de Jylland.Vores línea planchas ghd para la venta, la cerámica lineal, muy bueno para proteger tu cabello se ve muy buena resistencia al calor. Rápidamente se calienta, en el transcurso de 2-3 minutos para alcanzar la temperatura deseada. Voltaje seguro, fácil de usar que en cualquier país. La plancha de pelo ghd es el más barato. Tenemos una amplia gama de productos y colores. Si te gusta, por lo que comprar lo correcto. [url=http://planchaspeloghdes.qsite.dk/]GHD España[/url] GHD Pink Limited muestra siempre un aumento en gran tendencia esta temporada rosa es una tendencia esta temporada. Está equipado con características avanzadas tales como la mejora del control de temperatura para mantener el calor durante el peinado, un modo de espera y la tensión universal. Además, GHD es el estilo perfecto de la Nueva Hermosa rosa Styler Box Set es un secreto, porque todo está encerrado en una caja hermosa, por lo que este conjunto un regalo perfecto: Usted puede disfrutar de envío gratis a Dinamarca, no hay impuesto y guardar 50% off. Si usted tiene alguna pregunta, por favor póngase en contacto con nosotros. tenemos la capacidad de ofrecer el mejor servicio. No lo dude, aprovechar la oportunidad para comprar moda ghd planchas fladjern.ghd son el absoluto último en peluquería. Con planchas ghd, usted no está solo enderezar su cabello - que también puede utilizar su plancha para el cabello GHD para crear rizos grandes y voluminosos glamour, longitudes de movimiento, cuello de soldadura o un montón de volumen en la parte superior. [url=http://ghdplanchasonline.manifo.com/]planchas ghd[/url] que esté limpio y seco. Para lograr un cabello hermoso saludable, tratar de calentar el champú protección y profunda condición de su aire limpio cabello. Use champú protección contra el calor en el proceso de consolidación para proteger su pelo y lo mantendrá tu cabello limpio y blød.dit cabello seco, toalla de microfibra, van a absorber una gran cantidad de agua, luego retire una toalla ordinaria, a continuación, aplicar dejar en el aire, lo que ayudará a mantener el cabello en el agua, para evitar extra seco y nervioso. Cepille su pelo, y luego secar al aire o secar el pelo. De cualquier manera, el cabello debe estar completamente seco antes de pelo ghd plancha ud.Når liso tu cabello es seco, ya está listo para usar su pelo liso, se debe aplicar para cada componente del derecho a postularse para el pelo liso ghd antes de usar un spray de protección contra el calor y el aerosol de suero brillo. Trate de evitar más de la misma sección de cabello nuevo. Cuanto más se puede causar más daño

    Reply
  • Lisseur GHD détaillants de plus en plus préoccupés par la Norvège

    Posted by ivgxja757 on 07/16/2013 08:42am

    Lisseur céramique chaleur plus uniforme que les redresseurs métalliques et la distribution de chaleur permet un style orienté lisse. Redresseurs en céramique ne sont pas aussi sujettes à l'écaillage ou de fissuration comme redresseurs de métal et de verre. Pour profiter des avantages de votre lisseur en céramique pour une longue période, nettoyez les plaques en céramique. Une accumulation de laque et d'autres produits de coiffage peut aussi affecter votre style de cheveux. Nettoyage des plaques en céramique ne nécessitent que quelques produits et quelques minutes de votre time.So comment nettoyer un GHD Styler? [url=http://ghdpascherfer.webgarden.es/]ghd lisseur prix[/url] Tige droite GHD est l'un des merkene le plus populaire au monde. La technologie céramique unique chauffe DetteGHD droit opp tige à sa température maximale en quelques secondes. GHD Flatt fer Bruker de la chaleur infrarouge lointain pour des résultats sûrs qui préservent fuktigheten et brillance naturelle des cheveux, donne les nos salons Ferdig mince avec une puissance s'approche pas d'effort. Opprette boucles serrées, secousses et les vagues en appelant également à la ligne de Rett parfait. L'outil de style idéal utilisé pour les anges urbains aux cheveux courts, l'agent et les cheveux longs. [url=http://ghdpascherfer.hpage.com/]lisseur ghd styler[/url] Il a toutes les fonctionnalités dont vous avez besoin et offre un bel éclat rempli et les cheveux doux et soyeux avec un finish.Tangen avoir nano-revêtement qui protège les cheveux contre les dommages de la chaleur et des manches longues et minces disques minces (120 x 24 mm), qui est également verrouillable . Il est équipé de la fonction ionique, une fonction qui émet des ions négatifs qui empêchent la formation d'électricité statique pendant que vous section. Fonction Ionic ferme la tige du cheveu et offre une lisse les cheveux avec plus d'éclat. ! Avec une température maximale de 230 degrés s'adapte à tous les types de cheveux et longueurs et réchauffe la température de travail en seulement 20 secondes D'autre part, il y aura un nombre égal de femmes qui ont blessé des anneaux et des produits de beauté ces GHD peut atteindre n'importe quel look; afin femme aux cheveux bouclés peut être heureux avec elle dirigée cheveux raides femme de cheveux raides peuvent prendre du plaisir dans ses cheveux bouclés.

    Reply
  • GHD jern beundrere vokser i antall og er forventet Ã¥ fortsette Ã¥ øke

    Posted by pletcherzui on 06/14/2013 12:00pm

    [url=http://www.rettetangnewsnorge.com/]ghd rettetang[/url] For det første GHD IV glattejernet har svært lite realistisk konkurranse, er GHD ansett på en forbruker og profesjonelt nivå (frisører) som nummer én håret styling verktøy. Dernest utvikler som teknologien kostnaden ved produksjon reduserer – vel svaret mitt her er at GHD har ikke gått på noen reduksjon ion produksjonskostnader til forhandleren (Salon eiere) og faktisk kostpriser har økt som følge av en økning i RRP . Går tilbake tom når GHD MK1 til MK3 var på salg de hadde en RRP £ 99, nå MK4 GHD styler har en RRP £ 119. [url=http://bestghdrettetangtilbud.devhub.com/] Kjøp ghd rettetang[/url] Som flere og flere mennesker over hele verden ønsker for rett hår, er GHD hår rettetang blitt svært populære de siste årene. Denne hair rette er definitivt ikke et nytt konsept, og det var svært aktiv i på 60- og 70-tallet til store krøller cane i mote i åttiårene. Men den beste delen av disse GHD skjønnhetsprodukter er at de kan benyttes for styling håret bare om en eller annen form, enten det er poker bølgete, rette eller buede. Og hva er det du velger å gjøre, er du sikker på å gjøre mange en hodet sving. [url=http://www.rettetangnewsnorge.com/]ghd rettetang pris[/url] Selskapet har gitt ut serien av rettetang med glossy og elegant finish.The konvensjonelle GHD hår straighteners er vanligvis utgitt i matt finish og kommer i enten begrenset rosa GHD edition eller standard svart farge. For å lette mens styling, produktet har blitt designet med dreibar ledning vedlegg slik at ledningen knuten av håret verktøyet vil overnatte gratis som du stil. Jevn fordeling av trykket over håret oppnås ved den flytende plater funksjonen i tangen.

    Reply
  • Verrassing door het monster slaat, altijd voer in de mode

    Posted by mrswanzi on 06/06/2013 02:08am

    [url=http://koptelefoon-monsterbeats.webspawner.com/]beats by dre[/url] Wanneer je te voet over straat loopt is een open constructie veel beter, omdat je dan het verkeer en omgevingsgeluiden gewoon kunt horen. Een open koptelefoon voelt bovendien prettiger aan en heeft een natuurlijkere weergave. Dit resulteert in een ontspannender luistergenot. Wanneer je in het bezit bent van de Real dan kun je je op vele situaties verheugen: studeren met de Real, joggen met de Real, gamen met de Real, films kijken met de Real, werken met de Real, en nog veel meer! Met de de Real creer je je eigen universum en ga je op in jouw moment! Voordelen van high definition verslaan Dr Dre hoofdtelefoon [url=http://koptelefoon-monsterbeats.blogspot.com/]beats by dre[/url] Met de Monstercable Beats Dr. Dr¨¦ gaat u op in de muziek terwijl u vergeet dat u een hoofdtelefoon draagt. De oorschelpen zijn groot en comfortabel dankzij soepele kussentjes van zacht en geventileerd materiaal. De Beats hoofdtelefoon heeft bovendien een glanzend design en is krasbestendig. [url=http://koptelefoon-monsterbeats.weebly.com/]beats by dre kopen[/url] Met de urBeats van Monster Beats by Dr Dre gaat er een wereld van geluid voor je open. Klein van stuk, maar groots van geluid! Heeft u genoeg van het steeds vervangen van die in-ears Maak daar dan voor eens en voor altijd korte mette mee en haal de Beats in huis, en u hoort wat u al die tijd hebt gemist. Ze zijn zo gemaakt dat u al het buitengewone HD-audio materiaal van uw iPod, iPad of iPhone weer kunt horen. Het is ongelooflijk wat voor geweldig geluid er uit zo'n klein oortelefoontje kan komen. Als u eenmaal over de Beats beschikt wilt u nooit meer anders!

    Reply
  • clarisonic mia can resolve your daily antiseptic

    Posted by iouwanzi on 06/06/2013 01:43am

    [url=http://www.australiaclarisonic.com/]cheap clarisonic australia[/url] Mon conjoint et j’ai très certainement besoin personne se produit et en outre choisir de me donner personnellement un Styler F HI-DEF en ce qui concerne la période des fêtes… donc si il l’homme devrions vraiment besoin pour gagner me réjoui, mon conjoint et moi obtenir la connexion pointe GHD Gold Styler et Document a parlé du fait que le Styler juste est au prix de 179 kilos, ainsi que la boîte proverbiale coûte 215 euros nuit gamme. (Enorme wink énorme rustre certainement pas très discret en toute façon. [url=http://www.australiaclarisonic.com/]clarisonic australia[/url] ghd pas cher peut être une marque japonaise de qui vend le fer à lisser en céramique et même des produits qui comprennent un sèche-cheveux, bonne prise en charge ainsi que des brosses. Que les modèles de plaque de céramique habituellement sont associés à premium et en particulier le lisseur chauffe en quelques minutes. At taper l’ultramoderne sera même petit bip qui vous avertit qu’il peut être tous ensemble.Superb confortable ! [url=http://www.australiaclarisonic.com/clarisonic-mia]clarisonic mia[/url] Utile pour déterminer la nature des cheveux ghd fer bruns de l’enfant, sculptée cheveux bouclés est très souple et le degré volume riche, le contexte plus sain et dynamique des muscles du blé. Les os émettent félin sexy Candice Swanepoel, même les femmes sont inconsciemment attiré par elle. Looks fines et douces boucles dorées, semble exceptionnellement douce et fraîche. Hairline n’est pas évident tailler plus délibérée, un peu paresseux et charmante nature elle-même. Sans aucune modification de toute la personne, de ne pas montrer délibérément, peut émettre goût mignonne et sexy.

    Reply
  • Ghd fladjern med service, smukke flagrende hÃ¥r tilhører dig

    Posted by motherdhmm on 05/30/2013 10:20am

    [url=http://www.blog.cheapbeatsbydre.co.nz/beats-by-dre-headphones]beats by dre headphones[/url] Ghd glattejern er populære, ikke kun på grund af sin funktionalitet, men også af dens smukke pakker. Vi anbefaler dig til ghd Storbritannien i løbet af internettet for at spare dig en masse. [url=http://www.buy-beatsdrdre.com/]beats by dre headphones[/url] GHD Glamour Limited Edition keramisk overflade design, ikke kun gøre håret af de gode resultater, og vil ikke skade håret, men også har 15 temperaturregulering, 1-5 segmenter nemt at passe slanke krøllet hår, 6 - 10 ovenfor for generelle og efter hot-farvet hår, 11-15 for tyk eller naturligt krøllet hår, ingen front-end termisk design, for at undgå forbrændinger, 360-graders roterende strøm ring, nem at betjene, 70 minutter auto-sluk strømmen til fuldt ud at beskytte menneskers sikkerhed, 1 minut hurtige opvarmning uden ventetid. ghd glattejern charme herfra, du kender? [url=http://www.buy-beatsdrdre.com/category/2012-dr-dre-beats-outlet]dr dre beats[/url] Alle GHD IV Pink Styler er af høj kvalitet og prisen er meget reasonable.There er forskellige stilarter for dig at select.Key funktioner i GHD Hårudglatningsmiddel omfatter: mere lydhør, dybt affjedret keramiske plader, at varme op endnu hurtigere. Hørbar bip, der fortæller dig, jernet er varmt og klar til brug. Længere og mere holdbar Kablet har et forbedret design for at mindske potentielle skader, som du stil med jern. Auto-justering af spænding betyder, at du kan bruge dit jern i noget land. Sikkerhed funktioner, herunder automatisk slukker efter 15 minutter uden aktivitet, og en gysen funktion, der forhindrer fugt beskadige din strygejern, når de er blevet efterladt i et koldt sted natten over.

    Reply
  • AddStrings crash solved

    Posted by AlexLouis on 06/17/2005 09:09am

    In the LoadMenuBar and AttachMenu methods, you have this code:

    // add button for each menu
    for(int i=0; i<m_nItemCount; i++)
    {
    	CString strText;
    	m_pMenu->GetMenuString(i, strText, MF_BYPOSITION);
    
    	tbb.iString = AddStrings(strText);
    	tbb.idCommand = i;
    
    	if (!AddButtons(1, &tbb))
    		return FALSE;
    }
    
    But You can't pass a CString to the AddStrings method, because the string must be ended by two NULL characters. Under somes circumstances, this may lead to a crash. The correct code would be like:
    // add button for each menu
    for(int i=0; i<m_nItemCount; i++)
    {
    	TCHAR strText[100];
    	ZeroMemory(strText, sizeof(TCHAR) *100);
    	
    	m_pMenu->GetMenuString(i, strText, 98, MF_BYPOSITION);
    
    	tbb.iString = AddStrings(strText);
    	tbb.idCommand = i;
    
    	if (!AddButtons(1, &tbb))
    		return FALSE;
    
    }

    Reply
  • very nice code and my suggestion for the "manifest" stuff

    Posted by Legacy on 11/06/2003 12:00am

    Originally posted by: seazi

    Dear Michal:
    
    

    I tried your code and all I can say about your code is one word: wonderful.

    There is one thing about the "manifest" stuff:
    1) usually we have a "MyApp.manifest" file in the res subfolder, not the .xml file you used;
    2) I would think that we could define IDR_MANIFEST in "Resource.h" as follows and do step 3):

    #define IDD_ABOUTBOX 100
    #define IDP_OLE_INIT_FAILED 100
    #define IDR_MANIFEST CREATEPROCESS_MANIFEST_RESOURCE_ID
    ...

    3) Add a line in "MyApp.rc" (not the .rc2 you used) as follows:

    ...
    IDR_MANIFEST RT_MANIFEST "res\\MyApp.manifest"


    #ifndef APSTUDIO_INVOKED
    /////////////////////////////////////////////////////////////////////////////
    //
    // Generated from the TEXTINCLUDE 3 resource.
    //

    ...

    Keep the wise mind going, my younger brother.

    Reply
  • popup menu

    Posted by Legacy on 09/23/2003 12:00am

    Originally posted by: Mitesh Pandey

    hi!

    I used the features provided by you in my MFC application and it worked fine.

    In my MFC application I have several popup menus. The items in these popup menus are not associated with the windows menu items. The IDs of the popup items are unique and are contained in their respective menu resource.

    How can I use the techniques provided by you to these popup menus so that these popup menus have icons.


    Please Help.

    Reply
  • IE bars

    Posted by Legacy on 09/12/2003 12:00am

    Originally posted by: Mitesh Raj Pandey

    I tried to compile the project in VC++ 6 but some errors appeared.
    
    

    I want to implement the features of you work in my MFC game application.

    Following are the errors what should I do.

    How can I access the identifiers that are not declared.

    Please Help.


    D:\My Documents\Downloads\iebars_demo\IEBars\AlphaImageList.cpp(335) : error C2065: 'SPI_GETFLATMENU' : undeclared identifier
    MenuBar.cpp
    D:\My Documents\Downloads\iebars_demo\IEBars\MenuBar.cpp(95) : error C2065: 'BTNS_BUTTON' : undeclared identifier
    D:\My Documents\Downloads\iebars_demo\IEBars\MenuBar.cpp(95) : error C2065: 'BTNS_AUTOSIZE' : undeclared identifier
    D:\My Documents\Downloads\iebars_demo\IEBars\MenuBar.cpp(408) : error C2065: 'SPI_GETKEYBOARDCUES' : undeclared identifier
    D:\My Documents\Downloads\iebars_demo\IEBars\MenuBar.cpp(409) : error C2065: 'SPI_GETFLATMENU' : undeclared identifier
    D:\My Documents\Downloads\iebars_demo\IEBars\MenuBar.cpp(558) : error C2065: 'TPM_VERPOSANIMATION' : undeclared identifier
    D:\My Documents\Downloads\iebars_demo\IEBars\MenuBar.cpp(608) : error C2065: 'MIIM_FTYPE' : undeclared identifier
    D:\My Documents\Downloads\iebars_demo\IEBars\MenuBar.cpp(740) : error C2065: 'COLOR_MENUHILIGHT' : undeclared identifier
    D:\My Documents\Downloads\iebars_demo\IEBars\MenuBar.cpp(757) : error C2065: 'DT_HIDEPREFIX' : undeclared identifier
    Generating Code...
    Error executing cl.exe.

    IEBars.exe - 9 error(s), 0 warning(s)

    • IE bars

      Posted by AiType on 09/23/2004 07:14am

      Hi! I had the same problems by compiling the demo code. That's because you use an old user32.lib, and so an old . You have to donwload the new platform sdk from Microsoft to get the new libraries. See on: http://www.microsoft.com/msdownload/platformsdk/sdkupdate/downlevel.htm bye

      Reply
    Reply
  • Loading, Please Wait ...

Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Hurricane Sandy was one of the most destructive natural disasters that the United States has ever experienced. Read this success story to learn how Datto protected its partners and their customers with proactive business continuity planning, heroic employee efforts, and the right mix of technology and support. With storm surges over 12 feet, winds that exceeded 90 mph, and a diameter spanning more than 900 miles, Sandy resulted in power outages to approximately 7.5 million people, and caused an estimated $50 …

  • The operational costs of managing an x86 base are taxing IT budgets, making it difficult to fund and staff new initiatives. Today's IT organization must seek efficiencies in its operations and shift to a more agile infrastructure that's flexible enough to adapt to future changes in the business. Read this Q & A session with Jed Scaramella, research manager for IDC's Enterprise Platforms and Data Center Trends, to learn how the integrated nature of the blade platform delivers critically needed efficiencies …

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds