30. januar 2002 - 13:02
Der er
5 kommentarer og
1 løsning
Et godt spørsmål visual c++ 6.0
Jeg sidder med problem. Jeg skal lave sådan at jeg kan browse mig fram til en sti idet program jeg sidder med. så mit spørgsmålo er hvordan får jeg lavet det. På forhånd tak for hjælpen
med venlig hilsen
Mikael Holbæk Bertelsen
30. januar 2002 - 15:13
#2
Hejsa :)
Jeg har lige skrevet et bitte stykke kode, der (når du klikker i hovedvinduet) åbner en fileselection-dialog.
Når dialogen lukkes, vises stien i en messagebox (eller måske en error).
Jeg indsætter koden i en efterfølgende kommentar for at holde det adskildt.
Der er rigtig mange variable i OPENFILENAME strukturen, så prøv at kigge i dit MSDN under "GetOpenFileName" og "OPENFILENAME" for en nærmere beskrivelse
PS! Det er lavet som en helt almindelig "Win32 Application" i VC++6, og alt det interessante sker i OpenFile-funktion
Håber det hjælper, held og lykke :)
30. januar 2002 - 15:17
#3
#include <windows.h>
void OpenFile(HWND hWnd){
OPENFILENAME ofn;
char szFile[MAX_PATH] = "";
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hWnd;
ofn.lpstrFile = szFile;
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
if(GetOpenFileName(&ofn) == TRUE)
MessageBox(hWnd, szFile, TEXT("Selected file/directory"), MB_OK);
else
MessageBox(hWnd, TEXT("Ehh... What is going on? I really hope you clicked the cancel-button :/"), TEXT("Error: GetOpenFileName"), MB_ICONERROR);
}
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
static HWND hMainWnd;
switch(uMsg){
case WM_CREATE:
hMainWnd = hWnd;
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_LBUTTONUP:
OpenFile(hMainWnd);
return 0;
}
return DefWindowProc(hWnd, uMsg, wParam, lParam);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd){
HWND hWnd;
MSG msg;
TCHAR szClassName[] = TEXT("MyFileOpener");
WNDCLASS WndClass;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
WndClass.hCursor = LoadCursor(NULL, IDC_ARROW);
WndClass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = WindowProc;
WndClass.lpszClassName = szClassName;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
if(!RegisterClass(&WndClass)){
MessageBox(NULL, TEXT("An error occured while registering the window class"), TEXT("Error: RegisterClass"), MB_ICONERROR);
return 0;
}
hWnd = CreateWindow(szClassName, TEXT("Fun with a file-opener"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, nShowCmd);
UpdateWindow(hWnd);
while(GetMessage(&msg, NULL, 0, 0)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
30. januar 2002 - 15:20
#4
OK! Nu må det vist snart være tid til at jeg bliver nomineret som den bruger, på eksperten, der er bedst til at lave f*** up i kode-formateringen :) LOL
Men jeg håber det går
30. januar 2002 - 15:25
#5
holber:
Du har stadig ikke skrevet om det er efter filer eller foldere du vil browse?
Hvis det er efter filer, og du bruger MFC, kan du bare skrive:
CFileDialog dlg;
if(dlg.DoModal() == IDOK)
{
// gør hvad du vil med filen
CString strFileName = dlg.GetFileName()
}