用windows api写对话框

 

1. 通用对话框(打开文件)

int OpenFileDlg(char* szFile , HWND hwnd)
{
OPENFILENAME   ofn;               //   通用对话框结构

//   初始化结构体

ZeroMemory(&ofn,   sizeof(ofn));
ofn.lStructSize   =   sizeof(ofn);
ofn.hwndOwner   =   hwnd;
ofn.lpstrFile   =   szFile;

//    将 lpstrFile设置为空字符串  
ofn.lpstrFile[0]   =   ('\0');
ofn.nMaxFile   =   256;//sizeof(szFile);
ofn.lpstrFilter   =   ("cd files(img,iso,bin)\0*.img;*.iso;*.bin\0All\0*.*\0");
ofn.nFilterIndex   =   1;
ofn.lpstrFileTitle   =   NULL;
ofn.nMaxFileTitle   =   0;
ofn.lpstrInitialDir   =   NULL;
ofn.Flags   =   OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;

//   显示打开文件对话框.  
if   (GetOpenFileName(&ofn)==TRUE)  
   return 0;
else
{
   int err = CommDlgExtendedError();
   return -1;
}
}

使用:

char fileName[256];

if (OpenFileDlg(fileName, NULL)==0)//文件路径保存在fileName中
    {
    
     FILE* pFile = fopen(fileName, "rb");

    。。。
    }

2. 模态对话框

首先需要创建一个对话框资源,设ID为IDD_DLG_ABOUT

然后调用DialogBox函数显示对话框,注意对话框也是一个窗体,需要为其指定一个窗体消息处理函数,该函数与窗体消息处理函数稍有不同,即返回值为BOOL型。

BOOL CALLBACK about_dlg_proc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
switch (msg)
{
case WM_INITDIALOG:
  
   return TRUE;
case WM_COMMAND:
   switch (LOWORD(wParam))
   {
   case IDOK:
    EndDialog(hwnd, IDOK);
    return TRUE;
   }
   break;
case WM_DESTROY:
   return TRUE;
}
return FALSE;
}

int ShowAboutDlg()
{
int ret = DialogBox(NULL, MAKEINTRESOURCE(IDD_DLG_ABOUT), g_hWnd, about_dlg_proc);
return ret;
}


你可能感兴趣的:(VC++)