Um dir die Unterschiede zwischen GetOpenFileName und IFileOpenDialog bei Vista und später zu zeigen kannst du mal folgenden Code noch testen:
Code:
IFileOpenDialog* pfOpenDlg = 0;
CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pfOpenDlg));
if(pfOpenDlg != 0)
pfOpenDlg->Show();