Hola, pues es de la mas facil que hay, la funcion de win32 es:
BOOL GetOpenFileName( LPOPENFILENAME lpofn);
La funcion retorna true cuando el usuario selecciona uno o varios archivos y presiona el boton aceptar, retorna false cuando cancela o cierra el dialogo.
Aqui continuacion te pongo un pequeño ejemplo:
...
OPENFILENAME ofn;
char fileName[512] = "" ;
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = hWnd; // Handle de tu ventana
ofn.lpstrFilter = "Texto (*.txt)\0*.txt\0Inicio (*.ini)\0*.ini\0Todos (*.*)\0*.*";
ofn.nFilterIndex = 1;
ofn.lpstrFile = fileName;
ofn.nMaxFile = sizeof(fileName);
ofn.lpstrTitle ="Abrir Archivo ...";
ofn.nMaxFileTitle = strlen(ofn.lpstrTitle);
ofn.lpstrInitialDir = NULL;
ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
if (GetOpenFileName(&ofn))
{
//Pon aqui el codigo que quieras en fileName esta
// el nombre de archivo seleccionado.
}
de todas formas revisa la api para ver todas las opciones.
Saludos