27.06.2013 Views

6. Controale de tip listă O mare parte din mesajele afişate de ...

6. Controale de tip listă O mare parte din mesajele afişate de ...

6. Controale de tip listă O mare parte din mesajele afişate de ...

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

}<br />

Capitolul <strong>6.</strong> <strong>Controale</strong> <strong>de</strong> <strong>tip</strong> <strong>listă</strong> 139<br />

{<br />

CString ErrStr=" Disc "+DiscCurent+<br />

" nepregatit sau violare acces";<br />

MessageBox(ErrStr, "EROARE",MB_ICONSTOP);<br />

}<br />

OnSelchangeDisc();<br />

Am folosit funcţiile:<br />

• UINT GetDriveType(LPCTSTR lpRootPathName) – <strong>de</strong>termină <strong>tip</strong>ul untităţii<br />

logice curente. LpRootPathName este un un şir <strong>de</strong> caractere specificând directorul<br />

rădăcină al unităţii logice <strong>de</strong>spre care se culeg informaţii. Funcţia returnează <strong>tip</strong>ul<br />

supărtului unităţii logice. Valorile care ne interesează sunt:<br />

DRIVE_REMOVABLE – unitatea logică este asociată unui disc ce poate fi scos <strong>din</strong><br />

unitatea locală <strong>de</strong> disc (floppy);<br />

DRIVE_FIXED – unitatea logică este asociată unui disc <strong>de</strong> <strong>tip</strong> hard-disc local;<br />

DRIVE_CDROM – unitatea logică este asociată unui CD-ROM;<br />

DRIVE_REMOTE – unitatea logică este asociată unei mapări <strong>de</strong> reţea;;<br />

• int _getdrive() – returnează valoarea unităţii <strong>de</strong> disc curent selectate (A=1,<br />

B=2, etc.). Această funcţie se găseşte în biblioteca , pe care va<br />

trebui să o inserăm în fişierul sursă;<br />

Schimbarea selecţiei discului, trebuie să aibă ca efect afişarea în caseta cu <strong>listă</strong> a<br />

subdirectoarelor <strong>din</strong> directorul rădăcină a discului respectiv. Vom asocia <strong>de</strong>ci<br />

mesajului CBN_SELCHANGE generat <strong>de</strong> caseta combinată funcţia (cu ClassWizard)<br />

OnSelchangeDisc(). Vom adăuga <strong>de</strong> asemenea clasei CExplorerDlg variabilele<br />

membru CString m_strDisc, care va conţine permanent calea spre directorul<br />

curent, POSITION pos, CStringList m_strLista şi BOOL m_bInainte. În lista <strong>de</strong><br />

şiruri stocată în m_strLista vom salva calea spre fiecare director selectat, astfel încât<br />

la revenire în directorul părinte, să regăsim vechea cale <strong>din</strong> <strong>listă</strong>. m_bInainte va fi<br />

TRUE dacă intrăm într-un subdirector şi respectiv FALSE dacă revenim în directorul<br />

părinte.<br />

void CExplorerDlg::OnSelchangeDisc()<br />

{<br />

// TODO: Add your control notification handler co<strong>de</strong> here<br />

int nIn<strong>de</strong>x=m_cbDisc.GetCurSel();<br />

if (nIn<strong>de</strong>x != CB_ERR)<br />

{<br />

m_cbDisc.GetLBText(nIn<strong>de</strong>x,m_strDisc);<br />

m_strLista.RemoveAll();<br />

pos=m_strLista.GetHeadPosition();<br />

m_bInainte=TRUE;<br />

PopulezDirector();<br />

}<br />

else MessageBox(" Eroare selectie disc ","EROARE",MB_ICONSTOP);<br />

}<br />

Când selectăm un nou subdirector, va trebui să populăm şi caseta cu <strong>listă</strong> cu<br />

subdirectoarele acestuia. Deci, în funcţia asociată acestui eveniment va trebui să<br />

apelăm funcţia PopulezDirector():<br />

void CExplorerDlg::PopulezDirector()<br />

{<br />

H. Vălean 2003

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!