Win32 Api: How create Open/"Save as" Dialog?
Marcone
marcone at email.com
Sun Jan 12 10:25:22 UTC 2020
On Saturday, 11 January 2020 at 14:21:25 UTC, Adam D. Ruppe wrote:
> On Saturday, 11 January 2020 at 12:22:25 UTC, Marcone wrote:
>> wchar[1024] szFileName = 0;
>> ofn.lpstrFile = cast(LPWSTR) szFileName;
>
> You shouldn't cast there, just use `szFileName.ptr` instead.
>
>> ofn.nMaxFile = MAX_PATH;
>
> and this should be the length of the array. It may require a
> case
>
> nMaxFile = cast(DWORD) szFileName.length;
Changed! New code with changes working very well:
import std;
import core.sys.windows.windows;
pragma(lib, "comdlg32");
// Function askopenfilename()
string askopenfilename(const(wchar)* filter = "All Files
(*.*)\0*.*\0"){
OPENFILENAME ofn;
wchar[1024] szFileName = 0;
ofn.lpstrFile = szFileName.ptr;
ofn.lpstrFilter = filter;
ofn.nMaxFile = cast(DWORD) szFileName.length;
ofn.Flags = OFN_EXPLORER | OFN_FILEMUSTEXIST |
OFN_HIDEREADONLY;
if (GetOpenFileNameW(&ofn)){
return to!string(szFileName[0..szFileName.indexOf('\0')]);
} else {
return "";
}
}
void main(){
writeln(askopenfilename()); // Call without filter.
writeln(askopenfilename("Text Files (*.txt)\0*.txt\0All Files
(*.*)\0*.*\0")); // Cal using filter.
}
More information about the Digitalmars-d-learn
mailing list