Hola mi estimado,procedo a pasarte el codigo que yo uso para abrir este dialogo estandart
char pstrFileName[256]; //la ruta del fichero
char pstrFileTitle[256]; //el titulo del documento a abrir
static OPENFILENAME ofn ; // la estructura que se utiliza (nota 1)
//Lo siguiente sera en este orden:
//1)Descripicion del fichero a buscar
//2)la extencion de ejemplo
//3)la extension real
//4)otros tipos de ficheros separados por
static TCHAR szFilter[] = TEXT ("Text Files (*.TXT) *.txt ")
TEXT ("ASCII Files (*.ASC) *.asc ")
TEXT ("All Files (*.*) *.* ") ;
ofn.lStructSize = sizeof (OPENFILENAME) ; //tamaño de la estructura
ofn.hwndOwner = hDlg ; //el nombre del HWND en el procedure
ofn.hInstance = NULL ; //la instancia de la aplicacion(poner NULL)
ofn.lpstrFilter = szFilter ;//los parametros de la estructura szFilter
ofn.lpstrCustomFilter = NULL ;//alguna especificacion que desconosco
ofn.nMaxCustFilter = 0 ;
ofn.nFilterIndex = 0 ;
// La ruta del directorio inicial(NULL es el directorio defecto)
ofn.lpstrFile = NULL ;
ofn.nMaxFile = MAX_PATH ;
//el nombre del archivo a abrir por defecto
ofn.lpstrFileTitle = NULL ;
ofn.nMaxFileTitle = MAX_PATH ;
ofn.lpstrInitialDir = NULL ;
ofn.lpstrTitle = NULL ;
// Las banderas de formato,revisar en la API Win32
ofn.Flags = 0 ;
ofn.nFileOffset = 0 ;
ofn.nFileExtension = 0 ;
//la extencion del archivo por defecto
ofn.lpstrDefExt = TEXT ("txt") ;
ofn.lCustData = 0L ;
ofn.lpfnHook = NULL ;
ofn.lpTemplateName = NULL ;
//la ventana padre de este cuadro de dialogo estandart
ofn.hwndOwner = hDlg ;
//las dos variables del principio
ofn.lpstrFile = pstrFileName ;
ofn.lpstrFileTitle = pstrFileTitle;
//flags para tratar el cuadro de dialogo
ofn.Flags = OFN_HIDEREADONLY | OFN_CREATEPROMPT ;
//funcion final para pasar los parametros a la estructura y almacenarlos
GetOpenFileName (&ofn) ;
nota 1:la razon de que sea static es que la estructura la declare dentro de un switch
nota 2:esto puede ser utilizado en muchos lugares,por ejemplo en WinMain,luego de crear la ventana,y antes de mostrarla
o inclusive y mejor aun dentro de un WndProc( LRESULT CALLBACK WndProc(HWND hWnd,UINT iMsg,WPARAM wParam,LPARAM lParam))
o dentro de un dlg proc (BOOL CALLBACK dlgProc(lo mismo que wndProc))
espero que te sea util,cualquier consulta a las ordenes