speichern unter...
-
Hi.
Ich hab von WinAPI egtl keine Ahnung muss aber dennoch ein Programm proggen, in dem man den Speichern Dialog aufruft. Nun weiß ich nicht wie da der Befehl zu lautet
-
Fredi schrieb:
Hi.
Ich hab von WinAPI egtl keine Ahnung muss aber dennoch ein Programm proggen, in dem man den Speichern Dialog aufruft. Nun weiß ich nicht wie da der Befehl zu lautetLoL, wer gibt denn solche Aufgaben ?

Also du brauchst die Struktur OPENFILENAME (MSDN-LINK) und die Funktion GetSaveFileName() (MSDN-LINK)

-
Ich weiß zwar nicht ob man das darf so einen Link zu posten, aber ich tue das jetzt erstmal:
[url]
http://www.winapi.net/index.php?inhalt=s26
[/url]
-
-=Chris=- schrieb:
Ich weiß zwar nicht ob man das darf so einen Link zu posten, aber ich tue das jetzt erstmal:
[url]
http://www.winapi.net/index.php?inhalt=s26
[/url]Du darfst.

-
Wenn ich das so einbaue erhalte ich aber 2 Linkerfehler:
error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""int __cdecl PopFileSaveDlg(struct HWND__ *,char *,wchar_t *)" (?PopFileSaveDlg@@YAHPAUHWND__@@PADPA_W@Z)" in Funktion ""long __stdcall WindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WindowProc@@YGJPAUHWND__@@IIJ@Z)". fatal error LNK1120: 1 nicht aufgelöste externe Verweise.Wes passt da nicht?
-
Zeig mal dein Quellcode. Hast du das wirklich alles so rauskopiert? Und hast du die beiden Zeilen
// Funktionsprototypen void PopFileInitialize (HWND); BOOL PopFileSaveDlg (HWND , PTSTR , PTSTR);Auch in ner Header-Datei reingepackt oder ganz oben in deiner .c/.cpp datei geschrieben?
MfG schirrmie
-
Ich hab es ohne Header gemacht
#define UNICODE #include <windows.h> #include <commdlg.h> namespace fix { const unsigned short IDM_NEW = 0; // Neue Datei const unsigned short IDM_OPEN = 1; // Öffnen const unsigned short IDM_SAVE = 2; // Speichern const unsigned short IDM_SAVEAS = 3; // Speichern unter... const unsigned short IDM_QUIT = 4; // beenden const unsigned short IDM_UNDO = 5; // Rückgängig const unsigned short IDM_REDO = 6; // Wiederherstellen const unsigned short IDM_CUT = 7; // Auschneiden const unsigned short IDM_COPY = 8; // Kopieren const unsigned short IDM_PASTE = 9; // Einfügen const unsigned short IDM_SELECTALL = 10; // Alles auswählen const unsigned short IDM_DESELECTALL = 11; // Alles abwählen } // Funktionsprototypen LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) ; void PopFileInitialize(HWND); BOOL PopFileSaveDlg(HWND , PTSTR , PTSTR); // Globale Variablen WPARAM wParam; ::HWND hWnd; ::WNDCLASS wndcls; ::MSG msg; HMENU hMenu_ = CreateMenu(); HMENU hMenuTemp = CreateMenu(); HMENU hMenuObject = CreateMenu(); HMENU hMenuTemp2 = CreateMenu(); static OPENFILENAME ofn; char lpstrDateiname[MAX_PATH+2]; HANDLE hFile; int __stdcall WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow) { // -- Obermenü -- // Das Dateinemü AppendMenuW(hMenuTemp, MF_STRING, fix::IDM_NEW, L"&Neu\tStrg + N"); AppendMenuW(hMenuTemp, MF_STRING, fix::IDM_OPEN, L"&Öffnen ...\tStrg + 0"); AppendMenuW(hMenuTemp, MF_STRING, fix::IDM_SAVE, L"&Speichern\tStrg + S"); AppendMenuW(hMenuTemp, MF_STRING, fix::IDM_SAVEAS, L"&Speichern unter ..."); AppendMenuW(hMenuTemp, MF_SEPARATOR, 0, NULL); AppendMenuW(hMenuTemp, MF_STRING, fix::IDM_QUIT, L"&Beenden\tStrg + Q"); AppendMenu(hMenu_, MF_POPUP, (UINT_PTR)hMenuTemp, L"&Datei"); hMenuTemp = CreateMenu(); // Das Bearbeitenmenü AppendMenuW(hMenuTemp, MF_STRING, fix::IDM_UNDO, L"&Rückgängig\tStr + Z"); AppendMenuW(hMenuTemp, MF_STRING, fix::IDM_REDO, L"&Wiederherstellen\tStr + Y"); AppendMenuW(hMenuTemp, MF_SEPARATOR, 0, NULL); AppendMenuW(hMenuTemp, MF_STRING, fix::IDM_CUT, L"&Ausschneiden\tStr + X"); AppendMenuW(hMenuTemp, MF_STRING, fix::IDM_COPY, L"&Kopieren\tStr + C"); AppendMenuW(hMenuTemp, MF_STRING, fix::IDM_PASTE, L"&Einfügen\tStr + V"); AppendMenuW(hMenuTemp, MF_SEPARATOR, 0, NULL); AppendMenuW(hMenuTemp, MF_STRING, fix::IDM_SELECTALL, L"&Alles auswählen\tStr + A"); AppendMenuW(hMenuTemp, MF_STRING, fix::IDM_DESELECTALL, L"&Alles auswählen\tStr + Shift + A"); AppendMenu(hMenu_, MF_POPUP, (UINT_PTR)hMenuTemp, L"&Bearbeiten"); hMenuTemp = CreateMenu(); wndcls.cbClsExtra = 0; wndcls.cbWndExtra = 0; wndcls.hbrBackground = static_cast<HBRUSH>(::GetStockObject((int)WHITE_BRUSH)); wndcls.hCursor = NULL; wndcls.hIcon = NULL; wndcls.hInstance = hInstance; wndcls.lpfnWndProc = WindowProc; wndcls.lpszClassName = L"app"; wndcls.lpszMenuName = NULL; // <= Menu rein wndcls.style = CS_HREDRAW | CS_VREDRAW; if(!::RegisterClassW(&wndcls)) return -1; hWnd = ::CreateWindowW( L"app", L"Level-Editor" , WS_OVERLAPPEDWINDOW, 0, 0, 1280, 783, ::GetDesktopWindow(), hMenu_, hInstance, NULL); if(!hWnd) return -1; WORD wNotifityCode; WORD wId=1; ::ShowWindow(hWnd, nCmdShow); ::UpdateWindow(hWnd); while(::GetMessageW(&msg, NULL, NULL, NULL)) { ::TranslateMessage(&msg); ::DispatchMessageW(&msg); } return 0; } LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { case WM_CLOSE: PostQuitMessage(0); return 0; case WM_COMMAND: if(LOWORD(wParam) == fix::IDM_NEW) // Neue Datei { MessageBox(hWnd, L"Sie haben auf Neu gedrückt gedrückt!", L"Neu", MB_OK); break; } if(LOWORD(wParam) == fix::IDM_OPEN) // Datei öffnen { MessageBox(hWnd, L"Sie haben auf Öffnen gedrückt!", L"Öffnen", MB_OK); break; } if(LOWORD(wParam) == fix::IDM_SAVE) // speichern { PopFileInitialize (hwnd); // Initialisierung PopFileSaveDlg (hwnd, lpstrDateiname, NULL); // Systemdialog anzeigen // Keine best. Datei ersetzen! hFile = CreateFile(ofn.lpstrFile ,GENERIC_WRITE, 0, (LPSECURITY_ATTRIBUTES) NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL,(HANDLE) NULL); // .. // Datei speichern // .. CloseHandle(hFile); break; } if(LOWORD(wParam) == fix::IDM_QUIT) // Beenden { DestroyWindow(hWnd); return -1; break; } }; return ::DefWindowProcW(hwnd, uMsg, wParam, lParam); } void PopFileInitialize (HWND hwnd) { // welche Dateitypen sollen gespeichert werden können static TCHAR szFilter[] = TEXT ("Textdateien (*.TXT)\0*.txt\0") \ TEXT ("ASCII-Dateien (*.ASC)\0*.asc\0") \ TEXT ("Alle Dateien (*.*)\0*.*\0\0"); ZeroMemory(&ofn, sizeof(OPENFILENAME)); ofn.lStructSize = sizeof (OPENFILENAME); ofn.hwndOwner = hwnd; ofn.hInstance = NULL; ofn.lpstrFilter = szFilter; ofn.lpstrCustomFilter = NULL; ofn.nMaxCustFilter = 0; ofn.nFilterIndex = 0; ofn.lpstrFile = NULL; // Bei Öffnen bzw. Schließen gesetzt ofn.nMaxFile = MAX_PATH; ofn.lpstrFileTitle = NULL; // Bei Öffnen bzw. Schließen gesetzt ofn.nMaxFileTitle = MAX_PATH; ofn.lpstrInitialDir = NULL; ofn.lpstrTitle = NULL; ofn.Flags = 0; // Bei Öffnen bzw. Schließen gesetzt ofn.nFileOffset = 0; ofn.nFileExtension = 0; ofn.lpstrDefExt = TEXT ("txt"); ofn.lCustData = 0L; ofn.lpfnHook = NULL; ofn.lpTemplateName = NULL; } // Den "Speichern unter" Dialog anzeigen und das Handle zum File zurückliefern BOOL PopFileSaveDlg (HWND hwnd, PTSTR pstrFileName, PTSTR pstrTitleName) { ofn.hwndOwner = hwnd; ofn.lpstrFile = pstrFileName; ofn.lpstrFileTitle = pstrTitleName; ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT; return GetSaveFileName (&ofn); }Aber da krieg ich noch einen Fehler
error C2664: 'PopFileSaveDlg': Konvertierung des Parameters 2 von 'char [262]' in 'PTSTR' nicht möglich Die Typen, auf die verwiesen wird, sind nicht verknüpft; die Konvertierung erfordert einen reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat.
-
Glaube du vermischt hier UNICODE und ANSI:
MSDN schrieb:
PTSTR: A PWSTR ifUNICODE is defined, a PSTR otherwise.
Versuch man PTCHAR anstatt char*
und TCHAR anstatt char
-
Es klappt super danke
