http://alpha-thema-online.uv.ro
Fa-ti si tu propriul forum, pe www.myforum.ro!
Pagina de start a forumului http://alpha-thema-online.uv.ro Autentificare Inregistrare FAQ Membri Cautare

Pagina de start a forumului http://alpha-thema-online.uv.ro » C / C++ / C# » MFC Tips - Application C++
Creaza un subiect nou  Raspunde la subiect Subiectul anterior :: Subiectul urmator 
MFC Tips - Application C++
MesajTrimis: 19/07/2007 16:22 Raspunde cu citat (quote)
Ad_Infinitum
Administrator
Administrator
Ad_Infinitum
Data inscrierii: 23/Iun/2007
Mesaje: 212




Cum gasim folder-ul aplicatiei?

Problema
Se intampla ca o aplicatie sa failizeze atunci cand cauta un fisier in folder-ul ei sau intr-un sub-folder desi acel fisier este bine-mersi acolo. Cele mai posibile cauze sunt doua: sau programatorul a utilizat numai numele fisierului, sau a folosit un full-path-and-file-name batut in cod (ex: "c:\Program Files\MyCoolApp\MyLog.txt").
In primul caz se va folosi directorul curent al aplicatiei dar acesta nu este neaparat acelasi cu folderul aplicatiei (directorul curent poate fi diferit inca de la lansarea aplicatiei sau poate fi schimbat la run-time).
In al doilea caz, aplicatia insasi poate fi instalata in alt folder (in exemplul nostru "c:\Program Files\..." sau chiar foldere speciale cum sunt "Program Files" pot avea denumiri deosebite in functie de versiunea de OS, limba, etc).

Rezolvare (1)
Una dintre solutii ar fi sa "extragem" folderul applicatiei din membrul public m_pszHelpFilePath al clasei aplicatiei (derivata din CWinApp):

Citat:


bool CFoo::GetAppPath(CString& strAppPath)
{
bool bFound = false;
strAppPath.Empty();
CWinApp* pApp = AfxGetApp();
if(NULL != pApp)
{
strAppPath = pApp->m_pszHelpFilePath;
// extras the application path
const int nPos = strAppPath.ReverseFind(_T('\'));
if(-1 != nPos)
{
bFound = true;
strAppPath = strAppPath.Left(nPos);
}
}
return bFound;
}


Rezolvare (2)
Prima metoda ar fi destul de buna, dar mai sigur si chiar mai rudimentar este sa folsim functia WinAPI GetModuleFileName careia ii pasam NULL in întâiul parametru:

Citat:


void GetAppPath(CString& strAppPath)
{
::GetModuleFileName(NULL, strAppPath.GetBuffer(MAX_PATH), MAX_PATH);
strAppPath.ReleaseBuffer();
// extract the application path
const int nPos = strAppPath.ReverseFind(_T('\'));
strAppPath = strAppPath.Left(nPos);
}



Cum customizez AfxMessageBox?

Rezolvare
AfxMessageBox cheama intern functia virtuala CWinApp::DoMessageBox. Exemplul urmator suprascrie CWinApp::DoMessageBox si schimba textul de pe caption (default, numele aplicatiei sau fisierului executabil)

Exemplu

Citat:


// MyApp.h

class CMyApp : public CWinApp
{
// ...
// Overrides
public:
virtual int DoMessageBox(LPCTSTR lpszPrompt, UINT nType, UINT nIDPrompt);
// ...
};

// MyApp.cpp

int CMyApp::DoMessageBox(LPCTSTR lpszPrompt, UINT nType, UINT nIDPrompt)
{
// keep in mind m_pszAppName pointer
LPCTSTR pszAppName = m_pszAppName;
// assign the new desired name
m_pszAppName = _T("My Cool Message Box");
// call base class function
int nRet = CWinApp::DoMessageBox(lpszPrompt, nType, nIDPrompt);
// restore initial m_pszAppName pointer then return
m_pszAppName = pszAppName;
return nRet;
}
Vezi profilul utilizatorului Trimite mesaj privat

MFC Tips - Application C++
 Pagina de start a forumului http://alpha-thema-online.uv.ro » C / C++ / C#
Nu puteti crea un subiect nou in acest forum
Nu puteti raspunde in subiectele acestui forum
Nu puteti modifica mesajele proprii din acest forum
Nu puteti sterge mesajele proprii din acest forum
Nu puteti vota in chestionarele din acest forum
Ora este GMT + 3 ore  
Pagina 1 din 1  

  
  
 Creaza un subiect nou  Raspunde la subiect  


Fa-ti si tu propriul forum GRATUIT, pe www.myforum.ro
    Powered by phpBB © 2001-2004 phpBB Group. phpBB Skin by Vjacheslav Trushkin.