instrumente și panoul bara de stare

  • Atunci când se lucrează cu meniul ar trebui să acorde o atenție studenților cu privire la schimbarea meniului în timpul executării programului, astfel încât în ​​practică este foarte des folosit.
  • Ilustrați materialul trebuie să fie sub exemple ilustrative. Foarte bine potrivite pentru acest program din suita Microsoft Office.
  • Ferestre meniu
  • Comenzile din panoul și cadru de aplicare
  • Bara de instrumente
  • Bara de stare.

    Meniul Microsoft Windows - familiar pentru toate componentele aplicației, care constă dintr-o listă orizontală a elementelor de nivel superior; este legat de un meniu care deschide atunci când utilizatorul selectează orice - oricare dintre elementele sale. De obicei, fereastra-cadru este determinată de meniul implicit de resurse, care este încărcat atunci când creați fereastra. Puteți defini o resursă și nu este asociat cu nici o rama ferestrei. În acest caz, programul trebuie să apeleze funcțiile necesare pentru a descărca și de a activa meniul.

    # 9, resursa meniu complet determină starea inițială a meniului: unele comenzi pot fi dezactivate, marcate cu o bifă, sau grupate folosind distanțiere. meniuri pull-down pot fi stivuite. În cazul în care primul nivel al comenzii de meniu este conectat la submeniul, apoi închideți cu această echipă există o săgeată îndreptată spre dreapta.

    Actualizare UI comanda

    Destul de des este necesar pentru a schimba aspectul elementelor de meniu pentru a reflecta starea internă a programului. De exemplu, în cazul în care meniul Edit există Clear All comandă (Șterge tot), atunci poate doriți să-l dezactivați, dacă nu este nimic pentru a curăța. Fără îndoială, programe bazate pe Windows din meniul afișat dezactivat și marcat cu o echipa bifă.

    Când programarea în Win32 sincroniza starea de elemente de meniu, în conformitate cu starea aplicației nu este atât de simplu. Fiecare bucată de cod care se schimbă starea internă a programului trebuie să conțină afirmații care se actualizează meniul. MFC-Biblioteca oferă o abordare diferită, bazată pe o funcție specială de gestionare a apelurilor, care actualizează comanda de interfață de utilizator pentru fiecare meniu este deschis. Argumentul acestei funcții - pentru CCmdUI obiectului, care conține un pointer la elementul de meniu. Folosind acest indicator, handler funcție poate schimba aspectul comanda de meniu. Aceste stivuitoare sunt aplicabile în meniul pull-down, dar nu și la meniul de nivel superior este prezent în mod constant pe ecran. O astfel de handler nu poate fi utilizat, de exemplu, pentru a dezactiva meniul File.

    la definirea manipulare cerințe care se actualizează interfața cu utilizatorul comandă, similar cu cerințele pentru definirea manipulare de comandă. Ai nevoie de o funcție corespunzătoare, un element special al tabelului de mesaje și, desigur, un prototip funcție. Identificator (în acest caz, IDM_ZOOM) se aplică la fel ca și pentru echipa. Aici este necesar să se adauge la fișierul de cod pentru „tip“ de clasă:

    ON_UPDATE_COMMMAND_UI (IDM_ZOOM, OnUpdateZoom) END_MESSAGE_MAP ()

    void GMyView :: OnUpdateZoom (CCmdUI * pCmdUI)

    pCmdUI-> SetCheck (m_bZoomed); // in_bZoomed - variabilă membru de clasă

    Obiectul acestei clase poate fi orice meniu pentru Windows, inclusiv meniul de nivel superior și din meniul drop-down aferente. Cel mai adesea, atunci când apelați funcția Create pentru fenetre și obiectul SMepi explicit nu a creat resursa de meniu este conectat direct la această fereastră. Funcția de membru clasa CWnd GetMenu returnează un pointer la o SMepi temporară. După ce a primit acest indicator, veți obține acces liber la meniu, și îl puteți schimba.

    Puteți defini un meniu în resursa și apoi modificați-l în perioada programului. Dacă este necesar, în timpul punerii în aplicare, puteți crea toate meniul în întregime, fără a utiliza resursele în orice caz, pentru aceste caracteristici utile, cum ar SMepi clasa membru ca ModifyMenu, InsertMenu și DeleteMenu. Fiecare dintre ele funcționează cu un element separat al meniului este determinat de identificatorul sau indicele poziției sale în meniu.

    Meniul obiect este de fapt compus din sub-structură arborescentă. Funcția membru GetSubMenu returnează un pointer la obiectul SMepi reprezentând un meniu drop-down în obiectul principal SMepi. Funcția SMepi :: GetMenuString returnează textul din elementele de meniu listate fie pe index, fie prin comanda ID caută pe întregul meniu, inclusiv sistemul încorporat în al doilea caz.

    Crearea de meniuri contextuale

    2. Introduceți orice nume pentru stânga element de nivel superior și se adaugă o comandă de meniu contextual din meniul pop-up rezultat.

    3. Introduceți procesorul WM_CONTEXTMENU mesaje din clasa „natură“ sau într-o altă clasă de fereastră, primește un mesaj de la butoanele mouse-ului, și programul acesta, după cum urmează:

    void CMyView OnContextMenu (CWnd * pMnd, punctul CPoint)

    TMP_RIGHTBUTTON punctul x, y punct, acest lucru);

    Comenzile meniu contextual pot fi mapate la stivuitoare folosind Class-Wizard în același mod ca și comanda în fereastra cadru de meniu.

    Comenzile din panoul și cadru de aplicare

    Bara de instrumente (bara de instrumente) - o clasă CToolBar obiect. și bara de stare (bara de stare) - clasa de obiect CStatusBar. Ambele clase de derivați ai CControlBar. și că, la rândul său - de la CWnd. Clasa de CControlBar sprijină panourile ferestrelor de control amplasate ferestre în cadru. Ferestrele acestor panouri ajusta automat dimensiunea și poziția atunci când zoom și se deplasează fereastra-cadru. Cadrul de aplicare creează și șterge aceste obiecte și ferestrele lor. AppWizard generează panourile de comandă cod pentru clasa derivată, rama ferestrei, stocate în fișiere și MainFrm.cpp MainFrm.h. Într-o aplicație tipică CToolBar SDI-obiect este în partea de sus a zonei de client CMainFrame. un obiect CStatusBar - în partea de jos. Intre ele este fereastra de vizualizare.

    În cazul în care appwizard generat panouri de control cod pentru această aplicație, utilizatorul poate activa sau dezactiva aceste panouri comenzile din meniul View. Când dezactivați panoul dispare și se recalculează dimensiunea fereastra de vizualizare. Deși unele generale (așa cum este descris mai sus) proprietăți, obiecte „Bara de instrumente“ și „linie de stat“ independent unul față de celălalt și au caracteristici diferite.

    Bara de instrumente - rând orizontal (sau vertical) dispuse butoane grafice, uneori combinate în grupuri. O defalcare în grupuri se realizează prin software-ul, în conformitate cu imaginile de butoane Butoanele stocate într-o imagine raster comună în cadrul resurselor de aplicare. Dacă faceți clic pe butonul, acesta va trimite un mesaj de comandă, cum ar fi meniurile și comenzile rapide de la tastatură. Pentru a actualiza starea butoanelor sunt manipulatorii comandă actualizează interfața cu utilizatorul, cauzată de cadrul de aplicare pentru modificarea aspectului butoanelor

    Bara de instrumente Bitmap

    Poate părea că fiecare buton de pe panoul de instrumente bitmap, dar, de fapt, pentru întreaga imagine raster un panou. Se alocă fiecărei celule înălțime buton 15 și o lățime de 16 pixeli. Cadrul de aplicare permite tragerea butoanelor chenare și schimbați-le cu culoarea de fundal a butonului pentru a afișa starea curentă.

    Orice buton poate fi în următoarele stări

    Butonul este ultimul dintr-un șir de caractere

    Comanda Butonul poate fi fie ( „apăsat“ / „presat“) sau un steag ( „instalat“ / „reset“). Pe bara de instrumente Standard, format prin cadrul de aplicare, toate butoanele - echipă.

    Bara de instrumente și comandă mesaje

    Atunci când utilizatorul face clic pe butonul de pe bara de instrumente, mesajul de comandă este generat. Acesta este livrat ca un mesaj de comandă din meniu.

    Cel mai adesea buton din bara de instrumente duplicate meniu. De exemplu, un buton cu o imagine de o dischetă de pe bara de instrumente Standard (format de cadru de aplicare) este echivalentă cu comanda Save din meniul File. Ambele generează ID__FILE_SAVE de comandă. Un subiect care a primit un mesaj de comandă, indiferent, acesta a generat un clic pe un buton de pe bara de instrumente sau prin selectarea comenzii din meniu.

    Cu toate acestea, butoanele de pe bara de instrumente nu poate fi echivalent cu meniul. În acest caz, se recomandă să se definească taste de comenzi rapide, utilizatorul poate activa această comandă de la tastatură sau prin intermediul Windows macro. Indiferent de butonul corespunzător din bara de instrumente, comenzile de meniu, sau nu, cu ajutorul ClassWizard, puteți defini comanda stivuitoare de mesaje și să actualizeze interfață linie de comandă.

    Pe bara de instrumente asociate bitmap de resurse și resursele aferente RC-Bara de fișier care definește comenzile de meniu asociate cu butoanele. Și imagini bitmap și resurse BARA au același identificator - de obicei IDR_MAINFRAME. Iată conținutul BARA resurselor, sgeneririrovannoe AppWizard:

    IDR_MAINFRAME TOOLBAR 16 ce poate fi descărcat, 15

    constante SEPARATOR permit grupuri separate de butoane de la unul de altul. În cazul în care numărul de butoane din bara de instrumente bitmap depășește numărul de elemente din resursa (cu excepția separatoare), butoane suplimentare nu apar.

    Actualizarea interfeței de utilizator pentru bara de instrumente

    stivuitoare mesaj de actualizare UI folosit pentru a dezactiva o comandă de meniu, sau să le marcați verificat. Aceste procesoare sunt, de asemenea, potrivite pentru butoanele din bara de instrumente. Dacă o astfel de manipulant apelează funcția CCmdUI membru :: Activează la parametrul FALSE, butonul corespunzător este dezactivat (estompată) și nu mai răspunde la clicuri de mouse.

    CCmdUI Funcția :: SetCheck pune o bifă lângă comanda de meniu, un buton din bara de instrumente pentru a pune în aplicare proprietățile semnalizatorului. După apelarea SetCheck cu butonul opțiunea 1 „bețe“ în starea în jos, și cu parametrul 0 - revine la original, „presat“ de stat.

    stivuitoare mesaj de actualizare a interfeței cu utilizatorul pentru comenzile de meniu sunt numite numai atunci când redarea elementelor din meniul corespunzător. Dar bara de instrumente este întotdeauna prezentă pe ecran. Se pune întrebarea când handlerul se numește actualizări interfață? Pentru starea butoanelor pot fi actualizate în mod constant, manipulatorii sunt numite în aplicații în timp inactiv. Dacă elementul de meniu și bara de instrumente butonul utilizează același handler este invocată și atunci când mers în gol, și atunci când deschideți meniul.

    Tooltips (tooltips) găsit în diferite. aplicații bazate pe Windows, inclusiv cele din Visual C ++. Dacă plasați cursorul mouse-ului deasupra unui buton din bara de instrumente și lăsați-l acolo, după o anumită perioadă de timp, de lângă buton va fi o mică fereastră cu text.

    line fereastra de stare nu acceptă de intrare de la utilizator și nu generează mesaje de comandă. Sarcina lui - trebuie doar să fie difuzate arată textul programului în secțiunile respective.

    Bara de stare acceptă două tipuri de secțiuni de text: linia de mesaje, și indicatori. Pentru a utiliza bara de stare pentru a afișa informații specifice aplicației specifice, mai întâi a dezactiva bara de stare standard care afișează sfaturi pentru elementele de meniu și raportează starea tastaturii.

    secțiuni ale Determinarea bara de stare

    Secțiunea în bara de stare sunt determinate de o serie de indicatori statică. ArrWizard care creează fișierul MainFrm.cpp. Constant seturi secțiune ID_SEPARATOR la ​​linia de mesaj, iar celelalte constante sunt identificatori de resurse șir de caractere și de a determina secțiunea indicator.

    Funcția Membru CStatusBar :: SetIndtcators. numit într-o serie de aplicații de clasă fereastra cadru derivate, rezultând în bara de stare, în conformitate cu conținutul unei matrice de indicatori.

    În această secțiune este prezentată o linie definită de (dinamic) de program. Pentru a defini textul mesajului, întâi trebuie să obțineți acces la obiect bara de stare, și apoi apelați CStatusBar funcția de membru :: SetPaneText. trecându-l secțiunea de index. Indici începe cu 0, secțiunea nul - stânga extremă, unitatea 1 este situată la dreapta, etc.

    Următorul fragment de cod face parte dintr-un membru al clasei de funcții „vizualizare“. Notă: aici trebuie mai întâi să se ridice la nivelul cererii, și apoi a reveni la fereastra principală-cadru:

    CMainFrame * pFrame = (CMainFrame *) AfxGetApp () -> m_pMainWnd;

    CStatusBar * pStatus = pFrame-> m_wndStatusBar;

    pStatus-> SetPaneText (0, "șirul de mesaje pentru prima secțiune");

    De obicei, lungimea secțiunii mesajului este exact un sfert din lățimea ecranului. Cu toate acestea, prima secțiune (index 0) lungime variabilă; este nu mai puțin de un sfert din lățimea ecranului poate fi crescută și în cazul în care există loc în bara de stare.

    indicator de stare secțiune în legătură cu un singur rând al resursei care este afișată sau ascunsă în conformitate cu logica handler. Indicatorul indică identificatorul unei resurse șir de caractere, iar același cod este utilizat pentru distribuirea interfeței mesaj de actualizare. Indicator Caps Lock este procesat în ferestrele de clasa-cadru cu ajutorul mesajelor de mai jos, este un element de masă și de tratare (Activare funcție include LED-uri în cazul în care modul Caps Lock este activ):

    ON_UPDATE_COMMAND_UI (ID_INDICATOR_CAPS, OnUpdateKeyCapsLock)

    void CMainFrame :: OnUpdateKeyCapsLock (CCmdUI * pCmdUI)

    pCmdUI-> Activare (:: GetKeyState (VK_CAPITAL) 1);

    Funcțiile care se actualizează interfața utilizator, aplicație downtime cauzat în ciclu, astfel încât bara de stare este actualizată ori de câte ori aplicația primește mesajul. Lungimea secțiunii indicatorului egală cu lungimea rândului corespunzător al resursei.

    Bara de control Stare

    bara de stare standard este atribuit o fereastră AFX_IDW_STATUS_BAR identificator de filială. Acesta a fost cadrul său de aplicare urmărește să obțină indicii pentru elementele de meniu. stivuitoare mesaj de actualizare UI utilizează trei resurse șir de identificare pentru luminile de stare a tastaturii în clasa de bază, rama ferestrei: ID_INDICATOR_CAPS, ID_INDICATOR_NUM și ID_INDICATOR_SCRL. Pentru a controla bara de stare, trebuie să utilizați un alt identificator al ferestrei copil și alte constante pentru indicatori.

    Identificator pentru bara de stare a ferestrei este atribuită CstatusBar apel :: Creează în funcția de membru OnCreate al clasei derivate, rama ferestrei. Această funcție este conținută în fișierul MainFrm.cpp. generat de AppWizard. identificator de fereastră - o treime Creare funcție și implicit la AFX_IDW_STATUS_BAR.

    Pentru a atribui un identificator, înlocuiți apelul

    pe m_wndStatusBar.Create (aceasta, WS_CHILD | WS_VISIBLE | CBRS_BOTTOM, ID_MY_STATUS_BAR),

    Vezi meniul standard, format prin cadrul de aplicare, activează sau dezactivează afișarea barei de stare. Această logică este implementat codul utilizând ID-ul Windows AFX_IDW_STATUS_BAR, care au, de asemenea, să se schimbe. Într-o clasă derivată, fereastra cadru a scrie elementele din tabel cu mesaje și manipulatorii pentru ID_VIEW_STATUS_BAR echipa si mesajele asociate cu actualizarea interfeței cu utilizatorul. ID_VIEW_STATUS_BAR - este ID starea elementului de meniu Bar. Manipulatorii din clasa derivată suprascrie handler implicit pentru CFrameWnd clasă de bază.

  • Care este meniul?
  • Ce tipuri de meniu, știi?
  • Care este tabloul de bord?
  • Ce este bara de stare?
  • Care secțiune are bara de stare?
  • Ce clasă este responsabil pentru lucrul cu bara de stare?
  • Ce clasă este responsabil pentru lucrul cu bare de instrumente?
  • Ce clasă este responsabil pentru meniul?