Avatar billede ladyhawke Novice
17. juni 2002 - 16:28 Der er 9 kommentarer og
1 løsning

sæt arbejdsbibliiotek?

Hvordan kan man sætte arbejdsbiblioteket (Visual C++) så fildialoger der åbnes efterfølgende benytter det ønskede bibliotekt og ikke windows standard
Avatar billede kamikaze Nybegynder
17. juni 2002 - 22:46 #1
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 );
Avatar billede kamikaze Nybegynder
17. juni 2002 - 22:47 #2
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
Avatar billede kamikaze Nybegynder
17. juni 2002 - 22:48 #3
(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");
}
Avatar billede ladyhawke Novice
18. juni 2002 - 08:02 #4
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"...
Avatar billede kamikaze Nybegynder
18. juni 2002 - 09:26 #5
Ok - det var da værd at prøve.... :-(
Avatar billede kamikaze Nybegynder
18. juni 2002 - 09:29 #6
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);
}
Avatar billede kamikaze Nybegynder
18. juni 2002 - 09:33 #7
SORRY - Glem det sidste indlæg. Det virker selvfølgelig ikke....
Avatar billede ladyhawke Novice
18. juni 2002 - 09:52 #8
hmmm, måske hvis jeg poster koden til folder browseren?
Avatar billede ladyhawke Novice
18. juni 2002 - 10:20 #9
#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);
}
Avatar billede ladyhawke Novice
27. juni 2002 - 14:21 #10
Jeg dropper spørgsmålet, jeg har ikke fundet noget brugbart...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester