Jeg kender umiddelbart kun det gamle dos-kald _chdir(). Dette sætter current directory, og burde så også virke ved efterflg. kald til fildialoger:
Change the current working directory.
int _chdir( const char *dirname );
Return Value
Each of these functions returns a value of 0 if successful. A return value of –1 indicates that the specified path could not be found, in which case errno is set to ENOENT.
Parameter
dirname
Path of new working directory
(Bruges tit til at tjekke om et bibliotek eksisterer:
Example
/* CHGDIR.C: This program uses the _chdir function to verify
* that a given directory exists.
*/
#include <direct.h>
#include <stdio.h>
#include <stdlib.h>
void main( int argc, char *argv[] )
{
if( _chdir( argv[1] ) )
printf( "Unable to locate the directory: %s\n", argv[1] );
else
system( "dir *.wri");
}
Det virker ikke, selvom jeg sætter biblioteket til "C:\\" eller "C:\\temp" starter den alligevel i My Music biblioteket og jeg har ikkekunnet få den overbevist om det modsatte...
Jeg bruger _chdir før kaldet af en "folder browser"...
Ok - det var da værd at prøve.... :-(
Hvis du bruger disse funktioner, kan du sætte den path de skal starte med at kigge i:
BOOL OpenFileDialog(HWND hwnd, char* szFileName, char* szPath, char* szFilter)
{
if (szFileName) szFileName[0] = 0;
if (szPath) szPath[0] = 0;
OPENFILENAME ofn;
ZeroMemory((void*)&ofn, sizeof(ofn));
ofn.lStructSize = sizeof (OPENFILENAME);
ofn.nMaxFile = MAX_PATH;
ofn.nMaxFileTitle = MAX_PATH;
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = szFilter;
ofn.lpstrFile = szPath;
ofn.lpstrFileTitle = szFileName;
ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT;
return GetOpenFileName (&ofn);
}
BOOL SaveFileDialog(HWND hwnd, char* szFileName, char* szPath, char* szFilter)
{
if (szFileName) szFileName[0] = 0;
if (szPath) szPath[0] = 0;
OPENFILENAME ofn;
ZeroMemory((void*)&ofn, sizeof(ofn));
ofn.lStructSize = sizeof (OPENFILENAME);
ofn.nMaxFile = MAX_PATH;
ofn.nMaxFileTitle = MAX_PATH;
ofn.hwndOwner = hwnd;
ofn.lpstrFilter = szFilter;
ofn.lpstrFile = szPath;
ofn.lpstrFileTitle = szFileName;
ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT;
return GetSaveFileName (&ofn);
}
SORRY - Glem det sidste indlæg. Det virker selvfølgelig ikke....
hmmm, måske hvis jeg poster koden til folder browseren?
#include "stdafx.h"
#include "folder_dialog.h"
#include <DLGS.H>
#include <WINUSER.H>
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CFolderDialog
IMPLEMENT_DYNAMIC(CFolderDialog, CFileDialog)
WNDPROC CFolderDialog::m_wndProc = NULL;
// Function name : CFolderDialog::CFolderDialog
// Description : Constructor
// Return type :
// Argument : CString* pPath ; represent string where selected folder wil be saved
CFolderDialog::CFolderDialog(CString* pPath) : CFileDialog(TRUE, NULL, _T("*..*"))
{
m_pPath = pPath;
}
BEGIN_MESSAGE_MAP(CFolderDialog, CFileDialog)
//{{AFX_MSG_MAP(CFolderDialog)
// NOTE - the ClassWizard will add and remove mapping macros here.
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
// Function name : WindowProcNew
// Description : Call this function when user navigate into CFileDialog.
// Return type : LRESULT
// Argument : HWND hwnd
// Argument : UINT message
// Argument : WPARAM wParam
// Argument : LPARAM lParam
LRESULT CALLBACK WindowProcNew(HWND hwnd,UINT message, WPARAM wParam, LPARAM lParam)
{
if (message == WM_COMMAND)
if (HIWORD(wParam) == BN_CLICKED)
if (LOWORD(wParam) == IDOK)
{
if (CFileDialog* pDlg = (CFileDialog*)CWnd::FromHandle(hwnd))
{
TCHAR path[MAX_PATH];
GetCurrentDirectory(MAX_PATH, path);
*((CFolderDialog*)pDlg->GetDlgItem(0))->m_pPath = CString(path);
pDlg->EndDialog(IDOK);
return NULL;
}
}
return CallWindowProc(CFolderDialog::m_wndProc, hwnd, message, wParam, lParam);
}
// Function name : CFolderDialog::OnInitDone
// Description : For update the wiew of CFileDialog
// Return type : void
void CFolderDialog::OnInitDone()
{
HideControl(edt1);
HideControl(stc3);
HideControl(cmb1);
HideControl(stc2);
CWnd* pFD = GetParent();
CRect rectCancel; pFD->GetDlgItem(IDCANCEL)->GetWindowRect(rectCancel);
pFD->ScreenToClient(rectCancel);
CRect rectOK; pFD->GetDlgItem(IDOK)->GetWindowRect(rectOK);
pFD->ScreenToClient(rectOK);
pFD->GetDlgItem(IDOK)->SetWindowPos(0,rectCancel.left - rectOK.Width() - 4, rectCancel.top, 0,0, SWP_NOZORDER | SWP_NOSIZE);
CRect rectList2; pFD->GetDlgItem(lst1)->GetWindowRect(rectList2);
pFD->ScreenToClient(rectList2);
pFD->GetDlgItem(lst1)->SetWindowPos(0,0,0,rectList2.Width(), abs(rectList2.top - (rectCancel.top - 4)), SWP_NOMOVE | SWP_NOZORDER);
SetControlText(IDOK, _T("Select"));
pFD->SetWindowText(_T("Choose folder"));
m_wndProc = (WNDPROC)SetWindowLong(pFD->m_hWnd, GWL_WNDPROC, (long)WindowProcNew);
}
Jeg dropper spørgsmålet, jeg har ikke fundet noget brugbart...