Visual C - Advanced Programming levelet fájlkezelő


nbspnbspZdravstvuyte, kedves előfizetők.
nbspnbspRad tájékoztatni, hogy a következő részben „MFC - egyszerű és összetett,” elindított egy új cikksorozatot „létrehozása File Manager”, amely részletesen tárgyaljuk a folyamat kidolgozása analóg programot széles körben ismert Windows Commander - a. Remélem lesz érdekelt.

nbspnbspKak mindig, akkor küldje el a visszajelzést a linkre kattintva.

Tisztelettel. Üdvözlettel, Victor Vahturov.

MFC - egyszerű és összetett [létrehozása fájlkezelő (Part 1)].

nbspnbspKak írtam az utolsó hírlevél, ma kezdeni egy új témát.

nbspnbspHochu nyújtunk egy érdekes gyakorlat - írjunk egy fájlkezelő. Írja akarat, természetesen, a fejlesztői környezet Microsoft Visual C ++ és az MFC könyvtár.

nbspnbspSnachala fogunk létrehozni a felület - a „arca” a szoftvert, majd a „töltse ki” ő „agya”.

nbspnbspNe lesz ideje gondolkodni, hogy vajon milyen felületet fogunk. A klasszikus kép a felhasználói felület File Manager már körülbelül egy hosszú idő (mert az első változat a Norton Commander). Aztán játszott számos héj alatt futó program DOS és a régebbi programok, fájlkezelők, dolgozó Windows alatt. Így a „központ” az összes interfész lesz, mint mindig, két panel azonos megjelenésű (felsorolását tartalmazó fájlokat és könyvtárakat, valamint néhány, a kontrollok) és könyv az azonos funkcionális terhelés.

nbspnbspKak azt fentebb már említettük, nem megyünk messzire egy példát. Ezen túlmenően, jobban tanulnak játszani néhány klasszikus dolgokat. Ezért úgy döntünk, mint egy modell egy klasszikus példája - a maga nemében között mintaprogramok ebben az osztályban - Windows Commander (most azonban az úgynevezett Total Commander, mert Billy bácsi nagyon aggasztja a tisztaság, hogy meglátásuk szerint a logó szellőzők).
Szóval Mi csak próbálja, hogy bizonyos mértékig játszani a Total Commander felület - a. Tény, hogy ez nem nehéz. Beletelt csak egy pár órát. De ha egyértelmű, hogy mit kell tennie.
Megígérem, hogy elolvasása után ebben a cikksorozatban, akkor kialakulhat a MFC felhasználói felület sokkal bonyolultabb, mint a Total Commander.

nbspnbspZa alapvető szabály Munkánk fogadni az elvet. „Oszd meg és uralkodj”. Mi fogja osztani a feladatot részekre, és minden egyes rész - egy másik része. És következetesen végre, mire van szükség ebben a szakaszban. Építünk a program a modulokat, amelyek eredményesen lehet használni később a többi alkalmazásban.

nbspnbspEsche csak nézd meg a felhasználói interfész a program Total Commander.
Két panelek elválasztjuk. Az. Ez róla ma, és lesz szó.
Mintegy megosztott ablakok. Mintegy splitter.

Osztók.

nbspnbspPrezhde elkezdi létrehozni a projekt, hadd magyarázzam egy kis elmélet (mivel, ahol ugyanaz az anyja nélkül).

nbspnbspNablyudaya fejlesztése felhasználói felület alkalmazások Windows alatt futó, meg kell jegyezni, egyértelmű előrelépést ezen a területen az elmúlt években. A felület valóban egyre kényelmesebb és élvezetesebb, több „felhasználóbarát”. Egyre fontosabb szerepet ebben a folyamatban játszott a „nem természetes” Windows ellenőrzések alkalmassága nem valósítják meg a szabványos elemeket és a fejlesztők számára, hogy speciális problémák megoldásához.

nbspnbspKak Ironikus, osztók csak egy csoport „nem standard” ellenőrzés. Ez azt jelenti, hogy nincs splitter ablak osztály által meghatározott operációs rendszer, és ha szükséges, az (splitter) lesz eladni magad. Szerencsére, a vállalatok - a gyártók programozók gondoskodtak az igények és a osztálykönyvtárat építeni felhasználói felület általában áll osztályok felölelik a funkcionalitás a megosztott ablakot.

nbspnbspEsli jobban megvizsgálja a program felhasználói felületet, a splitter, akkor előfordulhat, hogy nem minden osztók azonosak, és nyilván vannak különböző működési elvek. Valójában, jellemzően kétféle típusú osztók. barátságos és hierarchikus.

Legyen minden típusú részletesebben.

nbspnbspVy láthatjuk ezt a fajta splitter elég gyakran. Egy példája olyan alkalmazás, amely azt barátságos splitter egy olyan alkalmazás, a Windows Hh.exe segítséget.
Eljövetele előtt a Visual Studio .NET és spravotsnoy rendszer összes súgó MSDN megtekintette ezt az alkalmazást. Futtassa a Windows Súgó és meg fogod érteni, mire gondolok.

nbspnbspObychno barátságos splitter - egy ablak között helyezkedik el közös álláspontjukat, és amelynek egyik ablak a szülő ablakot. Ha a „méri” az egér az ablak, mozog vízszintesen vagy függőlegesen (attól függően, hogy milyen - vízszintes vagy függőleges splitter), miután az egérmutatót, vagy azzal egyidejűleg a mozgás (ami gyakori újrarajzolás megosztott windows), vagy azt követően „release” átméretezi megosztott ugyanezek ablakokat. A hátrányai ennek a splitter az a lehetőség, problémák, az újrarajzolás, mint a megosztott ablakok, és az ablakok a hasító, valamint azt, hogy milyen gyakran szálelágazójának így „split” csak két ablakot. Próbálja újra elindítani a Windows Súgó és mozgassa a splitter elég messze a bal első és a jobb, majd - a jogot az eredeti helyére. Sokszor néztem nepererisovavshiesya „lábnyom” a zenekar splitter ablakot.

nbspnbspImenno elosztót megvalósított MFC. A működési elve ennek splitter, hogy az osztó a szülő ablak minden „megosztott” ablakokat. Ez általában az ilyen elosztót úgy van elhelyezve, az ablak - a keret oly módon, hogy az kitöltse a teljes kliens területen, és az ablakokat kell különíteni Jelosztóként teremt gyermek ablakok a splitter. Ha a „húzás” a megosztása ezt splitter általában blokkok jelennek meg egy téglalap alakú terület általuk elfoglalt és gyárt funkció LockWindowUpdate rajz „drag and drop a területen.” A hátránya ennek a módszernek, hogy abban az időben a „drag and drop” blokkolja az összes grafikus teljesítmény az összes „megosztott” ablakokat.
De az előnyök egy ilyen osztó lehetnek arra, hogy „share” több mint két ablakot egyszerre, vízszintesen és függőlegesen. Más szóval, akkor létrehozhat egy teljes „mátrix” ablak, amely elhelyezhető a splitter mezőbe.

nbspnbspNa Ezzel befejeződött a kitérő be az elmélet és lemenni a gyakorlati munka.

nbspnbspDlya Először hozzon létre egy projektet.

nbspnbspSozdadim ez a szokásos varázsló (MFC AppWizard (exe)) Visual C ++, hogy hozzon létre egy MFC - alkalmazásokat.
Hívtam VCmd projekt. Rövid és egyszerű.
Az első lépésben a varázsló ki egy egységes dokumentum típusú alkalmazások és tiltsa Document Architecture / Nézd a jelölést a négyzetből. Next - az alapértelmezett minden lépést №4 varázsló. Itt, csak törölje a „Kezdeti Status Bar”. Tehát megszabadult az előre állapotsorban (a Total Commander nem). Minden. Akkor kattintson a „Befejezés” gombra. A projekt jött létre. Lefordítani, akkor látni fogjuk, csak a ablakkeret az eszköztárak és menük. Eszköztár fogunk foglalkozni később, és most szeretnék látni mást, mint, mint a két ablak elválasztva splitter.

nbspnbspPri hozzon létre egy projektet a támogatást az építészet dokumentum / Shape azonnal létre ablakot, osztva a splitter. Akkor is létre egyfajta „üres”, a Windows Intézőben, de egyrészt nem akarjuk a karmester. Másodszor, nem akarjuk a dokumentumot osztályok a projekt - nem kell a sorszámozás és egyéb jellemzőit. Szükségünk van egy könnyű és elegáns keret alkalmazása. Itt fog tanulni.

nbspnbspPrezhde összes veszi, hogy a jó fejlesztők a Microsoft, majd balra egy kis „lábnyom” architektúra dokumentum / formában. A projekt egy osztály CChildView, ponasledovanny osztályból CWnd. Ez az ablak osztály létre a kliens területe az ablakon - keret és elfoglalja szinte az egész kliens terület (kivéve azt a területet foglalja el az eszköztáron).
Object osztály CChildView m_wndView egy változó összetevője az osztály CMainFrame - osztály fő ablakkeretre.

nbspnbspTeper megszabadulni az ablakot, helyette egy splitter.

nbsp2. Vegyük ki a funkciót CMainFrame :: OnCreate létrehozását m_wndView ablakot. Vagyis, mi távolítsa el a sort:

nbspif (! m_wndView.Create (NULL, NULL, AFX_WS_DEFAULT_VIEW,
nbspnbspCRect (0, 0, 0, 0), ez az, AFX_IDW_PANE_FIRST, NULL))
nbsp nbspnbspTRACE0 ( "Nem sikerült létrehozni a nézet ablak \ n");
nbspnbspreturn -1;
nbsp>

nbsp3. A funkciók a CMainFrame :: OnSetFocus és CMainFrame :: OnCmdMsg m_wndView változó helyébe m_wndSplitter.

nbsp4. Hozzáadás CMainFrame osztály két zashischennye (védett) változók:

nbspnbspeto ideig tart a tükör - a dugót, hogy be őket az elosztót, és biztosítsák a megfelelő viselkedést.

nbsp5. Add funkciót ClassWizard OnCreateClient eszköz CMainFrame osztály, amely hozzá a következő kódot, hogy megteremtse a splitter és a gyermek ablakok:

nbspBOOL CMainFrame :: OnCreateClient (LPCREATESTRUCT LPC, CCreateContext * pContext)
nbsp nbspnbspif (! m_wndSplitter.CreateStatic (ez 1, 2))
nbspnbspnbspnbspreturn FALSE;

nbspnbsp // kód listákat létrehozni, add, hogy ezek az oszlopok és a telepítés a fejlett
nbspnbsp // stílusok akkor természetesen váltja alkatrészek inicializáló kódot
nbspnbsp // File Manager tartalmának megjelenítésére
nbspnbsp // könyvtár, amely azt fogja írni később.

nbspnbspif (m_wndLeftPane.Create (WS_CHILD |! WS_VISIBLE,
nbspnbspnbspnbspCRect (0, 0, 0, 0) m_wndSplitter,
nbspnbspnbspnbspm_wndSplitter.IdFromRowCol (0, 0)))
nbspnbspnbspnbspreturn FALSE;

nbspnbspif (m_wndRightPane.Create (WS_CHILD |! WS_VISIBLE,
nbspnbspnbspnbspCRect (0, 0, 0, 0) m_wndSplitter,
nbspnbspnbspnbspm_wndSplitter.IdFromRowCol (0, 1)))
nbspnbspnbspnbspreturn FALSE;

nbspnbspm_wndLeftPane.InsertColumn (0, "Név", LVCFMT_LEFT, 60, 0);
nbspnbspm_wndLeftPane.InsertColumn (1, "Ext", LVCFMT_LEFT, 28, 1);
nbspnbspm_wndLeftPane.InsertColumn (2, "Size", LVCFMT_LEFT, 32, 2);

nbspnbspm_wndRightPane.InsertColumn (0, "Név", LVCFMT_LEFT, 60, 0);
nbspnbspm_wndRightPane.InsertColumn (1, "Ext", LVCFMT_LEFT, 28, 1);
nbspnbspm_wndRightPane.InsertColumn (2, "Size", LVCFMT_LEFT, 32, 2);

nbspnbspreturn CFrameWnd :: OnCreateClient (LPC, pContext);
nbsp>

nbspNu Most azt látjuk, vidám képet. Keretablak eszköztár (eredeti állapotban), egy splitter, egy elválasztó van „beillesztett”, hogy az egyik szélét az ablak.

nbspnbspNe nagyon szép. Hát nem?

nbspnbspMozhno mozog splitter splitter, ahogy kell, de ha az átméretezés a fő ablakkeret splitter splitter nem fog mozogni. Azaz, (szeparátor) egy fix helyzetben.
Sajnos. Valóban, a Total Commander - e splitter tartja a relatív helyzete (százalék szélessége az ablak jobb oldalán található a splitter a bal oldali ablakban szélesség következetesen). De a standard splitter MFC nem támogatja ezt a funkciót. De vannak problémák és azok megoldására.

nbspnbspV következő cikkben fogok beszélni, hogyan lehet módosítani a splitter MFC, hozzátéve, hogy hasznos funkciót.

nbspnbspnbspnbspA most.

A forráskód a projekt tekinthető a cikk megtalálható az oldalon levelezési SoftMaker.fatal.ru a projekt honlapján.